Overall Statistics |
Total Trades 546 Average Win 1.59% Average Loss -1.27% Compounding Annual Return -0.221% Drawdown 26.500% Expectancy 0.025 Net Profit -3.816% Sharpe Ratio -0.017 Probabilistic Sharpe Ratio 0.000% Loss Rate 55% Win Rate 45% Profit-Loss Ratio 1.26 Alpha -0.002 Beta 0.026 Annual Standard Deviation 0.041 Annual Variance 0.002 Information Ratio -0.364 Tracking Error 0.156 Treynor Ratio -0.026 Total Fees $2357.41 Estimated Strategy Capacity $3400000.00 Lowest Capacity Asset IJT RWQR2INKP0TH |
#region imports from AlgorithmImports import * #endregion # https://www.quantconnect.com/tutorials/strategy-library/momentum-and-style-rotation-effect # https://quantpedia.com/Screener/Details/91 class MomentumAndStyleRotationAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2001, 1, 1) self.SetEndDate(2018, 8, 1) self.SetCash(100000) tickers = ["IJJ", # iShares S&P Mid-Cap 400 Value Index ETF "IJK", # iShares S&P Mid-Cap 400 Growth ETF "IJS", # iShares S&P Small-Cap 600 Value ETF "IJT", # iShares S&P Small-Cap 600 Growth ETF "IVE", # iShares S&P 500 Value Index ETF "IVW"] # iShares S&P 500 Growth ETF lookback = 12*20 # Save all momentum indicator into the dictionary self.momp = dict() for ticker in tickers: symbol = self.AddEquity(ticker, Resolution.Daily).Symbol self.momp[symbol] = self.MOMP(symbol, lookback) self.SetWarmUp(lookback) # Portfolio monthly rebalance self.Schedule.On(self.DateRules.MonthStart("IJJ"), self.TimeRules.At(0, 0), self.Rebalance) def Rebalance(self): '''Sort securities by momentum. Short the one with the lowest momentum. Long the one with the highest momentum. Liquidate positions of other securities''' # Order the MOM dictionary by value sorted_mom = sorted(self.momp, key = lambda x: self.momp[x].Current.Value) # Liquidate the ETFs that are no longer selected for symbol in sorted_mom[1:-1]: if self.Portfolio[symbol].Invested: self.Liquidate(symbol, 'No longer selected') self.SetHoldings(sorted_mom[-1], -0.5) # Short the ETF with lowest MOM self.SetHoldings(sorted_mom[0], 0.5) # Long the ETF with highest MOM