Overall Statistics |
Total Trades
704
Average Win
1.14%
Average Loss
-1.53%
Compounding Annual Return
4.315%
Drawdown
46.300%
Expectancy
0.208
Net Profit
159.719%
Sharpe Ratio
0.325
Probabilistic Sharpe Ratio
0.005%
Loss Rate
31%
Win Rate
69%
Profit-Loss Ratio
0.74
Alpha
0.006
Beta
0.499
Annual Standard Deviation
0.111
Annual Variance
0.012
Information Ratio
-0.208
Tracking Error
0.111
Treynor Ratio
0.072
Total Fees
$2095.63
Estimated Strategy Capacity
$5300000.00
Lowest Capacity Asset
GSG TKH7EPK7SRC5
|
#region imports from AlgorithmImports import * #endregion # https://quantpedia.com/strategies/asset-class-momentum-rotational-system/ # # Use 5 ETFs (SPY - US stocks, EFA - foreign stocks, IEF - bonds, VNQ - REITs, GSG - commodities). # Pick 3 ETFs with strongest 12 month momentum into your portfolio and weight them equally. # Hold for 1 month and then rebalance. class MomentumAssetAllocationStrategy(QCAlgorithm): def Initialize(self): self.SetStartDate(2000, 1, 1) self.SetCash(100000) self.data = {} period = 12 * 21 self.SetWarmUp(period) self.symbols = ["SPY", "EFA", "IEF", "VNQ", "GSG"] for symbol in self.symbols: self.AddEquity(symbol, Resolution.Daily) self.data[symbol] = self.ROC(symbol, period, Resolution.Daily) self.recent_month = -1 def OnData(self, data): if self.IsWarmingUp: return # monthly rebalance if self.Time.month == self.recent_month: return self.recent_month = self.Time.month sorted_by_momentum = sorted([x for x in self.data.items() if x[1].IsReady and x[0] in data and data[x[0]]], key = lambda x: x[1].Current.Value, reverse = True) count = 3 long = [x[0] for x in sorted_by_momentum][:count] invested = [x.Key.Value for x in self.Portfolio if x.Value.Invested] for symbol in invested: if symbol not in long: self.Liquidate(symbol) for symbol in long: self.SetHoldings(symbol, 1 / len(long))