Overall Statistics |
Total Trades 132 Average Win 3.19% Average Loss -1.34% Compounding Annual Return 11.539% Drawdown 18.600% Expectancy 1.086 Net Profit 195.421% Sharpe Ratio 0.991 Probabilistic Sharpe Ratio 41.920% Loss Rate 38% Win Rate 62% Profit-Loss Ratio 2.38 Alpha 0.065 Beta 0.396 Annual Standard Deviation 0.126 Annual Variance 0.016 Information Ratio -0.183 Tracking Error 0.142 Treynor Ratio 0.314 Total Fees $132.22 |
# Inspired by the theory here: # https://seekingalpha.com/article/4299701-leveraged-etfs-for-long-term-investing class MultidimensionalTransdimensionalPrism(QCAlgorithm): def Initialize(self): self.SetStartDate(2010, 2, 1) # Start and End Date for Stocks self.SetEndDate(2020, 1, 1) self.SetCash(10000) # Set Amount of Money to be used self.AddEquity("SPY", Resolution.Hour) # SPY, etf self.AddEquity("TLT", Resolution.Hour) # Bonds TLT # self.AddEquity("TVIX", Resolution.Hour) self._sma = self.SMA("SPY", 50, Resolution.Daily) self._smab= self.SMA("SPY", 10, Resolution.Daily) self._smabg= self.SMA("SPY", 200, Resolution.Daily) self.rebal = 4 # Rebalance every 4 weeks 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", 150), self.Rebalance) def OnData(self, data): if self.flag1 == 1: if data["SPY"].Close > self._smabg.Current.Value and self._smab > self._sma: self.SetHoldings("SPY", 1, True) # Invest in 100% SPY self.rebalTimer = 0 elif data["SPY"].Close > self._smabg.Current.Value and self._smab < self._sma: self.SetHoldings("SPY", .7, True) self.SetHoldings("TLT", .3, True) self.rebalTimer = 0 elif data["SPY"].Close < self._smabg.Current.Value and self._smab > self._sma: self.SetHoldings("SPY", .3, True) self.SetHoldings("TLT", .7, True) self.rebalTimer = 0 else: self.SetHoldings("TLT", 1, True) # Invest in 100% TLT self.rebalTimer = 0 self.flag1 = 0 def Rebalance(self): self.rebalTimer +=1 if self.rebalTimer == self.rebal: self.flag1 = 1