| Overall Statistics |
|
Total Trades 96 Average Win 0.89% Average Loss -0.93% Compounding Annual Return -6.799% Drawdown 9.200% Expectancy -0.022 Net Profit -1.354% Sharpe Ratio 0.479 Probabilistic Sharpe Ratio 40.789% Loss Rate 50% Win Rate 50% Profit-Loss Ratio 0.96 Alpha -0.097 Beta 0.202 Annual Standard Deviation 0.182 Annual Variance 0.033 Information Ratio -3.211 Tracking Error 0.257 Treynor Ratio 0.433 Total Fees $268.76 |
class OpeningRangeBreakout(QCAlgorithm):
openingBar = None
def Initialize(self):
self.SetStartDate(2020, 5, 1)
self.SetEndDate(2020, 7, 10)
self.SetCash(100000)
self.AddEquity("TQQQ", Resolution.Minute)
self.Consolidate("TQQQ", timedelta(minutes=30), self.OnDataConsolidated)
#3. Create a scheduled event triggered at 13:30 calling the ClosePositions function
self.Schedule.On(self.DateRules.EveryDay("TQQQ"), self.TimeRules.At(13,30), self.ClosePositions)
self.trades = 0
def OnData(self, data):
#self.Plot("Strategy Equity","SPY",self.Securities["SPY"].Price)
if self.Portfolio.Invested or self.openingBar is None:
return
if data["TQQQ"].Close > self.openingBar.High:
self.SetHoldings("TQQQ", .5)
self.trades = self.trades + 1
self.Debug("Total trades: " + str(self.trades))
elif data["TQQQ"].Close < self.openingBar.Low:
self.SetHoldings("TQQQ", -.5)
self.trades = self.trades + 1
self.Debug("Total trades: " + str(self.trades))
def OnDataConsolidated(self, bar):
if bar.Time.hour == 9 and bar.Time.minute == 30:
self.openingBar = bar
#1. Create a function named ClosePositions(self)
def ClosePositions(self):
#2. Set self.openingBar to None, and liquidate TSLA
self.openingBar = None
self.Liquidate("TQQQ")