| 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