动量与均值回归:同一枚硬币的两面
动量和均值回归常被呈现为对立的策略。它们实际上是同一市场结构的两个视角——两者可以共存。
每个量化交易者都遇到过这个争论:应该交易动量(过去赢家继续上涨)还是均值回归(过去赢家会反转)?
数十年研究的答案:两者都存在于市场中,在不同时间范围、不同市场结构下、由不同原因驱动。将它们视为互斥是错误所在。
什么是动量?
动量是过去赢家倾向于在未来跑赢过去输家的倾向。也叫「趋势跟踪」或「时间序列动量」。
机制:信息缓慢扩散穿过市场。当好消息到达时,不是所有投资者都立即反应。价格随更多投资者买入而逐步上涨。这种漂移持续直到价格完全反映信息。
动量的证据:
- 过去 6-12 个月上涨的股票倾向于在未来 1-3 个月继续上涨。
- 这种效应存在于各资产类别(股票、债券、大宗商品、外汇)。
- 效应早在 1800 年代就有记录(Jegadeesh and Titman, 2001; Daniel and Moskowitz, 2016)。
什么是均值回归?
均值回归是过去赢家倾向于表现不佳而过去输家倾向于跑赢的倾向——与动量相反。也叫「逆向」或「反转」。
机制:价格有时由于噪声交易、流动性冲击或行为偏差而过度偏离公允价值。价格最终回归公允价值。这种回归是可预测的。
均值回归的证据:
- 日内反转:今天上涨的股票倾向于明天下跌(非常短期)。
- 后 Earnings 公告漂移(PEAD):盈利惊喜为正的股票经历正向漂移,不是反转(这是中期动量,不是反转)。
- 长期反转:3-5 年视野,过去赢家表现不如过去输家(这是长期均值回归)。
时间尺度分解
关键洞察:动量和均值回归在不同时间尺度上运行,它们并不冲突。
| 视野 | 效应 |
|---|---|
| 分钟到小时 | 均值回归(日内反转) |
| 天到周 | 动量(短期动量) |
| 1-12 个月 | 动量(中期动量) |
| 1-3 年 | 均值回归(长期反转) |
| 3-5+ 年 | 动量(超长期动量) |
在日视野:均值回归占主导。在周到月视野:动量占主导。在多年视野:均值回归再次占主导。
为什么两者都存在
短期均值回归 存在因为:
- 流动性冲击导致价格暂时偏离并迅速纠正
- 高频交易者从推动价格回归公允价值中获利
- 信息在交易日内被纳入
中期动量 存在因为:
- 信息缓慢扩散(机构惰性、渐进的信念修订)
- 投资者行为偏差(处置效应、锚定)导致反应不足
- 缓慢移动的资本(共同基金、养老基金)无法立即交易
长期均值回归 存在因为:
- 极端估值最终纠正
- 商业周期均值回归
- 过去赢家包括业绩不可持续的公司
在 Python 中实现双信号策略
import numpy as np
import pandas as pd
def compute_momentum_signal(prices, lookback=252):
"""12 个月动量信号。"""
return prices / prices.shift(lookback) - 1
def compute_mean_reversion_signal(prices, lookback=20):
"""20 天均值回归信号(过去 20 天收益)。"""
return prices.pct_change(lookback)
def dual_signal_strategy(prices, mom_lookback=252, mr_lookback=20,
mom_weight=0.6, mr_weight=0.4):
"""
组合动量和均值回归信号。
当两者一致时持有强动量。
当它们不同意时减少动量敞口。
"""
mom = compute_momentum_signal(prices, mom_lookback)
mr = compute_mean_reversion_signal(prices, mr_lookback)
# 标准化信号
mom_z = (mom - mom.mean()) / mom.std()
mr_z = (mr - mr.mean()) / mr.std()
# 组合信号
combined = mom_weight * mom_z + mr_weight * mr_z
return combined
def regime_adjusted_weights(mom_ic, mr_ic, mom_turnover, mr_turnover):
"""
基于 regime 调整因子权重。
"""
# 如果动量 IC 高且换手率低,增加动量权重
# 如果均值回归 IC 高且换手率低,增加 MR 权重
mom_score = mom_ic / (mom_turnover + 1e-6)
mr_score = mr_ic / (mr_turnover + 1e-6)
total = mom_score + mr_score
return {
'momentum_weight': mom_score / total,
'mean_reversion_weight': mr_score / total
}
def momentum_reversion_balance(factor_returns, mom_half_life=30, mr_half_life=3):
"""
基于半衰期在动量和均值回归之间平衡。
短半衰期因子应该获得较低权重,
因为它们需要更频繁的再平衡。
"""
# 权重与半衰期成正比
mom_weight = mom_half_life / (mom_half_life + mr_half_life)
mr_weight = 1 - mom_weight
combined_returns = (
mom_weight * factor_returns['momentum'] +
mr_weight * factor_returns['mean_reversion']
)
return combined_returns
常见陷阱
假设一个永远正确。 动量和均值回归交易者都赚过和亏过大钱。问题不是「哪个正确」——而是「考虑到当前市场结构和状态,现在哪个正确」。
忽略时间尺度。 在日数据上有效的均值回归策略在月数据上不会有效。在月数据上有效的动量策略可能在日内反转。不要混淆学术文献中的不同发现。
混淆学术文献中的发现。 学术论文经常发现「动量」或「均值回归」在相同市场中,因为它们测量的是不同时间尺度。不要得出它们互相矛盾的结论。
在趋势市场中交易均值回归。 在强劲趋势中,价格可能长时间不回归。如果你在强趋势中交易均值回归,你会被止损很多次。
在知识体系中的位置
动量和均值回归是两种基本的时间序列模式。Regime detection 识别哪个占主导。Factor decay 测量每个信号衰减多快。因子组合将两者合成为统一策略。
参考文献
- Ang, Asset Management, 第 8 章. Oxford University Press, 2014. ISBN: 978-0-19-995932-3.
- Jegadeesh, Titman, “Momentum,” Annual Review of Financial Economics, 2001.
- Daniel, Moskowitz, “Momentum Crashes,” Journal of Financial Economics, 2016.
- Lo, Adaptive Markets, 第 5 章. Princeton University Press, 2017. ISBN: 978-0-691-16988-0.