Overall Statistics |
Total Trades 7881 Average Win 0.45% Average Loss -0.51% Compounding Annual Return 6.201% Drawdown 33.700% Expectancy 0.053 Net Profit 156.591% Sharpe Ratio 0.468 Probabilistic Sharpe Ratio 0.588% Loss Rate 44% Win Rate 56% Profit-Loss Ratio 0.88 Alpha 0.018 Beta 0.397 Annual Standard Deviation 0.102 Annual Variance 0.01 Information Ratio -0.225 Tracking Error 0.127 Treynor Ratio 0.121 Total Fees $0.00 Estimated Strategy Capacity $280000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X |
'''Test Overnight Anomaly for a given security.''' from AlgorithmImports import * class Singleovernight(QCAlgorithm): def Initialize(self): self.debug = False self.zero_fee_model = True self.overnight = True # If false, Intraday self.ticker = "SPY" self.SetStartDate(2007, 1, 1) # Set Start Date self.SetCash(100000) # Set Strategy Cash security = self.AddEquity(self.ticker, Resolution.Minute) if self.zero_fee_model: security.SetFeeModel(ConstantFeeModel(0)) if self.overnight: self.Schedule.On(self.DateRules.EveryDay(self.ticker), self.TimeRules.BeforeMarketClose(self.ticker, 1), self.OpenPositions) self.Schedule.On(self.DateRules.EveryDay(self.ticker), self.TimeRules.BeforeMarketClose(self.ticker, 0), self.ClosePositions) else: # Intraday self.Schedule.On(self.DateRules.EveryDay(self.ticker), self.TimeRules.BeforeMarketClose(self.ticker, 0), self.OpenPositions) self.Schedule.On(self.DateRules.EveryDay(self.ticker), self.TimeRules.BeforeMarketClose(self.ticker, 1), self.ClosePositions) def ClosePositions(self,): if self.Portfolio.Invested: self.SetHoldings(self.ticker, 0) if self.debug: self.Debug(f"{self.Time}: Sold {self.ticker}") def OpenPositions(self,): if not self.Portfolio.Invested: self.SetHoldings(self.ticker, 1) if self.debug: self.Debug(f"{self.Time}: Purchased {self.ticker}") def OnData(self, data): """OnData event is the primary entry point for your algorithm. Each new data point will be pumped in here. Arguments: data: Slice object keyed by symbol containing the stock data """ pass