| Overall Statistics |
|
Total Trades 9 Average Win 1299.09% Average Loss 0% Compounding Annual Return 76.694% Drawdown 66.500% Expectancy 0 Net Profit 16020.952% Sharpe Ratio 1.516 Probabilistic Sharpe Ratio 59.727% Loss Rate 0% Win Rate 100% Profit-Loss Ratio 0 Alpha 0.93 Beta -0.045 Annual Standard Deviation 0.609 Annual Variance 0.371 Information Ratio 1.255 Tracking Error 0.629 Treynor Ratio -20.618 Total Fees $2122.33 |
class SOXLStandardDeviation(QCAlgorithm):
def Initialize(self):
self.resolution = Resolution.Daily
self.indicatorPeriod = 14
self.baselineEquitySymbol = "TQQQ"
self.tradedEquitySymbol = "SOXL"
self.SetStartDate(2012, 1, 1)
self.SetEndDate(2020, 12, 1)
self.SetCash(100000) # Set Strategy Cash
self.minutesBeforeMarketClose = 120
self.warmUpTimeForBacktestScenario = self.indicatorPeriod
self.SetWarmUp(self.warmUpTimeForBacktestScenario)
self.setupEquities()
self.setupIndicators()
self.setupTradinInterval()
def setupEquities(self):
self.baselineEquity = self.AddEquity(self.baselineEquitySymbol, self.resolution)
self.baselineEquity.SetDataNormalizationMode(DataNormalizationMode.Adjusted)
self.tradedEquity = self.AddEquity(self.tradedEquitySymbol, self.resolution)
self.tradedEquity.SetDataNormalizationMode(DataNormalizationMode.Adjusted)
def setupIndicators(self):
self.stdIndicator = self.STD(self.baselineEquitySymbol, self.indicatorPeriod, self.resolution)
def setupTradinInterval(self):
self.Schedule.On(self.DateRules.EveryDay(self.tradedEquitySymbol), self.TimeRules.BeforeMarketClose(self.tradedEquitySymbol, self.minutesBeforeMarketClose), self.dailyComputation)
def dailyComputation(self):
if self.IsWarmingUp:
return
if self.stdIndicator.Current.Value < 4.4:
self.SetHoldings(self.tradedEquitySymbol, 1)
elif self.stdIndicator.Current.Value > 7.1:
self.SetHoldings(self.tradedEquitySymbol, 0)
def OnData(self, data):
'''OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here.
Arguments:
data: Slice object keyed by symbol containing the stock data
'''