| Overall Statistics |
|
Total Trades 509 Average Win 0.88% Average Loss -0.78% Compounding Annual Return 4.531% Drawdown 17.300% Expectancy 0.031 Net Profit 4.540% Sharpe Ratio 0.339 Probabilistic Sharpe Ratio 24.977% Loss Rate 51% Win Rate 49% Profit-Loss Ratio 1.12 Alpha 0.068 Beta -0.018 Annual Standard Deviation 0.187 Annual Variance 0.035 Information Ratio -0.482 Tracking Error 0.388 Treynor Ratio -3.631 Total Fees $728.08 Estimated Strategy Capacity $61000000.00 Lowest Capacity Asset TSLA UNU3P8Y3WFAD |
class TestStrategy(QCAlgorithm):
def Initialize(self):
#set backtest time and starting cash to 10000
self.SetStartDate(2020, 1, 1)
self.SetEndDate(2021, 1, 1)
self.SetCash(100000)
#add Equity of TSLA
self.ticker = ["AAPL", "TSLA"]
for x in self.ticker:
self.AddEquity(x, Resolution.Minute)
for x in self.ticker:
#Set Scheduled Events
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.BeforeMarketClose(x, 0), self.ClosingBar)
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen(x, 1), self.OpeningBar)
self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen(x, 60), self.ClosePositions)
#Set a window
self.window = RollingWindow[TradeBar](2)
def OnData(self, data):
pass
def ClosingBar(self):
for x in self.ticker:
self.window.Add(self.CurrentSlice[x])
def OpeningBar(self):
for x in self.ticker:
if x in self.CurrentSlice.Bars:
self.window.Add(self.CurrentSlice[x])
if not self.window.IsReady:
return
gap = (self.window[0].Open / self.window[1].Close) - 1
if gap > -0.10:
self.SetHoldings(x, 0.5)
self.Log(str(x) + str(self.Time) + "Gap is " + str(gap * 100))
elif gap > 0.10:
self.SetHoldings(x, -0.5)
self.Log(str(x) + str(self.Time) + "Gap is " + str(gap * 100))
def ClosePositions(self):
for x in self.ticker:
self.Liquidate()