The Halloween Effect is one of the main calendar anomalies used to challenge the Efficient Market Hypothesis. It consists in significant differences between the stock returns from two distinct periods of a year: November - April and October - May. In the last decades empirical researches revealed the decline of some important calendar anomalies from the stock markets around the world. Sometimes, such changes were caused by the passing from quiet to turbulent stages of the financial markets. In this paper we investigate the Halloween Effect presence on the stock markets from a group of 28 countries for a period of time between January 2000 and December 2011. We find that geographical position has a major influence on the Halloween Effect intensity. We also find some differences between the emerging markets and the advanced financial markets. We analyze the Halloween Effect for two periods of time: the first, from January 2000 to December 2006, corresponding to a relative quiet evolution and the second, from January 2007 to December 2011, corresponding to a turbulent evolution. The results reveal, for many stock markets, major changes between the first period of time and the second one.
Keywords: Calendar Anomalies, Halloween Effect, Stock Markets
- Invest in global equity markets from November to April
- Hold cash or alternative assets from May to October
- Optionally, invest in northern hemisphere stocks during winter and southern hemisphere stocks during summer
- Alternatively, go long on cyclical companies in winter and short defensive stocks, then switch positions in summer
import backtrader as bt class SeasonalStrategy(bt.Strategy): params = ( ('northern_hemisphere', None), ('southern_hemisphere', None), ('cyclical_companies', None), ('defensive_stocks', None), ) def __init__(self): self.month = self.datas.datetime.date(0).month def next(self): self.month = self.datas.datetime.date(0).month if 11 <= self.month <= 4: # November to April if self.params.northern_hemisphere and self.params.southern_hemisphere: self.order_target_percent(self.params.northern_hemisphere, target=0.5) self.order_target_percent(self.params.southern_hemisphere, target=0.0) elif self.params.cyclical_companies and self.params.defensive_stocks: self.order_target_percent(self.params.cyclical_companies, target=1.0) self.order_target_percent(self.params.defensive_stocks, target=-1.0) else: self.order_target_percent(self.data, target=1.0) else: # May to October if self.params.northern_hemisphere and self.params.southern_hemisphere: self.order_target_percent(self.params.northern_hemisphere, target=0.0) self.order_target_percent(self.params.southern_hemisphere, target=0.5) elif self.params.cyclical_companies and self.params.defensive_stocks: self.order_target_percent(self.params.cyclical_companies, target=-1.0) self.order_target_percent(self.params.defensive_stocks, target=1.0) else: self.order_target_percent(self.data, target=0.0)