4. 动量类因子构建
在行业轮动评分体系中,动量类因子回答的是一个朴素问题:过去一段时间表现更强的行业,未来是否倾向于继续走强。它之所以常被放在多因子模型的第一梯队,是因为行业层面的动量比个股层面更稳健——行业指数由几十只股票聚合而成,噪声被大幅平滑,趋势的持续性更容易被观察到。但“过去涨得多”并不等于“未来还会涨”,动量因子的构建质量取决于三件事:收益口径是否干净、反转信号是否被识别、窗口参数是否经过敏感性检验。
一、动量因子的两种基本口径
最直接的动量定义是过去 N 个月的累计收益率。设行业 i 在第 t 月末的收盘价为 Pi,t,则 N 月动量可写为:
MOM_N(i, t) = P(i, t) / P(i, t-N) - 1
这个口径简单,但存在一个经典缺陷:短期反转效应。大量实证表明,最近 1 个月的涨幅往往在次月被部分回吐,如果直接把最近一个月计入动量窗口,因子会被反转噪声污染。业界常用做法是跳过最近 1 个月,即使用 t-1 到 t-N 的区间,形成“12-1 动量”:
MOM_12_1(i, t) = P(i, t-1) / P(i, t-12) - 1
第二种口径是夏普比率动量,它把收益与波动放在一起衡量,避免“高波动行业靠一次大涨刷出高动量”的假象。对行业 i 在窗口内的月度超额收益序列 ri,τ(减去无风险利率或行业均值),计算:
SHARPE_MOM(i, t) = mean(r(i, τ)) / std(r(i, τ)) × √12, τ ∈ [t-N, t-1]
年化系数 √12 只是量纲统一,不改变排序。夏普动量对波动大的行业有惩罚,通常在震荡市中比纯收益动量更稳定;而纯收益动量在单边趋势市中响应更快。两者并非替代关系,实践中常同时保留,观察其排序相关性——若相关性长期高于 0.9,说明信息高度重叠,可只留一个。
二、反转信号的识别与处理
动量与反转不是非此即彼,而是同一价格序列在不同时间尺度上的两种表现。构建因子时必须先判断当前样本处于哪种状态。一个可操作的识别方法是:对每个行业计算最近 1 个月收益与过去 12-1 个月收益的符号关系。若两者同号且短期涨幅显著(例如超过行业横截面 1 个标准差),说明趋势正在加速,动量可信;若短期收益与长期动量方向相反,则更可能是反转启动,此时应降低该行业动量得分权重,或改用夏普动量以削弱单月极端值的影响。
更系统的处理方式是在因子层面做“反转中性化”:把最近 1 个月收益作为控制变量,对 12-1 动量做横截面回归,取残差作为最终动量得分。这样得到的因子保留了中长期趋势信息,同时剔除了短期反转成分。实现上只需在每月末对全部行业做一次一元线性回归,计算量很小,但对因子稳定性提升明显。
三、窗口敏感性检验
动量因子对窗口 N 高度敏感,这是它最容易被忽视的风险。N 太短(如 3 个月),因子被短期噪声和反转主导;N 太长(如 24 个月),行业基本面可能已经切换,动量变成“历史包袱”。合理的做法不是拍一个数字,而是做窗口扫描:令 N 取 3、6、9、12、18、24,分别计算每个窗口下因子的月度 IC 均值、IC 胜率和多空组合年化收益,观察结果是否在某个区间内保持稳定。若只有 N=12 表现好而相邻窗口明显衰减,说明该结果大概率是过拟合;若 N=6 到 N=12 形成一个平缓的高原,则因子更可信。
下表给出一份示例性的窗口扫描记录表,数值为教学假设,用于说明应记录哪些字段以及如何判读:
| 窗口 N(月) | IC 均值 | IC 胜率 | 多空年化(示例) | 判读 |
|---|---|---|---|---|
| 3 | 0.021 | 52% | 3.1% | 噪声主导,偏弱 |
| 6 | 0.048 | 61% | 8.4% | 进入可用区间 |
| 9 | 0.052 | 63% | 9.0% | 高原区,较稳 |
| 12 | 0.046 | 60% | 8.1% | 高原区,较稳 |
| 18 | 0.030 | 55% | 4.6% | 开始衰减 |
| 24 | 0.015 | 51% | 1.8% | 信息过期 |
从示例可见,N=6 至 N=12 构成一个相对平缓的高原,说明动量信息在这个时间尺度上较为稳定;N=3 和 N=24 两端明显衰减,符合“短端噪声、长端过期”的直觉。实际研究中还应把样本切成前后两段分别扫描,若高原位置在两段中大致重合,可信度进一步提高。
完成上述三步后,动量因子才具备进入评分体系的资格:口径明确、反转已处理、窗口经过扫描且落在稳定区间。下一步才是把它与估值、质量、景气等因子一起做标准化与加权合成,而这需要先保证每个单因子本身是干净且可解释的。