Overall Statistics |
Total Trades 162 Average Win 0.01% Average Loss 0.00% Compounding Annual Return -0.454% Drawdown 0.100% Expectancy -0.229 Net Profit -0.039% Sharpe Ratio -3.25 Probabilistic Sharpe Ratio 9.977% Loss Rate 78% Win Rate 22% Profit-Loss Ratio 2.47 Alpha -0.004 Beta -0.008 Annual Standard Deviation 0.001 Annual Variance 0 Information Ratio -0.051 Tracking Error 0.11 Treynor Ratio 0.451 Total Fees $162.00 Estimated Strategy Capacity $210000000.00 Lowest Capacity Asset ROKU WO9FGTL2I89X |
class TestStrategy(QCAlgorithm): def Initialize(self): #set backtest time and starting cash to 10000 self.SetStartDate(2020, 1, 1) self.SetEndDate(2020, 2, 1) self.SetCash(100000) self.AddUniverse(self.CoarseSelectionFunction) self.UniverseSettings.Resolution = Resolution.Minute #add Equity of TSLA self.universe = [] self.previous_close_by_symbol = {} self.AddEquity("SPY",Resolution.Minute) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen("SPY", 1), self.FilterForGaps) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen("SPY", 1), self.StartDayTrading) self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen("SPY", 60), self.ClosePositions) def CoarseSelectionFunction(self,coarse): selected = [c for c in coarse if c.HasFundamentalData and c.Price>100] selected = sorted(selected, key=lambda x: x.DollarVolume, reverse=True)[:10] self.previous_close_by_symbol = {} for l in selected: self.previous_close_by_symbol[l.Symbol] = l.AdjustedPrice return list(self.previous_close_by_symbol.keys()) def FilterForGaps(self): # Narrow down universe self.universe_Long = [] self.universe_Short = [] for symbol, previous_close in self.previous_close_by_symbol.items(): if symbol not in self.CurrentSlice.Bars: continue open_price = self.CurrentSlice.Bars[symbol].Open gap = (open_price - previous_close) / previous_close if gap <-0.01: self.universe_Long.append(symbol) self.Log(str(symbol) + str(self.Time) + "Gap is " + str(gap * 100)) if gap>0.01: self.universe_Short.append(symbol) self.Log(str(symbol) + str(self.Time) + "Gap is " + str(gap * 100)) def StartDayTrading(self): # Day-trade universe of securities that had a sufficient gap for symbol in self.universe_Long: self.MarketOrder(symbol,1) for symbol in self.universe_Short: self.MarketOrder(symbol,-1) def ClosePositions(self): self.Liquidate()