Overall Statistics |
Total Trades 0 Average Win 0% Average Loss 0% Compounding Annual Return 0% Drawdown 0% Expectancy 0 Net Profit 0% Sharpe Ratio 0 Probabilistic Sharpe Ratio 0% Loss Rate 0% Win Rate 0% Profit-Loss Ratio 0 Alpha 0 Beta 0 Annual Standard Deviation 0 Annual Variance 0 Information Ratio -18.832 Tracking Error 0.086 Treynor Ratio 0 Total Fees $0.00 |
# https://seekingalpha.com/article/4299701-leveraged-etfs-for-long-term-investing # Momentum addaped verision of: # https://www.quantconnect.com/forum/discussion/7708/using-levered-etfs-in-ira-10-years-24-cagr-1-56-sharpe/p1 # with some extra symbols. import pandas as pd import numpy as np class MultidimensionalTransdimensionalPrism(QCAlgorithm): def Initialize(self): self.SetStartDate(2020, 7, 7) # Set Start Date self.SetCash(10000) # Set Strategy Cash self.SetEndDate(2020, 7, 16) # create a dictionary to store momentum indicators for all symbols self.data = {} self.rsi = {} self.momp = {} #MOM period period = 21*4 #rsi period period2 = 10 #MOMP period period3 = 44 self.symbols = ["TQQQ", "UBT", "TECL","UGLD","TYD"] self.SetRiskManagement(TrailingStopRiskManagementModel(0.25)) # warm up the MOM indicator self.SetWarmUp(period) for symbol in self.symbols: self.AddEquity(symbol, Resolution.Hour) self.data[symbol] = self.MOM(symbol, period, Resolution.Hour) for symbol in self.symbols: self.rsi[symbol] = self.RSI(symbol, period2, Resolution.Daily) for symbol in self.symbols: self.momp[symbol] = self.MOMP(symbol, period3, Resolution.Daily) self.Schedule.On(self.DateRules.Every(DayOfWeek.Wednesday), \ self.TimeRules.At(15, 30), \ self.Rebalance) def OnData(self, data): # check if this algorithm is still warming up pass def Rebalance(self): if self.IsWarmingUp: return #pd = panda data series for mom (not used) #top3 = pd.Series(self.data).sort_values(ascending = False)[:3] #self.Log(str(top3.index)) #self.Log(str(pd.Series(self.data))) #self.Log(str(self.data)) alldata = pd.DataFrame({'momp':pd.Series(self.momp),'rsivalue':pd.Series(self.rsi)}) RSIlessthan80 = alldata.drop(alldata[alldata['rsivalue']<=80].index) top3 = RSIlessthan80.sort_values(by='momp', ascending = False)[:3] #self.Log(str(alldata)) # is RSI less than 80? # RSIlessthan80 is a boolean variable with True or False in it # filter rows for year 2002 using the boolean expression # RSIlessthan80 = alldata[alldata.rsi.lt(80)] # self.Log(str(RSIlessthan80)) #top3 = pd.Series(self.momp).sort_values(ascending = False)[:3] #momptop3 = pd.Series(self.momp).sort_values(ascending = False)[:3] #self.Log(str(momptop3.index)) #self.Log(str(pd.Series(self.momp))) #self.Log(str(self.momp)) #self.Plot("Stock", "TQQQ", self.Securities["TQQQ"].Price) #self.Plot("Stock", "UBT", self.Securities["UBT"].Price) #self.Plot("Stock", "TECL", self.Securities["TECL"].Price) #self.Plot("Stock", "UGLD", self.Securities["UGLD"].Price) #self.Plot("Stock", "TYD", self.Securities["TYD"].Price) #self.Plot("Momentum", "TQQQ", self.data["TQQQ"].Current.Value) #self.Plot("Momentum", "UBT", self.data["UBT"].Current.Value) #self.Plot("Momentum", "TECL", self.data["TECL"].Current.Value) #self.Plot("Momentum", "UGLD", self.data["UGLD"].Current.Value) #self.Plot("Momentum", "TYD", self.data["TYD"].Current.Value) #self.Plot("RSI", "TQQQ", self.rsi["TQQQ"].Current.Value) #self.Plot("RSI", "UBT", self.rsi["UBT"].Current.Value) #self.Plot("RSI", "TECL", self.rsi["TECL"].Current.Value) #self.Plot("RSI", "UGLD", self.rsi["UGLD"].Current.Value) #self.Plot("RSI", "TYD", self.rsi["TYD"].Current.Value) #self.Log(str(self.rsi)) for kvp in self.Portfolio: #self.Log(f"\nkvp: {type(kvp)}\nkvp.Key: {type(kvp.Key)}\nkvp.Value: {type(kvp.Value)}") security_hold = kvp.Value #self.Log(str(self.rsi.get(security_hold.Symbol.Value) )) #self.Log(str(kvp.Value))# Returns QuantConnect.Securities.Equity.EquityHolding #self.Log(str(security_hold.Symbol.Value)) #shows all the securities in the symbols libary #self.Log(str(security_hold.Invested)) #shows all the securities in the libary #invested or not invested as True or False # liquidate the security which is no longer in the top3 momentum list if security_hold.Invested and (security_hold.Symbol.Value not in top3.index): self.Liquidate(security_hold.Symbol) added_symbols = [] for symbol in top3.index: if not self.Portfolio[symbol].Invested: added_symbols.append(symbol) for added in added_symbols: self.SetHoldings(added, 1/len(added_symbols))