Overall Statistics |
Total Trades 45 Average Win 1.37% Average Loss -0.08% Compounding Annual Return 39.228% Drawdown 8.600% Expectancy 12.596 Net Profit 8.958% Sharpe Ratio 1.865 Probabilistic Sharpe Ratio 61.018% Loss Rate 22% Win Rate 78% Profit-Loss Ratio 16.48 Alpha 0.521 Beta 0.809 Annual Standard Deviation 0.232 Annual Variance 0.054 Information Ratio 3.303 Tracking Error 0.164 Treynor Ratio 0.533 Total Fees $957.11 Estimated Strategy Capacity $2100.00 |
# found on QuantConnect # Inspired by the theory here: # https://seekingalpha.com/article/4299701-leveraged-etfs-for-long-term-investing # https://www.quantconnect.com/forum/discussion/7708/using-levered-etfs-in-ira-10-years-24-cagr-1-56-sharpe/p1 # 3x Long TQQQ TMF and UGLD. Using a QQQ SMA200 to determine allocations. class TQQQTMFUGLwithQQQtimer(QCAlgorithm): def Initialize(self): self.SetStartDate(2010, 3, 1) self.SetEndDate(2010, 6, 1) #self.SetEndDate(2010, 1, 1) self.SetCash(100000) self.qqq = self.AddEquity("QQQ", Resolution.Hour) self.tlt = self.AddEquity("TLT", Resolution.Hour) self.AddEquity("TQQQ", Resolution.Hour) # 3x QQQ self.AddEquity("TYD", Resolution.Hour) # 3x 10 yr Treasury self.AddEquity("TMF", Resolution.Hour) # 3x 20yr Treasury self.qqqstd = IndicatorExtensions.Of(StandardDeviation(100), self.ROC("QQQ", 100, Resolution.Daily)) self.tltstd = IndicatorExtensions.Of(StandardDeviation(100), self.ROC("TLT", 100, Resolution.Daily)) self.SetWarmUp(200, Resolution.Daily) # warm up the indicator self.Schedule.On(self.DateRules.WeekStart("QQQ"), self.TimeRules.AfterMarketOpen("QQQ", 30), self.Rebalance) self.SetRiskManagement(MaximumUnrealizedProfitPercentPerSecurity(0.2)) def OnData(self, data): if data.ContainsKey("QQQ") == False: return # make sure we have data for trading symbols if data.ContainsKey("TQQQ") == False: return if data.ContainsKey("TLT") == False: return if self.IsWarmingUp: return self.Plot("STD", "QQQ", self.qqqstd.Current.Value) self.Plot("STD", "TLT", self.tltstd.Current.Value) def Rebalance(self): if self.qqqstd.Current.Value < self.tltstd.Current.Value: self.SetHoldings("TQQQ", 1) self.SetHoldings("TMF", 0) self.SetHoldings("TYD", 0) self.Debug("Bullish - TQQQ 100%") else: self.SetHoldings("TQQQ", 0.5) self.SetHoldings("TMF", 0.25) self.SetHoldings("TYD", 0.25) self.Debug("Bearish - TQQQ 50%, TMF 25%, TYD 25%")