Overall Statistics |
Total Trades 124 Average Win 4.34% Average Loss -2.08% Compounding Annual Return 13.710% Drawdown 35.500% Expectancy 1.057 Net Profit 241.412% Sharpe Ratio 0.836 Probabilistic Sharpe Ratio 24.316% Loss Rate 33% Win Rate 67% Profit-Loss Ratio 2.09 Alpha 0.131 Beta -0.064 Annual Standard Deviation 0.148 Annual Variance 0.022 Information Ratio 0.029 Tracking Error 0.224 Treynor Ratio -1.93 Total Fees $961.94 |
class SPYMeanReversionAlgorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2011,3, 1) #Set Start Date #self.SetEndDate(2020,1,20) #Set End Date self.SetCash(100000) #Set Strategy Cash self.spy = self.AddEquity("SPY", Resolution.Daily) self.qqq = self.AddEquity("QQQ", Resolution.Daily) self.upro = self.AddEquity("UPRO", Resolution.Daily) self.shy = self.AddEquity("SHY", Resolution.Daily) self.tqqq = self.AddEquity("TQQQ", Resolution.Daily) self.ubt = self.AddEquity("UBT", Resolution.Daily) self.ust = self.AddEquity("UST", Resolution.Daily) self.agg = self.AddEquity("AGG", Resolution.Daily) self.ETFs = ["UPRO","TQQQ", "UST", "UBT"] self.rsi = self.RSI("SPY", 2, Resolution.Daily) #self.sma200 = self.SMA("SPY", 200, Resolution.Daily) #self.momp = self.MOMP("SPY", 120, Resolution.Daily) self.SetWarmUp(200) self.Settings.FreePortfolioValuePercentage = 0.05 def OnData(self, data): #if not self.sma200.IsReady: return if not self.rsi.IsReady: return if data.ContainsKey("SPY") == True: return #spyClose = data["SPY"].Close if not self.Portfolio["UPRO"].Invested and self.rsi.Current.Value<25: for stock in self.ETFs: self.SetHoldings(stock, 0.25) self.Debug("Long Positions Opened") self.Debug(str("SPY RSI value: ") + str(self.rsi.Current.Value)) if self.Portfolio["UPRO"].Invested: if self.rsi.Current.Value>70: self.Liquidate() self.Debug("Long Positions Closed") else: return