4. 动量信号生成与阈值设定
动量指标本身只是一个连续数值,比如某只ETF近12个月涨幅为18%、近6个月涨幅为9%。这些数字无法直接告诉我们应该买还是卖。信号生成的任务,就是给这些连续数值加上"判断规则",把它们转换成离散的、可执行的交易指令:买入、持有、卖出或空仓。本节围绕两条核心规则展开——绝对动量阈值和相对动量排名,并说明它们如何协同工作。
一、绝对动量:用无风险利率做"及格线"
绝对动量回答的问题是:这个资产本身值不值得持有?最常用的做法是把ETF的动量收益与无风险利率比较。逻辑很直白:如果承担了权益市场的波动风险,收益却还不如买国债或货币基金,那就没有持有的必要。
具体实现时,需要统一时间口径。假设我们使用12个月动量,计算方式为:
mom_12m = P_t / P_{t-12} - 1
excess = mom_12m - rf_12m
其中 P_t 为当前收盘价,P_{t-12} 为12个月前收盘价,rf_12m 为过去12个月的无风险利率(可用1年期国债收益率或货币基金年化收益折算)。当 excess > 0 时,绝对动量通过,该资产进入候选池;否则被剔除。
这里有几个容易出错的细节。第一,无风险利率必须与动量窗口匹配,用12个月动量就配12个月的无风险收益,不能拿当前的年化利率直接减。第二,阈值可以设置缓冲带,例如要求 excess > 0.5% 才算通过,避免在零轴附近频繁翻转产生无效交易。第三,绝对动量的作用是"守门",它不负责在多个资产之间排序,只负责判断单个资产是否合格。
二、相对动量:在合格资产中选强者
相对动量回答的是另一个问题:在通过绝对动量筛选的资产里,哪个最强?做法是对候选池内所有资产按动量得分降序排名,取前N名(常见N=1或2)作为持仓对象。
排名规则需要明确三点。其一,排名依据的动量得分应与绝对动量使用同一口径,避免"用6个月动量排名、用12个月动量过滤"造成逻辑混乱。其二,得分相同时需要稳定的次级排序规则,例如按代码字母序或按波动率从低到高,保证回测与实盘结果可复现。其三,若候选池为空(全部未通过绝对动量),则相对动量无对象可选,直接输出空仓信号。
下面这张图展示了从原始价格到最终交易信号的完整判定链路,包括绝对动量的守门作用与相对动量的排序选择:
三、两条规则的协同与信号输出
把两条规则串起来,完整的信号生成逻辑是:先对每个资产计算动量得分与超额收益,用绝对动量阈值过滤出候选池,再在候选池内按得分排名取前N名,最后把持仓名单转换为目标权重。若某资产上期持有、本期排名跌出前N或未通过绝对动量,则产生卖出信号;新进入前N的资产产生买入信号。
以一个简化的教学示例说明。假设候选池有A、B、C、D四只ETF,12个月动量分别为18%、9%、-3%、5%,无风险利率折算为2.5%,阈值设为0。则超额收益分别为15.5%、6.5%、-5.5%、2.5%。C被绝对动量剔除,A、B、D进入候选池。若N=1,则选中A;若N=2,则持有A和B。假设上期持有B和D,本期N=2时D被B挤出,产生D卖出、A买入的调仓指令。
| ETF | 12月动量 | 超额收益 | 绝对动量 | 排名 | N=2持仓 |
|---|---|---|---|---|---|
| A | 18% | 15.5% | 通过 | 1 | 买入 |
| B | 9% | 6.5% | 通过 | 2 | 持有 |
| C | -3% | -5.5% | 剔除 | — | 不持有 |
| D | 5% | 2.5% | 通过 | 3 | 卖出 |
需要注意,上表数据为教学假设,并非实际回测结果。实际使用时还应考虑调仓频率(月度或周度)、交易成本以及信号确认机制。例如可以要求信号连续两次调仓日成立才执行,以降低换手;也可以设置排名缓冲区,前N名买入、跌出前N+1名才卖出,减少边界抖动。
信号生成完成后,建议输出一张结构化的信号表,至少包含:调仓日期、各资产动量得分、超额收益、是否通过绝对动量、相对排名、目标权重、相对上期的买卖动作。这张表既是执行依据,也是后续复盘信号质量的基础数据。只有把"数值→判定→排名→权重→动作"这条链路完整落地,动量指标才真正转化为可执行的交易信号。