| Overall Statistics |
|
Total Trades 442 Average Win 1.10% Average Loss -1.09% Compounding Annual Return 2.292% Drawdown 20.100% Expectancy 0.018 Net Profit 2.222% Sharpe Ratio 0.192 Loss Rate 49% Win Rate 51% Profit-Loss Ratio 1.01 Alpha 0.026 Beta 0.176 Annual Standard Deviation 0.194 Annual Variance 0.038 Information Ratio -0.13 Tracking Error 0.224 Treynor Ratio 0.212 Total Fees $824.08 |
class OpeningRangeBreakout(QCAlgorithm):
openingBar = None
def Initialize(self):
self.SetStartDate(2018, 7, 10)
self.SetEndDate(2019, 6, 30)
self.SetCash(100000)
self.AddEquity("TSLA", Resolution.Minute)
self.Consolidate("TSLA", timedelta(minutes=30), self.OnDataConsolidated)
#3. Create a scheduled event triggered at 13:30 calling the ClosePositions function
self.Schedule.On(self.DateRules.EveryDay("TSLA"), self.TimeRules.At(13,30), self.ClosePositions)
def OnData(self, data):
if self.Portfolio.Invested or self.openingBar is None:
return
if data["TSLA"].Close > self.openingBar.High:
self.SetHoldings("TSLA", 1)
elif data["TSLA"].Close < self.openingBar.Low:
self.SetHoldings("TSLA", -1)
def OnDataConsolidated(self, bar):
if bar.Time.hour == 9 and bar.Time.minute == 30:
self.openingBar = bar
#1. Create a function named ClosePositions(self)
#2. Set self.openingBar to None, and liquidate TSLA
def ClosePositions(self):
self.openingBar = None
self.Liquidate("TSLA")