Quant BuffetRelax, Not Over Thinking

US Pre-Holiday Equity Exposure Strategy

Log in to collect

Academic paper

Testing the Significance of Calendar Effects

AuthorsPeter Reinhard Hansen; Asger Lunde; James M. Nason

Institute
  • DKCopenhagen Business School
  • DKAarhus University
  • University of North Carolina at Chapel Hill
  • ?Aarhus University - CREATES
  • ?Copenhagen Business School, Finance
  • ?University of North Carolina (UNC) at Chapel Hill - Department of Economics
  • ?Aarhus University - School of Business and Social Sciences
  • ?CREATES
  • North Carolina State University
  • ?North Carolina State University - Department of Economics

Strategy in a nutshell

Investors use some simple investment vehicles to gain exposure to US equity market (ETF, fund, CFD or future) only during days preceding holiday days (New Year’s Day, Martin Luther King Jr. Day, President’s Day, Good Friday, Memorial Day, Independence Day, Labor Day, Election Day, Thanksgiving Day, Christmas Day). Investors stay in cash during other trading days. The anomaly isn’t limited only to the US market but seems to work well also in other countries; therefore, it could be broadened to include pre-holiday days for local holidays in other markets.

Economic rationale

The main explanatory factors for this anomaly are behavioral. One explanation states that short-sellers close their risky positions prior to holidays. Another reason could be investors’ good mood around holidays, indicating greater optimism about future prospects and, therefore, a high probability of positive market moves.

Backtest performance

Annualised return6.39%
Beta0.072
Sharpe ratio-0.239
Sortino ratio-0.104
Maximum drawdown13.5%
Win rate53%

Full Python code

from AlgoLib import *

class PreHolidayEffect(XXX):

def Initialize(self):
self.SetStartDate(2000, 1, 1)  
self.SetCash(100000)           

self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol

def OnData(self, data):
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]
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(self.symbol, 1)
elif self.Portfolio.Invested and len(public_holidays)==0:
    self.Liquidate()