| Overall Statistics |
|
Total Trades 10001 Average Win 0.01% Average Loss -0.01% Compounding Annual Return 3.809% Drawdown 6.300% Expectancy 0.392 Net Profit 6.664% Sharpe Ratio 0.487 Probabilistic Sharpe Ratio 24.505% Loss Rate 44% Win Rate 56% Profit-Loss Ratio 1.48 Alpha 0.03 Beta 0.258 Annual Standard Deviation 0.084 Annual Variance 0.007 Information Ratio -0.005 Tracking Error 0.159 Treynor Ratio 0.159 Total Fees $10006.02 Estimated Strategy Capacity $1100000.00 Lowest Capacity Asset TLT SGNKIKYGE9NP |
class FocusedSkyBlueSalmon(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2010, 1, 1) # Set Start and End Date
self.SetEndDate(2021, 6, 15)
self.SetCash(100000) #Set Cash
self.SpySymbol = self.AddEquity("SPY", Resolution.Minute) #Request Data
self.TMFSymbol = self.AddEquity("TLT", Resolution.Minute)
self.SmaSpy = self.SMA("SPY", 100, Resolution.Daily) #Indicator Simple Moving Average 200 days
self.SetWarmup(200) #Warmup Indicator
Quandl.SetAuthCode("zkdoRxRXbAQdUxzXZKBy")
self.shiller = self.AddData(QuandlCustomColumns, "MULTPL/SHILLER_PE_RATIO_MONTH", Resolution.Daily, TimeZones.NewYork )
self.rebal = 4 #Rebalance
self.rebalTimer = self.rebal - 1
self.flag1 = 0
self.Schedule.On(self.DateRules.WeekStart("SPY"), self.TimeRules.AfterMarketOpen("SPY", 1), self.Rebalance) # Set Rebalance
def OnData(self, data):
if self.flag1 != 1:
return
if self.SmaSpy.IsReady: # When Warm Up is done
self.Debug("Ready!")
if self.SmaSpy is None or not self.SmaSpy.IsReady: #Final Check That Everything is ready
return
if self.SmaSpy.Current.Value < self.Securities["SPY"].Close:
sign = 1
else:
sign = 2
if sign == 1:
if self.shiller.Close > 22:
self.SetHoldings("SPY", 0.4)
self.SetHoldings("TLT", 0.6)
elif self.shiller.Close > 14 and self.shiller.Close < 22:
self.SetHoldings("SPY", 0.6)
self.SetHoldings("TLT", 0.4)
else:
self.SetHoldings("SPY", 0.8)
self.SetHoldings("TLT", 0.2)
else:
if self.shiller.Close > 22:
self.SetHoldings("SPY", 0.4)
self.SetHoldings("TLT", 0.6)
elif self.shiller.Close > 14 and self.shiller.Close < 22:
self.SetHoldings("SPY", 0.6)
self.SetHoldings("TLT", 0.4)
else:
self.SetHoldings("SPY", 0.8)
self.SetHoldings("TLT", 0.2)
def Rebalance(self):
self.rebalTimer +=1
if self.rebalTimer == self.rebal:
self.flag1 = 1
class QuandlCustomColumns(PythonQuandl):
def __init__(self):
self.ValueColumnName = "Value"