| Overall Statistics |
|
Total Orders 80 Average Win 7.36% Average Loss -1.78% Compounding Annual Return 15.094% Drawdown 33.600% Expectancy 2.558 Start Equity 1000000 End Equity 5272512.05 Net Profit 427.251% Sharpe Ratio 0.675 Sortino Ratio 0.69 Probabilistic Sharpe Ratio 16.537% Loss Rate 31% Win Rate 69% Profit-Loss Ratio 4.12 Alpha 0.009 Beta 0.997 Annual Standard Deviation 0.141 Annual Variance 0.02 Information Ratio 0.396 Tracking Error 0.023 Treynor Ratio 0.095 Total Fees $8113.60 Estimated Strategy Capacity $1300000000.00 Lowest Capacity Asset SPY R735QTJ8XC9X Portfolio Turnover 1.03% |
# region imports
from AlgorithmImports import *
# endregion
class Ebayholiday(QCAlgorithm):
_christmas_eve = [
datetime(2012, 12, 26),
datetime(2013, 12, 26),
datetime(2014, 12, 26),
datetime(2015, 12, 26),
datetime(2016, 12, 26),
datetime(2017, 12, 26),
datetime(2018, 12, 26),
datetime(2019, 12, 26),
datetime(2020, 12, 26),
datetime(2021, 12, 26),
datetime(2022, 12, 26),
datetime(2023, 12, 26),
# ...
]
_decemeber = [
]
def initialize(self):
# Locally Lean installs free sample data, to download more data please visit https://www.quantconnect.com/docs/v2/lean-cli/datasets/downloading-data
self.set_start_date(2012, 10, 7) # Set Start Date
self.set_end_date(2024, 10, 11) # Set End Date
self.set_cash(1000000) # Set Strategy Cash
self._spy = self.add_equity("SPY", Resolution.DAILY)
self._ebay = self.add_equity("EBAY", Resolution.DAILY)
self._etsy = self.add_equity("ETSY", Resolution.DAILY)
for holidays in [self._christmas_eve]:
for holiday in holidays:
# Hold AMZN before the holiday.
self.schedule.on(
self.date_rules.on(self._spy.exchange.hours.get_next_market_close(holiday - timedelta(30), False)),
self.time_rules.before_market_close(self._spy.symbol, 1),
lambda: self.set_holdings([PortfolioTarget(self._ebay.symbol, 0.3),PortfolioTarget(self._etsy.symbol, 0.7)], True)
)
# Hold SPY after the holiday.
self.schedule.on(
self.date_rules.on(self._spy.exchange.hours.get_next_market_close(holiday + timedelta(1), False)),
self.time_rules.before_market_close(self._spy.symbol, 1),
lambda: self.set_holdings([PortfolioTarget(self._spy.symbol, 1)], True)
)
def on_data(self, data: Slice):
"""on_data 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
"""
if not self._spy.holdings.invested:
self.set_holdings("SPY", 1)
self.debug("Purchased Stock")
if self._ebay.holdings.invested:
self.liquidate(self._ebay.symbol)
self.liquidate(self._etsy.symbol)
self._contract_symbol = None