Overall Statistics |
Total Trades 126 Average Win 0.22% Average Loss -0.27% Compounding Annual Return 31.101% Drawdown 1.800% Expectancy 0.139 Net Profit 2.327% Sharpe Ratio 2.6 Probabilistic Sharpe Ratio 68.975% Loss Rate 38% Win Rate 62% Profit-Loss Ratio 0.84 Alpha 0.138 Beta 0.295 Annual Standard Deviation 0.084 Annual Variance 0.007 Information Ratio -0.568 Tracking Error 0.094 Treynor Ratio 0.74 Total Fees $133.72 |
class Algorithm(QCAlgorithm): def Initialize(self): self.SetStartDate(2019,12,1) self.SetEndDate(2020,1,1) self.SetCash(100000) self.UniverseSettings.Resolution = Resolution.Minute self.AddUniverse(self.CoarseSelectionFunction) self.AddEquity('SPY', Resolution.Daily) #self.Schedule.On(self.DateRules.Every(DayOfWeek.Monday, DayOfWeek.Friday), self.TimeRules.At(9, 45), self.OpenTrades)# this way don't get all days self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.AfterMarketOpen("SPY", 15), self.OpenTrades) #this way gets all stock market days, always use this way self.Schedule.On(self.DateRules.EveryDay("SPY"), self.TimeRules.BeforeMarketClose("SPY", 20), self.CloseTrades) self.__numberOfSymbols = 3 self.universe = {} def CoarseSelectionFunction(self, coarse): CoarseWithFundamental = [x for x in coarse if x.HasFundamentalData and x.Price > 25] sortedByDollarVolume = sorted(CoarseWithFundamental, key=lambda x: x.DollarVolume, reverse=True) self.universe = [x.Symbol for x in sortedByDollarVolume[:self.__numberOfSymbols]] self.Debug(len(self.universe)) return self.universe def OpenTrades(self): self.Debug(self.Time) self.Debug(len(self.universe)) for security in self.universe: self.Debug(security) self.SetHoldings(security, 1 / self.__numberOfSymbols) def CloseTrades(self): self.Log("EveryDay.SPY 20 min before close: Fired at: {0}".format(self.Time)) self.Liquidate()