Overall Statistics
Total Trades
1
Average Win
0%
Average Loss
0%
Compounding Annual Return
13.844%
Drawdown
20.100%
Expectancy
0
Net Profit
261.902%
Sharpe Ratio
1.027
Probabilistic Sharpe Ratio
44.714%
Loss Rate
0%
Win Rate
0%
Profit-Loss Ratio
0
Alpha
0
Beta
0.998
Annual Standard Deviation
0.146
Annual Variance
0.021
Information Ratio
-0.989
Tracking Error
0
Treynor Ratio
0.151
Total Fees
$1.00
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._smabe = self.SMA("TLT", 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:
                x = 1
                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:
                x = 2
                
            smi = self._smabg.Current.Value * 1.1
            smo = self._smabe.Current.Value * 1.1
            if x == 1:
                if data["SPY"].Close > smi:
                    self.SetHoldings("TLT", 1, True)
                else:
                    self.SetHoldings("SPY", 1, True)
            if x == 2:
                if data["TLT"].Close > smo:
                    self.SetHoldings("SPY", 1, True)
                else:
                    self.SetHoldings('TLT', 1)
                
        self.flag1 = 0          
        
    def Rebalance(self):
        self.rebalTimer +=1
        if self.rebalTimer == self.rebal:
            self.flag1 = 1