4. 动量因子策略:基于资产过去收益率的动量信号构建,动量的衰减与再平衡
各位同学,今天我们来聊聊动量因子策略。说实话,这是大类资产轮动里最经典、也最容易上手的方法之一。我刚开始做量化那会儿,第一个实盘策略就是动量轮动,虽然现在看来很粗糙,但当时确实帮我赚到了第一桶金。
动量策略的核心逻辑很简单:过去涨得好的资产,未来一段时间内往往还会继续涨;过去跌得惨的,可能还会继续跌。这不是玄学,背后有行为金融学的支撑——投资者存在反应不足和羊群效应。
核心公式:
动量信号 = (当前价格 - N日前价格) / N日前价格
或者用对数收益率:动量信号 = ln(当前价格 / N日前价格)
4.1 动量信号的计算方法
我个人习惯用过去12个月剔除最近1个月的收益率作为动量信号。为什么剔除最近1个月?因为短期反转效应太强了,你想想看,如果某资产最近一个月暴涨,很可能已经透支了未来涨幅。
来看一段Python代码,这是我在项目中实际用过的:
import pandas as pd
import numpy as np
def calculate_momentum(price_df, lookback=252, skip=21):
"""
计算动量信号
price_df: DataFrame, 每列是一个资产的价格序列
lookback: 回看期,默认252个交易日(约12个月)
skip: 跳过最近N个交易日,默认21(约1个月)
"""
# 计算收益率
returns = price_df.pct_change()
# 计算累计收益率(回看期 - 跳过期)
momentum = (price_df.shift(skip) / price_df.shift(lookback)) - 1
return momentum
# 示例用法
# momentum_signal = calculate_momentum(asset_prices)
嗯,这里要注意一点:回看期的选择很关键。我做过回测对比,12个月的效果在A股和美股上都比较稳定。太短了容易被噪音干扰,太长了又反应迟钝。
4.2 动量的衰减特性
动量不是永恒的。它像一根橡皮筋,拉得越长,回弹的力道就越大。我在实盘中发现,动量效应通常在持有期3-6个月时达到峰值,之后就开始衰减。
为什么会这样?说白了,市场是有效的。当某个资产的动量信号被太多人发现并交易时,这个信号的价值就会被快速消耗掉。我曾经跟踪过一个案例:某商品期货的动量信号在信号发出后的第4个月达到最大收益,但到了第7个月就开始反转了。
避坑指南:
我曾经犯过一个错误——以为动量信号越强越好。结果在某个资产上,动量信号高达80%时追进去,结果一个月内回撤了15%。后来我明白了,极端动量往往意味着均值回归即将到来。
4.3 再平衡频率的选择
再平衡,说白了就是多久调整一次持仓。这个频率直接决定了策略的收益和交易成本。
| 再平衡频率 | 优点 | 缺点 | 适合场景 |
|---|---|---|---|
| 每日 | 信号最新,反应快 | 交易成本高,容易过拟合 | 高频交易、T+0品种 |
| 每周 | 平衡了成本和时效 | 可能错过周内波动 | 股票、ETF轮动 |
| 每月 | 成本最低,信号稳定 | 反应滞后,可能吃大回撤 | 大类资产配置 |
| 季度 | 几乎无交易成本 | 信号严重滞后 | 保险资金、养老金 |
我个人建议,大类资产轮动用月度再平衡就够了。你想想看,股票、债券、商品这些大类资产,趋势一旦形成,不会在几天内就反转。我做过测试,月度再平衡相比周度再平衡,年化收益只差了不到1%,但交易成本能省下2-3%。
4.4 动量衰减的量化监控
怎么知道动量在衰减?我一般用滚动窗口的IC值来监控。IC值就是动量信号和未来收益的相关性,如果IC值持续下降,说明动量在失效。
def monitor_momentum_decay(momentum_signal, forward_return, window=60):
"""
监控动量衰减
momentum_signal: 动量信号序列
forward_return: 未来N日收益率
window: 滚动窗口大小
"""
ic_series = []
for i in range(window, len(momentum_signal)):
ic = np.corrcoef(
momentum_signal[i-window:i],
forward_return[i-window:i]
)[0, 1]
ic_series.append(ic)
# 如果最近20个IC值均值低于0.1,发出警告
if np.mean(ic_series[-20:]) < 0.1:
print("⚠️ 动量衰减严重,建议暂停策略或调整参数")
return ic_series
实战技巧:
当IC值连续3个月低于0时,我会把动量策略的权重降低一半,同时增加反转策略的配置。说白了,市场风格在切换,我们不能死守一个策略。
4.5 动量策略的完整框架
最后,我给大家画一张图,把动量策略的完整流程串起来:
这张图把动量策略的完整流程展示得很清楚。从数据输入到建仓,再到月度再平衡循环,中间还嵌入了衰减监控模块。说白了,这就是一个闭环系统——建仓 → 监控 → 再平衡 → 再监控。
4.6 实战中的几个坑
最后,我把自己踩过的坑总结一下,你们可以少走弯路:
- 不要用等权动量:我曾经把所有资产一视同仁,结果小盘股的动量噪音把大盘股的信号给淹没了。建议用波动率倒数加权。
- 小心极端行情:2020年3月那次,所有资产的动量信号同时崩溃。我因为没设止损,回撤了12%。后来我加了波动率控制模块。
- 再平衡不要过于频繁:我见过有人每天再平衡,结果一年下来收益全交了手续费。月度再平衡,足够了。
- 动量衰减不是突然发生的:它是个渐变过程。我一般用3个月的滚动IC值来监控,一旦IC值跌破0.1,就启动应急预案。
核心要点回顾:
- 动量信号 = 过去12个月收益率(剔除最近1个月)
- 动量效应在3-6个月后开始衰减
- 月度再平衡是最优频率
- 用滚动IC值监控动量衰减
- 极端动量信号要警惕均值回归
好了,这一章的内容就到这里。动量策略看似简单,但真正做好并不容易。我建议你们先拿历史数据回测一下,感受一下动量在不同市场环境下的表现。下一章我们会聊反转因子策略,到时候你们会发现,动量和反转其实是硬币的两面。