Overall Statistics
Total Trades
61
Average Win
0.56%
Average Loss
-0.91%
Compounding Annual Return
0.156%
Drawdown
6.700%
Expectancy
0.021
Net Profit
0.783%
Sharpe Ratio
0.067
Probabilistic Sharpe Ratio
1.963%
Loss Rate
37%
Win Rate
63%
Profit-Loss Ratio
0.61
Alpha
-0.002
Beta
0.026
Annual Standard Deviation
0.03
Annual Variance
0.001
Information Ratio
-0.912
Tracking Error
0.186
Treynor Ratio
0.077
Total Fees
$114.10
Estimated Strategy Capacity
$11000000.00
Lowest Capacity Asset
SPY R735QTJ8XC9X
import numpy as np
from datetime import timedelta

class PreHolidayEffectAlgorithm(QCAlgorithm):

    def Initialize(self):

        self.SetStartDate(2016, 1, 1)  
        self.SetEndDate(2020, 12, 31)    
        self.SetCash(100000)           
        self.AddEquity("SPY", Resolution.Minute)
        
        self.Schedule.On(self.DateRules.EveryDay(), self.TimeRules.AfterMarketOpen('SPY', 140), self.RebalancingCode)


    def OnData(self, data):
        pass
    
    def RebalancingCode(self):
        calendar1 = self.TradingCalendar.GetDaysByType(TradingDayType.PublicHoliday, self.Time, self.Time+timedelta(days=2)) 
        calendar2 = self.TradingCalendar.GetDaysByType(TradingDayType.Weekend, self.Time, self.Time+timedelta(days=2)) 
        holidays = [i.Date for i in calendar1] 
        
        self.Debug('calendar1: {}'.format(holidays))
        self.Debug('self.time: {}'.format(self.Time))
        
        
        weekends = [i.Date for i in calendar2]
        # subtract weekends in all holidays
        public_holidays = list(set(holidays) - set(weekends))

        if not self.Portfolio.Invested and len(public_holidays)>0:
            self.SetHoldings("SPY", 1)
        elif self.Portfolio.Invested and len(public_holidays)==0:
            self.Liquidate()