| Overall Statistics |
|
Total Orders 139 Average Win 10.49% Average Loss -8.19% Compounding Annual Return 14.951% Drawdown 52.000% Expectancy 0.719 Start Equity 1000000 End Equity 36940752.91 Net Profit 3594.075% Sharpe Ratio 0.51 Sortino Ratio 0.62 Probabilistic Sharpe Ratio 0.337% Loss Rate 25% Win Rate 75% Profit-Loss Ratio 1.28 Alpha 0.05 Beta 1.024 Annual Standard Deviation 0.195 Annual Variance 0.038 Information Ratio 0.475 Tracking Error 0.107 Treynor Ratio 0.097 Total Fees $247852.27 Estimated Strategy Capacity $320000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 1.47% |
# region imports
from AlgorithmImports import *
# endregion
class DeterminedOrangeArmadillo(QCAlgorithm):
_black_fridays = [
datetime(1998, 11, 27),
datetime(1999, 11, 26),
datetime(2000, 11, 24),
datetime(2001, 11, 23),
datetime(2002, 11, 29),
datetime(2003, 11, 28),
datetime(2004, 11, 26),
datetime(2005, 11, 25),
datetime(2006, 11, 24),
datetime(2007, 11, 23),
datetime(2008, 11, 28),
datetime(2009, 11, 27),
datetime(2010, 11, 26),
datetime(2011, 11, 25),
datetime(2012, 11, 23),
datetime(2013, 11, 29),
datetime(2014, 11, 28),
datetime(2015, 11, 27),
datetime(2016, 11, 25),
datetime(2017, 11, 24),
datetime(2018, 11, 23),
datetime(2019, 11, 29),
datetime(2020, 11, 27),
datetime(2021, 11, 26),
datetime(2022, 11, 25),
datetime(2023, 11, 24),
]
_prime_days = [
datetime(2015, 7, 15),
datetime(2016, 7, 12),
datetime(2017, 7, 11),
datetime(2018, 7, 17),
datetime(2019, 7, 15),
datetime(2020, 10, 13),
datetime(2021, 7, 21),
datetime(2022, 7, 12),
datetime(2023, 7, 11),
]
def initialize(self):
self.set_start_date(1998, 11, 13)
self.set_end_date(2024, 10, 1)
self.set_cash(1_000_000)
amzn = self.add_equity('AMZN')
spy = self.add_equity('SPY')
holding_period = self.get_parameter('holding_period', 14)
for holidays in [self._black_fridays, self._prime_days]:
for holiday in holidays:
# Hold AMZN before the holiday.
self.schedule.on(
self.date_rules.on(spy.exchange.hours.get_next_market_close(holiday - timedelta(holding_period), False)),
self.time_rules.before_market_close(spy.symbol, 1),
lambda: self.set_holdings([PortfolioTarget(amzn.symbol, 1)], True)
)
# Hold SPY after the holiday.
self.schedule.on(
self.date_rules.on(spy.exchange.hours.get_next_market_close(holiday + timedelta(1), False)),
self.time_rules.before_market_close(spy.symbol, 1),
lambda: self.set_holdings([PortfolioTarget(spy.symbol, 1)], True)
)