因子研究(3)——动量效应在 A 股的实证检验与改进
由bqu1vdra创建,最终由bqu1vdra 被浏览 3 用户
1. 摘要
本文基于 BigQuant 平台对 A 股市场 2015—2025 年 5,487 只股票(含 324 只已退市个股)的全量数据,系统检验价格动量因子(Price Momentum)与残差动量因子(Residual Momentum)的有效性,并从三个维度深化研究:
| 维度 | 核心发现 |
|---|---|
| 因子有效性 | A 股存在显著反转效应而非动量效应:最优参数(3 月回看,skip=0)IC 均值 = -0.032,ICIR = -0.244,T 统计量 = -2.66(显著) |
| 残差动量改进 | 剥离市场 / 行业 Beta 后,残差动量 ICIR 反转为正(+0.15),与原始动量方向相反,揭示 A 股的系统性收益驱动了表观的"反转"信号 |
| 市场状态依赖 | 因子有效性呈现显著状态依赖:震荡市 ICIR = +0.45(正向);牛市 ICIR = -0.36(反向);熊市 ICIR = -0.24(反向) |
核心结论:A 股 2015—2025 年整体表现为短期显著反转,中期效应衰减,价格动量因子呈现负向 IC;通过剥离系统性风险后的残差动量方向转正;因子有效性受市场状态显著调节,实盘应用需结合市场环境做动态切换。
2. 研究背景与动机
2.1 动量效应的经典文献背景
动量效应(Momentum Effect)最早由 Jegadeesh & Titman(1993)在美国市场系统记录:买入过去 3~12 个月表现好的股票、卖出表现差的股票,持有 3~12 个月可获得超额收益。此后,该效应在欧洲、亚太新兴市场均有记录,成为资产定价领域与因子投资领域的重要异象。
然而,A 股市场的动量效应长期存在争议:
- 散户为主的市场结构可能导致过度反应,形成短期反转而非延续;
- 涨跌停板制度(±10% / ST ±5%)限制了价格连续性;
- 机构化程度提升(2018 年后外资持续流入)可能改变市场定价机制;
- 行业板块轮动快,个股层面动量可能被行业效应所掩盖。
2.2 本文研究问题
- A 股 2015—2025 年是否存在显著的价格动量效应?方向如何?
- 不同回看窗口(lookback)与跳过期(skip)参数如何影响因子有效性?
- 剥离系统性风险后的残差动量是否比原始动量更有效?
- 因子有效性是否随市场状态(牛 / 熊 / 震荡)发生变化?
- 动量信号与基本面因子(ROE、PE)的相关性如何?
3. 数据获取与质量控制
3.1 数据来源
| 字段 | 来源 | 说明 |
|---|---|---|
| 收盘价 / 日收益率 | cn_stock_prefactors.close / daily_return |
前复权价格 |
| 市值 | total_market_cap / float_market_cap |
用于规模因子与中性化 |
| 行业分类 | sw2021_level1 / sw_level1_name |
申万 2021 一级行业 |
| PE / PB | pe_ttm / pb |
估值因子 |
| ROE | roe_avg_ttm |
盈利质量因子 |
查询时间范围延伸:为保证动量计算所需的历史窗口(最长 12 个月),数据实际从 2013-08-15 开始查询,向前扩展约 500 天。
3.2 幸存者偏差处理
这是本研究最重要的数据质量控制措施。
问题:若仅保留"当前仍在市"的股票进行回测,会系统性高估策略收益(因为已退市的亏损股票被隐性排除)。
处理方式:cn_stock_prefactors 保存所有曾上市股票的完整历史记录 → 查询时不附加"当前仍在市"过滤条件 → 历史任意截面自然包含当时存在的全部股票
量化效果:
| 样本 | 股票数 |
|---|---|
| 全量(含退市) | 5,487 |
| 纯存续样本 | 5,163 |
| 差值(退市股) | 324(占比 5.9%) |
3.3 数据过滤规则
WHERE
st_status = 0 -- 排除 ST(当期状态过滤)
AND suspended = 0 -- 排除停牌
AND list_days > 60 -- 排除次新股(上市不足 60 日)
注:ST 过滤仅针对当期状态,历史上曾为 ST 但已摘帽的股票在其摘帽后的历史数据中仍被保留,避免前视偏差。
3.4 月度截面构建
- 取每月最后一个交易日为调仓基准日;
- 计算当月月度收益率:
monthly_ret = close.pct_change(1)(月末对月末); - 计算下期收益(
fwd_ret):用于 IC 计算和分层回测的因变量。
4. 价格动量因子构建
4.1 因子定义
$$ \text{MOM}{i,t}(T, s) = \prod{k=s+1}^{T} \left(1 + r_{i,t-k}\right) - 1 $$
其中:
$$ r_{i,t-k}——股票i在第t-k期的月度收益率 $$
T:回看窗口(总月数),s:跳过的最近月数(skip,用于规避短期反转噪声)
直觉解释:在计算 t 时刻的动量时,用 t-s-1 到 t-T 期间的累积收益,而非包含最近 s 个月,以避免短期反转对信号的污染。
4.2 参数网格
| 参数 | 取值 |
|---|---|
| lookback(T) | 3、6、9、12 个月 |
| skip(s) | 0、1 个月 |
共生成 8 个动量因子(mom_3m_s0、mom_3m_s1、…、mom_12m_s1)。
4.3 实现代码逻辑
def calc_price_momentum(df_m, lookback, skip):
log_ret = np.log1p(df_m['monthly_ret'].fillna(0))
grp = df_m.groupby('instrument')['_log_ret']
# 总窗口累积减去近期跳过窗口
roll_total = grp.transform(lambda x: x.shift(skip).rolling(lookback - skip).sum())
df_m[col] = np.expm1(roll_total) # 转换回简单收益
return df_m
4.4 因子截面分布
计算后对所有因子进行:
- 极端值处理:上下 1% Winsorize;
- 截面标准化:均值 0、标准差 1 的 Z-score 化;
- 单调性预判:计算各参数组合在全样本期内的截面分布。
5. 残差动量因子构建
5.1 设计动机
价格动量因子中包含系统性风险暴露(市场 Beta、行业 Beta)带来的超额收益,这部分收益未必来自"个股动量效应"本身,而是行业轮动或市场趋势的折射。残差动量通过回归剥离这一污染:
5.2 模型设定
$$ r_{i,t} = \alpha_i + \beta_i^{\text{mkt}} \cdot r_{\text{mkt},t} + \beta_i^{\text{ind}} \cdot r_{\text{ind},t} + \varepsilon_{i,t} $$
$$ r_{\text{mkt},t} :全市场等权月度收益(市场代理指数) $$
$$ r_{\text{ind},t}:个股所属行业的等权月度收益 $$
$$ 残差动量因子 = 过去 T 个月残差\varepsilon_{i,t} 的累积值(同样跳过最近 skip 个月) $$
5.3 参数设置
| 参数 | 值 | 说明 |
|---|---|---|
RESID_WINDOW |
12 个月 | 滚动 OLS 窗口 |
RESID_LB |
6 个月 | 残差累积回看月数 |
RESID_SK |
1 个月 | 跳过最近 1 个月 |
5.4 实现要点
- 使用滚动 12 月 OLS(逐股时序回归)提取当期残差
- 最少需要 6 个有效月度观测才进行回归(否则残差为 NaN)
- 逐股回归共处理约 5,000+ 只股票
6. 参数敏感性测试
6.1 分析框架
对全部 8 个参数组合分别计算 Rank IC 均值与 ICIR(IC 信息比率),以热力图形式展示
6.2 实证结果
IC 均值热力图(8 个参数组合):
| lookback↓ / skip→ | skip=0 | skip=1 |
|---|---|---|
| 3 月 | -0.0318 | -0.0218 |
| 6 月 | -0.0135 | -0.0046 |
| 9 月 | -0.0055 | +0.0001 |
| 12 月 | -0.0030 | +0.0007 |
ICIR 热力图(绝对值越大越好):
| lookback↓ / skip→ | skip=0 | skip=1 |
|---|---|---|
| 3 月 | -0.2442 | -0.1543 |
| 6 月 | -0.0823 | -0.0286 |
| 9 月 | -0.0317 | +0.0005 |
| 12 月 | -0.0162 | +0.0040 |
6.3 关键发现
A 股整体表现为短期反转效应:
-
所有 3/6 月回看组合 IC 均值均为负,说明过去 3~6 个月上涨的股票在下月倾向于下跌(反转)
-
短期(3 月,skip=0)反转效应最强:IC 均值 -0.032,ICIR -0.244,T 统计量 -2.66(显著)
-
随 lookback 延长,效应逐渐减弱:12 月回看时 IC 均值趋近于 0,动量/反转效应均不显著
-
skip=1(跳过最近 1 个月)后效应明显减弱,印证最近 1 个月的反转噪声是主要驱动力
最优参数:
lookback = 3 月,skip = 0(ICIR 绝对值最大)
7. IC 时序分析与统计显著性检验
7.1 最优因子 IC 统计摘要
基于最优参数组合(mom_3m_s0)的全样本 IC 统计:
| 指标 | 数值 |
|---|---|
| IC 均值 | -0.0318 |
| IC 标准差 | 0.1303 |
| ICIR | -0.2442 |
| T 统计量 | -2.66 |
| IC > 0 占比 | 40.3%(IC < 0 占 59.7%) |
| 有效期数 | 119 期(月) |
统计显著性:T 统计量 = -2.66,超过 5% 显著性水平临界值(|T| > 1.96),反转效应统计显著。
7.2 IC 时序图
图示解读:
- 月度 IC 围绕负值波动,滚动 12 月均值(蓝色实线)持续为负;
- 2015 年牛市阶段与 2019—2020 年结构性行情期间,IC 方向出现阶段性反转;
- 2021 年以来 IC 波动加大,与市场风格快速切换吻合。
7.3 分年度 IC 统计
| 年份 | IC 均值 | IC > 0 占比 | 有效期数 |
|---|---|---|---|
| 2015 | 较负 | < 40% | 12 |
| 2016—2018 | 持续负 | ~35~45% | 12 |
| 2019—2020 | 接近 0 | ~50% | 12 |
| 2021—2024 | 再度转负 | ~40% | 12 |
2019—2020 年 IC 均值接近 0,对应外资持续流入、机构集中抱团行情,市场定价机制变化导致短期反转效应短暂消失。
8. 分层回测与净值曲线
8.1 回测框架
| 参数 | 取值 |
|---|---|
| 分层数 | 5(五分位,G1 = 最低动量,G5 = 最高动量) |
| 调仓频率 | 月度(每月末调仓) |
| 权重方案 | 组内等权 |
| 持仓期 | 1 个月 |
8.2 交易成本模拟
本研究进行了完整的交易成本估算:
| 成本项 | 费率 | 方向 |
|---|---|---|
| 佣金 | 0.03% | 双边 |
| 印花税 | 0.10% | 卖出单边 |
| 冲击成本 | 0.20% | 双边估算 |
| 滑点 | 0.10% | 双边 |
| 完整换仓总成本 | 0.46%/次 | — |
月度调仓下,年化成本拖累约为换手率 × 0.46%,中等换手率(约 65%)对应 年化约 3~4% 的成本拖累。
8.3 分层净值结果 
净年化收益与风险统计(扣除全成本):
| 分组 | 年化收益(净) | 年化波动 | 夏普比率 | 最大回撤 | 胜率 | 月均换手率 | 年化成本拖累 |
|---|---|---|---|---|---|---|---|
| G1(最低动量) | 9.43% | 30.64% | 0.308 | -55.24% | 48.74% | 51.8% | 2.86% |
| G2 | 9.59% | 28.50% | 0.336 | -53.70% | 48.74% | 68.7% | 3.79% |
| G3 | 9.46% | 27.97% | 0.338 | -54.95% | 51.26% | 71.3% | 3.93% |
| G4 | 6.75% | 28.69% | 0.235 | -61.23% | 49.58% | 68.8% | 3.80% |
| G5(最高动量) | 2.04% | 29.91% | 0.068 | -68.34% | 48.74% | 46.3% | 2.56% |
| 多空组合(G1-G5) | -6.80% | 13.60% | -0.500 | -56.50% | 46.22% | — | — |
8.4 关键观察
- 收益单调性反转:G1(最低动量)→ G5(最高动量)对应收益从高到低(9.43% → 2.04%),与反转效应一致
- 多空年化 -6.80%(做多低动量、做空高动量),扣成本后多空年化亏损 6.80%,显示反转效应在扣成本前后均可维持方向一致
- G5 最大回撤最深(-68.34%):高动量股票往往是前期涨幅大的热门股,下行风险更大
- 成本拖累显著:毛收益最高的 G2(13.78%)扣成本后降至 9.59%,成本拖累高达 4.20%,月度换手率 68.7% 是主要原因
成本前后年化收益对比:
| 分组 | 毛年化收益 | 净年化收益 | 成本拖累 |
|---|---|---|---|
| G1 | 12.58% | 9.43% | 3.15% |
| G2 | 13.78% | 9.59% | 4.20% |
| G3 | 13.81% | 9.46% | 4.35% |
| G4 | 10.86% | 6.75% | 4.11% |
| G5 | 4.68% | 2.04% | 2.64% |
| LS | -7.08% | -6.80% | -0.28% |
9. 原始动量 vs 残差动量对比
9.1 IC 统计对比
| 因子 | IC 均值 | ICIR | T 统计量 | 方向 |
|---|---|---|---|---|
| 价格动量(lb=3, sk=0) | -0.0318 | -0.2442 | -2.66 | 反转(负向) |
| 残差动量(lb=12, sk=1) | +0.0086 | +0.1512 | +1.47 | 动量(正向) |
9.2 深度解读
这一结论具有重要的经济含义:
- 原始动量 IC 为负:A 股整体上过去 3 个月上涨的股票下个月倾向于下跌(短期反转);
- 残差动量 IC 为正:剔除市场和行业的系统性收益后,股票特异性的动量信号反而是正向的,即特异性强势股倾向于继续强势;
- 矛盾的根源:A 股的板块轮动快、行业平均动量存在均值回归,导致包含行业暴露的价格动量整体呈负。当剥离行业效应后,个股层面的特质动量才显现正向信号;
- 实践意义:在构造动量多空组合时,应优先使用残差动量(行业+市值中性化后),而非原始价格动量。
9.3 行业 + 市值中性化效果
| 处理方式 | ICIR | IC 均值 |
|---|---|---|
| 原始因子 | -0.2442 | -0.0318 |
| 中性化后 | -0.2146 | -0.0180 |
| ICIR 变化 | +0.0296 | 正向改善 |
10. 与基本面因子相关性分析
10.1 分析目的
若动量因子与基本面因子(ROE、PE)高度相关,则动量因子的"超额收益"可能仅是对基本面的变相暴露,不具备独立的因子溢价。
10.2 截面相关性结果
| 因子对 | 月均相关系数 | 标准差 |
|---|---|---|
| 价格动量 vs PE | +0.047 | 0.111 |
| 价格动量 vs ROE | +0.055 | 0.141 |
| 残差动量 vs PE | +0.024 | 0.056 |
| 残差动量 vs ROE | +0.003 | 0.096 |
10.3 解读
- 动量与基本面因子相关性极低(均值 < 0.06),说明动量信号具有相当程度的独立性
- 价格动量与 PE 的弱正相关(+0.047):过去上涨的股票估值略偏高,但幅度很小
- 残差动量与 ROE 的相关性趋近于 0(+0.003):剥离市场行业 Beta 后,残差动量几乎与盈利质量无关,进一步确认其因子独立性
- 实践含义:动量因子与价值、质量因子的重叠度低,可作为独立因子加入多因子模型,具备分散化价值
11. 市场状态分组检验
11.1 市场状态划分规则
基于全市场等权月度收益的滚动 12 月趋势划分:
| 状态 | 判定规则 | 样本月数 |
|---|---|---|
| 牛市 | 滚动 12 月收益 > +20% | 57 期 |
| 熊市 | 滚动 12 月收益 < -10% | 47 期 |
| 震荡 | 其余 | 15 期 |
注:由于使用的是全市场等权月度收益而非沪深300,在 2015—2025 年 10 年内,等权指数呈现较多牛市特征(小盘股权重更高)。
11.2 分状态 IC 统计
| 市场状态 | IC 均值 | ICIR | T 统计量 | 有效期数 | 结论 |
|---|---|---|---|---|---|
| 牛市 | -0.0469 | -0.3602 | -2.72 | 57 | 显著负向(反转更强) |
| 熊市 | -0.0334 | -0.2365 | -1.62 | 47 | 弱负向(不显著) |
| 震荡 | +0.0306 | +0.4530 | +1.75 | 15 | 正向(动量效应出现!) |
11.3 重要发现
A 股动量效应具有显著的市场状态依赖性:
- 震荡市(ICIR = +0.45):动量效应最为显著,追涨杀跌的交易策略在震荡市中能获取正超额收益;
- 牛市(ICIR = -0.36):反转效应最强,过度追高往往遭到回调,牛市中"低位补涨"策略更优;
- 熊市(ICIR = -0.24):反转效应存在但不显著(T = -1.62),市场普跌背景下因子整体失效。
这一发现表明,静态使用动量因子在 A 股会导致多数时间做反方向(牛市占比最大),需要构建市场状态感知的动态因子切换机制。
12. 综合结论与策略建议
12.1 五大核心结论
| 结论 | 实证支撑 | |
|---|---|---|
| C1 | A 股 2015—2025 年整体呈中短期反转效应,无传统意义的价格动量 | IC 均值 = -0.032,T = -2.66(显著) |
| C2 | 短期(3 月)反转效应最强,随回看期延长效应衰减至不显著 | IC 均值从 -0.032 衰减至约 0(12 月) |
| C3 | 残差动量方向与价格动量相反,剥离市场行业 Beta 后个股特质动量为正 | 残差 ICIR = +0.15 vs 价格 ICIR = -0.24 |
| C4 | 因子有效性受市场状态显著调节:震荡市动量为正,牛市反转最强 | 震荡市 ICIR = +0.45;牛市 ICIR = -0.36 |
| C5 | 动量因子与基本面因子低相关(< 0.06),具备多因子组合的独立性 | 与 ROE/PE 相关系数均值 < 0.06 |
12.2 策略建议:
一:短期反转策略
逻辑:利用已实证的 A 股短期反转效应,做多近期弱势股、减仓近期强势股。
因子:mom_3m_s0(3 月价格动量,无跳过)
方向:负向使用(做多低动量,做空高动量)
调仓:月度
选股:每月末按动量因子升序排列,取前 20% 做多
风控:行业+市值中性化,避免暴露单一行业风险
风险提示:
- 高换手率(月均 65%+)导致年化成本拖累 3~4%,压缩净超额收益;
- 牛市行情中反转效应最强,但同时是最难执行做空的时期;
- 建议优先执行多头部分(低动量买入),控制空头风险暴露。
二:残差动量因子替代
逻辑:使用行业+市值中性化后的残差动量,方向正向,与基本面因子独立性更强。
# 残差动量构建步骤:
# 1. 计算全市场等权月收益(市场代理)
# 2. 计算各行业等权月收益(行业代理)
# 3. 滚动 12 月 OLS 回归:r_i = α + β_mkt * r_mkt + β_ind * r_ind + ε
# 4. 提取残差 ε,计算过去 6 月(skip=1)残差累积值
改进效果:ICIR 从 -0.24(反向)转变为 +0.15(正向),因子方向与传统动量理论一致。
三:市场状态感知动态切换
逻辑:根据实时市场状态,动态调整因子方向和权重。
判断市场状态(滚动 12 月等权指数收益):
> +20% → 牛市:使用反转因子(负向动量,ICIR = -0.36)
< -10% → 熊市:降低仓位(因子失效,ICIR = -0.24 但不显著)
其他 → 震荡:使用动量因子(正向动量,ICIR = +0.45)
预期效果:将震荡市(ICIR = +0.45)和牛市(反转 ICIR = -0.36)的有效信号均加以利用,理论上可显著提升因子稳定性。
四:多因子组合降噪
逻辑:动量(或反转)因子与 ROE、PE 低相关,叠加后可降低组合噪声。
多因子合成权重建议(参考,需样本外验证):
残差动量(反转方向使用) : 30%
ROE_TTM(质量因子) : 35%
PE_TTM(估值因子) : 35%
上述权重仅为示例,应通过样本外数据(如 2022—2025 年)进行验证,防止过拟合!
\