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()