| Overall Statistics |
|
Total Trades 158 Average Win 0.06% Average Loss -0.01% Compounding Annual Return 14.494% Drawdown 9.600% Expectancy 3.921 Net Profit 25.272% Sharpe Ratio 1.366 Probabilistic Sharpe Ratio 62.599% Loss Rate 22% Win Rate 78% Profit-Loss Ratio 5.29 Alpha 0.151 Beta 0.01 Annual Standard Deviation 0.112 Annual Variance 0.012 Information Ratio -0.057 Tracking Error 0.296 Treynor Ratio 15.556 Total Fees $177.45 |
# Inspired by thhttps://www.quantconnect.com/terminal/#3f7518ec0cc8cd17698cd8995834bd7b-Tabe theory here:
# https://seekingalpha.com/article/4299701-leveraged-etfs-for-long-term-investing
class MultidimensionalTransdimensionalPrism(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2018, 12, 1) # Earliest start date for all ETFs in universe 2/1/10
#self.SetStartDate(2020, 3, 30)
self.SetEndDate(2020, 7, 30)
self.SetCash(100000)
self.AddEquity("TAIL", Resolution.Hour) # 3x QQQ
self.AddEquity("SWAN", Resolution.Hour) # 3x 20yr Treasury
#self.AddEquity("UST", Resolution.Hour) # 3x 10yr Treasury
#self.AddEquity("TLT", Resolution.Hour) # 3x 20yr Treasury
#self.AddEquity("IEF", Resolution.Hour) # 3x 20yr Treasury
self.AddEquity("Vixm", Resolution.Hour) # 2x VIX
#self.tkr = ["TQQQ", "UBT", "UST", "VXX"]
self.tkr = ["TAIL", "SWAN"]
self.rebal = 1 # Rebalance every 2 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("SWAN"), self.TimeRules.AfterMarketOpen("SWAN", 150), self.Rebalance)
#self.Schedule.On(self.DateRules.EveryDay("UST"), self.TimeRules.AfterMarketOpen("UST", 150), self.Rebalance)
def OnData(self, data):
# If ready to rebalance, set each holding at 1/3
if self.flag1 == 1:
for stock in self.tkr:
if stock == "TAIL":
weight = 0.25
else:
weight = 0.75
self.SetHoldings(stock, weight)
self.rebalTimer = 0 # Reset rebalance timer
self.flag1 = 0
def Rebalance(self):
self.rebalTimer +=1
if self.rebalTimer == self.rebal:
self.flag1 = 1