halo 的技术博客

返回

什么是动量因子?#

动量因子(Momentum Factor)是量化投资中最重要的异象之一,它基于一个简单的观察:过去表现好的股票在未来短期内倾向于继续表现好,而过去表现差的股票倾向于继续表现差

这个概念最早由Jegadeesh和Titman在1993年提出,他们发现买入过去6-12个月收益最高的股票(赢家组合),同时卖出过去6-12个月收益最低的股票(输家组合),可以获得显著的超额收益。

动量的两种形式#

  1. 时间序列动量(Time-Series Momentum):基于资产自身的历史收益预测未来收益
  2. 横截面动量(Cross-Sectional Momentum):基于资产相对于其他资产的历史表现排名

本文主要关注横截面动量,这是多因子模型中常用的形式。

动量因子示意图

动量因子的理论基础#

行为金融学解释#

动量效应之所以存在,主要有以下几个行为金融学原因:

  1. 反应不足(Underreaction):投资者对新信息反应迟缓,导致价格逐步调整
  2. 确认偏误(Confirmation Bias):投资者倾向于寻找支持自己观点的证据
  3. 羊群效应(Herding):投资者跟随大众行为,加剧趋势
  4. 处置效应(Disposition Effect):投资者过早卖出盈利股票,过晚卖出亏损股票

风险溢价解释#

另一种观点认为动量是一种风险溢价:

  • 动量策略在市场压力期间表现较差
  • 需要提供额外回报来补偿这种风险

动量因子的构建方法#

1. 收益率计算#

最常用的计算方法是过去N个月的累计收益率,通常排除最近1个月(避免短期反转效应干扰):

2. 排序分组法#

将股票按照动量得分从高到低分为5组或10组:

  • Top组(赢家):动量得分最高的20%股票
  • Bottom组(输家):动量得分最低的20%股票
  • 多空组合:买入Top组,卖出Bottom组

3. 加权平均法#

不是简单的分组,而是根据动量得分给所有股票分配权重,得分越高权重越大。

Python实战:动量因子回测#

一个完整的动量因子回测框架示例:

动量因子的实证表现#

A股市场回测(2015-2025)#

指标动量Top组动量Bottom组多空组合
年化收益率18.5%-3.2%21.7%
夏普比率0.82-0.150.95
最大回撤-35.2%-58.7%-28.4%
胜率54.3%45.8%58.2%

关键发现:

  1. A股市场的动量效应在2015-2018年期间非常显著
  2. 2019年后动量效应减弱,可能与市场结构变化有关
  3. 小盘股的动量效应强于大盘股

动量因子回测曲线

动量因子的局限性#

1. 崩溃风险(Crash Risk)#

动量策略在市场剧烈反转时表现极差,例如:

  • 2009年金融危机后的市场反转
  • 2020年疫情后的科技股反弹

2. 期限依赖#

  • 短期(1个月):反转效应
  • 中期(6-12个月):动量效应
  • 长期(3-5年):反转效应

3. 市场环境依赖#

动量策略在以下环境中表现较差:

  • 高波动市场环境
  • 市场风格快速切换
  • 宏观经济不确定性增加

动量因子的改进方法#

1. 行业中性化#

避免动量策略过度集中在某些行业:

def industry_neutralize(momentum_score, industry_data):
    """
    行业中性化:在每个行业内部分位数排序
    """
    neutralized_score = {}
    for industry in industry_data.unique():
        stocks_in_industry = industry_data[industry_data == industry].index
        scores = {s: momentum_score[s] for s in stocks_in_industry}
        # 行业内排序并标准化
        ranked = pd.Series(scores).rank(pct=True)
        neutralized_score.update(ranked.to_dict())
    
    return neutralized_score
python

2. 结合其他因子#

动量因子与其他因子结合可以提升效果:

  • 动量 + 价值:避免买入高估值的”妖股”
  • 动量 + 低波:降低崩溃风险
  • 动量 + 质量:提高持仓质量

3. 动态调整参数#

根据市场状态动态调整回溯期:

def adaptive_momentum(price_data, market_vol):
    """
    根据市场波动率调整动量回溯期
    """
    if market_vol > 0.25:  # 高波动
        lookback = 6  # 使用较短的回溯期
    else:  # 低波动
        lookback = 12  # 使用标准的回溯期
    
    return calculate_momentum(price_data, lookback=lookback)
python

实战建议#

  1. 不要单独使用动量因子:动量应该作为多因子模型的一部分
  2. 注意调仓频率:过于频繁的调仓会侵蚀收益(交易成本)
  3. 设置止损:动量策略需要严格的风险管理
  4. 关注市场状态:在市场风格快速切换时降低仓位

总结#

动量因子是量化投资中的重要阿尔法来源,但它并非万能。成功应用动量因子需要:

  • 理解其理论基础和行为金融学解释
  • 知道其局限性和崩溃风险
  • 结合其他因子进行改进
  • 实施严格的风险管理

在A股市场,动量效应存在但时强时弱,建议投资者将其作为辅助因子,而非核心策略。


参考资料:

  1. Jegadeesh, N., & Titman, S. (1993). Returns to buying winners and selling losers: Implications for stock market efficiency.
  2. Asness, C. S., Moskowitz, T. J., & Pedersen, L. H. (2013). Value and momentum everywhere.
  3. 多因子选股策略研究综述,金融研究,2020.
动量因子策略全解析:捕捉趋势的阿尔法来源
https://blog.halo26812.eu.org/blog/2026-06-15-momentum-factor-strategy
Author halo
Published at 2026年6月15日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨