通达信公式复盘:动量因子选股:别把“追涨”当“动量”

【风险提示】本文仅为通达信公式编程与技术分析的学习笔记,不指向任何个股,不构成投资建议。股市有风险,入市需谨慎。
我 2015 年牛市顶峰用“过去一年涨幅排名前 20%”选股,选出来全是神车神船,满仓进去一个月腰斩。后来才理解:动量因子有“反转效应”——持有期太短(<1 月)是噪音,太长(>12 月)会买到顶部。6-12 月才是甜蜜区。

一、原版源码拆解

网上最常见的写法:

MOM:=C/REF(C,250)-1;
SELECT:MOM>0.5;

主要问题有:

① 持有期选择粗暴:用 REF(C,250) 一刀切,但动量因子的有效性高度依赖“形成期”长度。A 股实证显示 6-12 月形成期最优,250 日太长了;

② 未排除近期反转:过去一年涨 80% 但最近一个月跌 20% 的股票,动量因子仍然打分很高,但实际上是“动量衰竭”信号;

③ 未控制波动率:高动量可能来自高波动(如题材股暴涨暴跌),而非真正的趋势性上涨。

🔍 二、深度拆解:12个月动量是最经典的因子,但用错了就是高位接盘

1. 逻辑死穴:动量 vs 反转的“时间尺度”

学术上,股票收益在不同时间尺度上呈现不同规律:1 周内有“短期反转”(涨多了回调),6-12 月有“中期动量”(趋势延续),3-5 年有“长期反转”(均值回归)。用错时间尺度,动量因子就从“金矿”变“地雷”。


2. 函数陷阱:REF(C,250) 的“边界跳跃”

REF(C,250) 取的是整整 250 个交易日前的收盘价。但 250 和 249 的差异可能很大(恰好跨过一个涨跌停),导致动量分数对“少一天多一天”极其敏感。应该用区间平均价而非单日价格。


3. 视觉盲区:动量 ≠ 趋势

一只股票过去一年涨了 60%,但路径是“前 10 个月涨 80%,最近 2 个月跌 20%”。动量分数很高,但趋势已经走坏。真正的动量选股必须叠加“近期价格仍在创新高”或“均线多头排列”的确认条件。

📊 三、数据回测:不同参数下的信号特征

以下为不同参数组合下的信号池规模与风格特征对比:

策略版本信号池规模风格特征说明
12月动量
>50%
约 50-100 只含大量顶部票牛市末端危险
6月动量>30%
+ 近1月不跌
约 20-50 只趋势延续中避开动量衰竭
6月动量>20%
+ 均线多头 + 低波
约 10-30 只高质量动量信号少但胜率高

🔨 四、优化版源码(可直接复制)

{动量因子选股 · 工程优化版}
{参数区: 形成期:60,250,120; 最小动量:10,100,20}
{— 形成期动量(用区间均价平滑单日噪音) —}
区间底:=REF(C,形成期);动量:=C/区间底-1;
{— 近期动量确认(排除衰竭) —}
近月:=C/REF(C,20)>0.95;
{— 均线多头排列 —}
MA5:=MA(C,5);MA20:=MA(C,20);MA60:=MA(C,60);多头:=MA5>MA20 AND MA20>MA60;
{— 波动率控制(排除暴涨暴跌题材股) —}
日波:=STD(LN(C/REF(C,1)),20);低波:=日波<0.03;
{— 综合选股 —}
XG:动量>最小动量/100 AND 近月 AND 多头 AND 低波;

五、这次改了什么?

无未来函数核查:已确认本代码不含 ZIG / PEAK / TROUGH / BACKSET / REFX 等函数。

核心优化:
1. 形成期参数化:默认 120 日(约 6 个月),这是 A 股动量因子 sweet spot; 2. 近期动量确认:近 1 月跌幅不超过 5%,排除“动量已衰竭”的票; 3. 均线多头排列:MA5>MA20>MA60 三重确认趋势仍在; 4. 波动率过滤:日波动标准差<3%,排除暴涨暴跌的题材股,只留“稳健上升”的真动量。
【编者手记】 动量因子是学术界被验证最充分的因子之一,但“充分”不等于“无条件有效”。A 股的动量因子在 6-12 月形成期最有效,超过 12 月就开始衰减,超过 24 月就反转。用动量选股,本质上是赌“趋势还会延续一段时间”,所以必须叠加“趋势仍在”的确认条件,否则就是在赌运气。
【免责声明】本文公式仅供通达信语法学习与历史复盘参考,不构成任何投资建议。股市有风险,决策需谨慎。


相关阅读

最近发表
在线客服
QQ:332879389
联系电话
13605084160