每年一月初投资小盘股,其余时间投资大盘股。这一现象与税收敏感的个人投资者有关,他们年底出售小盘股并在新年重新投资。尽管研究表明一月效应有效,Haug和Hirschey的研究指出其未受税制改革影响,而Gu的研究显示该效应自1988年以来显著下降,近期难以获利。

策略概述

每年一月初投资于小盘股。全年其余时间投资于大盘股。

策略合理性

对这一现象最常见的解释与税收敏感的个人投资者(针对所得税)有关。如果这些投资者主要持有小盘股,他们往往会在年底为税务目的卖出这些股票(以申报资本损失),并在下一年年初重新投资。这篇论文总体上认为这种异常现象应该是有效且显著的;然而,如果我们结合其他研究,结论就会变得复杂。例如,Haug 和 Hirschey 在《一月效应》中指出:“小盘股回报中的一月效应在时间上非常一致,似乎并未受到1986年税制改革法案通过的影响。这一发现为传统的税损抛售假说提供了新的视角,并表明行为解释的潜在相关性。在经过一代人的深入研究后,一月效应依然存在,并继续对有效市场假说构成严峻挑战。”

但 Anthony Yanxiang Gu 的研究《日益减弱的一月效应:来自美国股票市场的证据》则指出:“自1988年以来,一月效应在大公司和小公司股票指数中的表现呈显著下降趋势,这一效应在罗素指数中正在消失。对于包含小盘股的指数而言,这一下降趋势比大盘股指数更为明显。”结合上述内容与交易成本,可以得出结论,近期一月效应已经变得难以通过交易获利。

论文来源

The Persistence of the Small Firm/January Effect: Is it Consistent With Investors’ Learning and Arbitrage Efforts? [点击浏览原文]

<摘要>

通过改进的方法和扩展的研究设计,我们研究了小公司/一月效应是否由于市场效率而逐渐减弱。首先,我们发现1963-1979年后的一月回报较小,但只是恢复到那个时间之前的水平。其次,我们表明,一月效应不仅限于成熟市场,还出现在20世纪70年代相对较新的纳斯达克交易公司中。第三,小公司的12月和1月交易量与其他月份没有显著差异,表明交易者没有积极进行套利。综上所述,我们的结果表明,这种异常现象在一个有效市场中依然难以用理性解释。

回测表现

年化收益率12.7%
波动率N/A
Beta0.972
夏普比率0.263
索提诺比率0.277
最大回撤55.7%
胜率60%

完整python代码

from AlgoLib import *

class JanuaryEffectInStocks(XXX):

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

        data = self.AddEquity("SPY", Resolution.Daily)
        data.SetLeverage(10)
        self.large_cap = data.Symbol
        
        data = self.AddEquity("IWM", Resolution.Daily)
        data.SetLeverage(10)
        self.small_cap = data.Symbol

        self.start_price = None
        self.recent_month = -1
        
    def OnData(self, data):
        if self.recent_month == self.Time.month:
            return
        self.recent_month = self.Time.month

        if self.Securities[self.large_cap].GetLastData() and self.Securities[self.small_cap].GetLastData():
            if (self.Time.date() - self.Securities[self.large_cap].GetLastData().Time.date()).days < 5 and (self.Time.date() - self.Securities[self.small_cap].GetLastData().Time.date()).days < 5:
                if self.Time.month == 1:
                    if self.Portfolio[self.large_cap].Invested:
                        self.Liquidate(self.large_cap)
                    self.SetHoldings(self.small_cap, 1)
                else:
                    if self.Portfolio[self.small_cap].Invested:
                        self.Liquidate(self.small_cap)
                    self.SetHoldings(self.large_cap, 1)
            else:
                self.Liquidate()
        else:
            self.Liquidate()

Leave a Reply

Discover more from Quant Buffet

Subscribe now to keep reading and get access to the full archive.

Continue reading