According to Streetlore, as embedded in the adage 'As goes January so goes the rest of the year,' the market return in January provides useful information to would-be investors in that the January market return predicts the market return over the remainder of the year. This adage has become known as the January Barometer. In an earlier paper (Cooper, McConnell and Ovtchinnikov, 2006) we investigated the power of the January market return to predict returns for the next 11 months using 147 years of U.S. stock market returns. We found that, on average, the 11-month holding period return following positive Januarys was significantly higher, by a wide margin, than the 11-month holding period return following negative Januarys. In this paper we update that analysis through 2008 and address the question of how an investor can best use that information as part of an investment strategy. We find that the best way to use the January Barometer is not the obvious one of being long following positive Januarys and short following negative Januarys, but to be long following positive Januarys and invest in t-bills following negative Januarys. This strategy beats various alternatives, including a passive long-the-market-all-the-time strategy, by significant margins over the 152 years for which we have data.
Keywords: January Barometer, return predictability
- Invest in equity market every January
- Remain invested in equities (through ETF, fund, or futures) if January returns are positive
- If January returns are negative, transfer investments to Treasury Bills
import backtrader as bt class JanuaryBarometer(bt.Strategy): def __init__(self): self.invested = False self.january_end = None def next(self): if self.data.datetime.date().month == 1 and not self.invested: self.buy() self.invested = True self.january_end = self.data.datetime.date().replace(day=31) elif self.data.datetime.date() == self.january_end: january_return = self.data.close / self.data.close[-self.data.datetime.day()] - 1 if january_return > 0: pass # Stay invested in equities else: self.sell() # Exit equities # Transfer investment to Treasury Bills (not implemented in this code) elif self.data.datetime.date().month == 12 and self.data.datetime.date().day == 31: if self.invested: self.sell() # Exit position at year-end self.invested = False