Overall Statistics |
Total Trades 87 Average Win 20.43% Average Loss -3.08% Compounding Annual Return 27.386% Drawdown 51.500% Expectancy 2.813 Net Profit 1166.100% Sharpe Ratio 0.841 Probabilistic Sharpe Ratio 17.689% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 6.63 Alpha 0.131 Beta 1.4 Annual Standard Deviation 0.36 Annual Variance 0.13 Information Ratio 0.617 Tracking Error 0.293 Treynor Ratio 0.216 Total Fees $5030.15 |
#take the paper "Leverage For The Long Run", use a 200 SMA on SPY to generate weekly buy/sell signals to either go long 3x leveraged assets or cash. class LeverageForTheLongRunDiversifiedWeekly(QCAlgorithm): def Initialize(self): self.SetStartDate(2010,3, 1) #Set Start Date self.SetEndDate(2020,8,20) #Set End Date self.SetCash(100000) #Set Strategy Cash self.spy = self.AddEquity("SPY", Resolution.Daily) self.Securities["SPY"].SetDataNormalizationMode(DataNormalizationMode.Raw); self.tqqq = self.AddEquity("TQQQ", Resolution.Hour) self.shy = self.AddEquity("SHY", Resolution.Hour) self.sma = self.SMA("SPY", 200, Resolution.Daily) self.SetWarmUp(200) # warm up the indicator self.Settings.FreePortfolioValuePercentage = 0.05 # Rebalancing logic self.rebal = 1 # Rebalance every 1 week self.rebalTimer = self.rebal - 1 # Initialize to trigger first week self.flag1 = 0 # Flag to initate trades # Increment rebalance timer at every week start self.Schedule.On(self.DateRules.WeekStart("SPY"), self.TimeRules.AfterMarketOpen("SPY", 60), self.Rebalance) def OnData(self, data): if not self.sma.IsReady: return if data.ContainsKey("SPY") == False: return # make sure we have data for trading symbols if data.ContainsKey("TQQQ") == False: return if data.ContainsKey("SHY") == False: return if self.flag1 == 1: if data[self.spy.Symbol].Close > self.sma.Current.Value: self.SetHoldings("TQQQ", 1, True) self.Debug("long equities") self.rebalTimer = 0 # Reset rebalance timer if data[self.spy.Symbol].Close < self.sma.Current.Value: self.SetHoldings("SHY", 1, True) self.Debug("go to cash") self.rebalTimer = 0 # Reset rebalance timer self.flag1 = 0 def Rebalance(self): self.rebalTimer +=1 if self.rebalTimer == self.rebal: self.flag1 = 1