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