| Overall Statistics |
|
Total Trades 70 Average Win 1.23% Average Loss -0.94% Compounding Annual Return 20.247% Drawdown 3.900% Expectancy 0.382 Net Profit 12.927% Sharpe Ratio 1.516 Probabilistic Sharpe Ratio 66.736% Loss Rate 40% Win Rate 60% Profit-Loss Ratio 1.30 Alpha 0.142 Beta -0.008 Annual Standard Deviation 0.093 Annual Variance 0.009 Information Ratio 0.4 Tracking Error 0.154 Treynor Ratio -16.611 Total Fees $603.65 Estimated Strategy Capacity $9200000.00 Lowest Capacity Asset TSLA UNU3P8Y3WFAD |
class FadingTheGap(QCAlgorithm):
def Initialize(self):
self.SetStartDate(2017, 11, 1)
self.SetEndDate(2018, 7, 1)
self.SetCash(100000)
self.AddEquity("TSLA", Resolution.Minute)
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.BeforeMarketClose("TSLA", 0), self.ClosingBar)
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen("TSLA", 1), self.OpeningBar)
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen("TSLA", 45), self.ClosePositions)
self.window = RollingWindow[TradeBar](2)
#1. Create a manual Standard Deviation indicator to track recent volatility
self.volatility = StandardDeviation("TSLA", 60)
def OnData(self, data):
if data["TSLA"] is not None:
#2. Update our standard deviation indicator manually with algorithm time and TSLA's close price
self.volatility.Update(self.Time, data["TSLA"].Close)
def OpeningBar(self):
if "TSLA" in self.CurrentSlice.Bars:
self.window.Add(self.CurrentSlice["TSLA"])
#3. Use IsReady to check if both volatility and the window are ready, if not ready 'return'
if not self.window.IsReady or not self.volatility.IsReady:
return
delta = self.window[0].Open - self.window[1].Close
#4. Save an approximation of standard deviations to our deviations variable by dividing delta by the current volatility value:
# Normally this is delta from the mean, but we'll approximate it with current value for this lesson.
deviations = delta / self.volatility.Current.Value
#5. SetHoldings to 100% TSLA if deviations is less than -3 standard deviations from the mean:
if deviations < -3:
self.SetHoldings("TSLA", 1)
def ClosePositions(self):
self.Liquidate()
def ClosingBar(self):
self.window.Add(self.CurrentSlice["TSLA"])