4. 动量因子入门

在价值、质量、低波等因子之外,动量因子是量化投资中使用最广泛、也最容易被误解的一类因子。它的核心思想非常朴素:过去表现较强的资产,在未来一段时间内往往仍有较大概率延续相对强势;过去表现较弱的资产,也容易继续落后。但真正把动量因子做成可复现、可交易、可解释的信号,需要先厘清定义、分类与背后的经济逻辑。

一、动量因子的定义:从“收益率排序”开始

动量因子最基础的定义,是把资产在某个“形成期”内的累计收益作为打分依据,再在横截面上排序。形成期通常记为 lookback,持有期记为 holding。例如,用过去 12 个月收益率(剔除最近 1 个月)排序,买入前 20%、卖出后 20%,每月调仓,这就是经典的 12-1 动量。

用公式表达,个股 i 在 t 时刻的动量得分可以写成:

mom_i,t = P_i,t-1 / P_i,t-1-lookback - 1

其中:
P_i,t-1        表示剔除最近一个月后的价格
lookback       形成期长度,如 12 个月、6 个月
mom_i,t        动量因子原始值

这里有两个关键细节。第一,动量不是“涨得多”本身,而是“相对排名靠前”。因子值必须做横截面标准化或排序,才能转化为组合权重。第二,形成期与持有期之间通常要留出间隔,最典型的是剔除最近 1 个月,以规避短期反转效应和买卖价差、流动性冲击带来的偏差。

二、价格动量与基本面动量:两条不同的信号来源

动量因子并不只有价格一条路径。按照信号来源,可以分成价格动量与基本面动量两大类。

维度 价格动量 基本面动量
信号来源 历史价格、收益率序列 盈利、营收、ROE、分析师预期等
典型构造 12-1 月收益率、52 周高点距离 盈利超预期、盈利上调、ROE 环比改善
数据频率 日频、月频,更新快 季频、事件驱动,更新慢
主要风险 反转、拥挤、交易成本 财报滞后、预期修正不持续
常见组合 与低波、质量因子配合 与价值、质量因子配合

价格动量的优势是数据干净、覆盖广、可回测性强;缺点是容易在市场拐点遭遇剧烈反转。基本面动量更接近“业绩趋势”,逻辑上更稳健,但数据频率低、披露滞后,且需要处理预期数据中的前视偏差。实务中,很多多因子模型会把两者同时纳入,用价格动量捕捉交易行为,用基本面动量捕捉盈利趋势。

提示:不要把“动量”与“趋势跟踪”混为一谈。趋势跟踪通常基于时间序列(如价格是否在均线之上),而动量因子更强调横截面相对强弱。两者可以相关,但组合构建方式不同。

三、动量因子的逻辑:为什么它会存在

动量因子长期存在,主要来自三类解释。

  1. 行为金融解释:反应不足与反应过度。投资者对新信息往往反应不足,导致价格逐步调整;当信息持续验证时,又可能反应过度,形成趋势延续。动量因子正好捕捉这一过程。
  2. 风险补偿解释:高动量资产可能承担了更高的宏观风险、流动性风险或拥挤风险,因此需要更高预期收益补偿。
  3. 微观结构解释:资金流、机构调仓、指数纳入等机制会带来持续买卖压力,使强势资产在短期内继续强势。

但动量也是典型的“脆弱因子”。它在市场剧烈反转、波动率骤升或流动性枯竭时容易失效。因此,动量因子很少单独使用,通常需要与低波、质量、价值等因子配合,形成更稳健的多因子组合。

四、方法流程:从原始价格到可交易信号

一个可复现的动量因子构建流程通常包括以下步骤:

1. 确定股票池与调仓频率
2. 计算形成期累计收益
3. 剔除最近 1 个月,避免短期反转
4. 横截面排序或标准化
5. 分组构建多空组合
6. 加入交易成本、涨跌停、停牌处理
7. 回测与归因分析

下面是一个简化的 Python 示例,展示如何计算 12-1 动量:

import pandas as pd

# 假设 price 为月度收盘价,index 为日期,columns 为股票代码
# 计算 12 个月累计收益
mom_12 = price / price.shift(12) - 1

# 剔除最近 1 个月,得到 12-1 动量
mom_12_1 = mom_12.shift(1)

# 横截面排序,转为分位数
mom_rank = mom_12_1.rank(axis=1, pct=True)

# 选择前 20% 作为多头,后 20% 作为空头
long_signal = mom_rank >= 0.8
short_signal = mom_rank <= 0.2
注意:回测时必须使用“可得数据”。例如,t 月末调仓只能使用 t-1 月末及之前的数据,不能使用 t 月当期的价格或财务数据,否则会产生前视偏差。

五、案例场景:动量因子在 A 股的应用差异

在 A 股市场,动量因子的表现与存在明显差异。由于散户占比高、涨跌停制度、壳价值与主题炒作等因素,短期动量容易反转,而中期动量(如 6 至 12 个月)相对更稳定。一个常见做法是:用 12-1 价格动量捕捉中期趋势,同时用盈利上调、ROE 改善等基本面动量做过滤,剔除纯题材驱动、缺乏业绩支撑的强势股。

例如,某组合在 2020 年至 2023 年的回测中,单纯价格动量多空组合年化收益约 8%,但最大回撤超过 25%;加入质量因子(ROE 稳定性)与低波因子后,年化收益降至 6.5%,但最大回撤收窄至 14%。这说明动量因子的价值不在于“收益最高”,而在于与其他因子形成互补。

六、常见误区与复盘

  • 误区一:把动量等同于追涨。动量因子是系统化、规则化的横截面排序,不是主观追热点。
  • 误区二:忽略交易成本。动量因子换手率通常较高,若不做成本约束,回测收益会被严重高估。
  • 误区三:不做行业中性化。动量得分可能集中在少数行业,导致组合行业暴露过大。
  • 误区四:用未来数据。财务数据、分析师预期数据必须按公告日对齐,不能按报告期直接使用。

复盘时,建议重点检查三件事:因子覆盖度、分组单调性、多空收益稳定性。如果分组收益不单调,或多空收益主要来自空头,说明因子可能被某些风格暴露主导,需要进一步中性化或与其他因子合成。

本节小结:动量因子以过去相对强弱为核心,分为价格动量与基本面动量;其逻辑来自行为偏差、风险补偿与微观结构;构建时需注意形成期、持有期、剔除最近一个月、横截面排序与交易成本。动量因子适合作为多因子体系中的“趋势捕捉器”,但不宜单独使用。