动量方舟 · Momentum Ark

多策略动量轮动研究平台
本文是系列《从 0 到量化平台》的第 3 篇,共 13 篇。查看目录 →
2026-10-14 从0到量化平台追问回撤复权

第 3 篇:六个"这不对劲",抓出六个错

第一个问题,我问了四遍

image
image

10 月 14 日下午 13:24:

> 我(10-14 13:24):我问你啊,你这个 20 日动量,包括 20 均线,是怎么衡量,20 个工作日,还是间隔 20 天

这条消息在记录里出现了 4 次——不是网络重发,是我真的又问了 3 次。因为答案我一直没记住,也因为这个问题太要命了:

"20 日"到底是 20 个交易日,还是 20 个自然日?

一个是四周,一个是三周。差一周,动量排名就会变,持仓就会换,十年的回测结果就全变了。而这种差别,在页面上看不出来——它只写在代码里。

那天我明白了一件事:AI 给你的每一个数字背后,都有一堆它自己决定、但没告诉你的细节。

第二个问题,问出了算法错

10 月 17 日下午,我盯着收益统计页,越看越不对:

> 我(10-17 16:52):我觉得你的区间最大回撤有问题,怎么可能区间越大,回撤越低了呢,最大回撤,肯定是区间内,最高点到最低点了啊

这句话完全不需要编程知识,只需要常识:区间包含得越多,最坏的情况只会更坏,不可能更好。

AI 去查了,回来承认:它算的是"从区间起点到最低点",不是"区间内最高点到最低点"。所以区间一拉长,起点变低,回撤反而变小了。

17:04 我又发了一遍同样的话,附了截图。这次它改对了。

同一天下午还有个小插曲,我说了一句可能是全书最有用的话:

> 我(10-17 16:14):有一个疑问,不是让你改代码啊,就是 高弹性策略,为何 年化高于 稳健型,回撤却低于 稳健型

收益更高、风险更低——金融世界里没有这种东西。要么统计错了,要么两个策略的风险定义不一样。它去查,又是口径问题。

第三个问题:参照的和买到的,不是一个东西

10 月 17 日深夜 23:13:

> 我(10-17 23:13):我发现一个问题,怎么 红利创业板轮动的,参照的指数是 中证红利,轮动的是 上证红利,你看看是不是,先聊天,不改代码

这个策略的规则是:创业板指数 ÷ 红利指数,比值低于 0.35 就买创业板,高于 0.6 就买红利。

问题是:用来做判断的红利指数是"中证红利",实际买入的 ETF 跟踪的是"上证红利"。 两个指数成分不一样,长期走势也会有差别。回测里你用一个尺子量,实盘里你买的是另一个东西。

第二天的验证是这样的:

> 我(10-18 11:17):这个是中证红利(附截图)这个是上证红利(附截图),差距确实不大

差距确实不大,但"不大"不等于"没有"。最后选了方案 B:把买入标的换成跟踪中证红利的 515180——让尺子和买的东西对上。

这一条后来成了我检查所有策略的习惯动作:先看它拿什么做信号,再看它拿什么建仓,两者必须是同一个东西。

第四个问题:净值为什么一动不动

也是 10 月 17 日,15:24:

> 我(10-17 15:24):你这个 有问题啊,严重有问题,2019-01-18 这个时候开始持仓 红利低波的标的了,结果,市值一直不变,净值一直不变为什么

一句话描述现象,没有一句猜测。AI 查出来的原因是复权处理:那段历史价格缺失,系统用了同一个价格填充,于是持仓三个月,净值一条直线。

这是我最喜欢的一类 bug:它不报错,页面也不崩,只是数字停在那里装死。 如果我不盯着那条曲线看,它可以一直躺着。

第五个问题:我提了个假设,让 AI 去证

10 月 17 日下午,我发现一件更奇怪的事:高弹性的全球轮动策略,收益居然不如稳健型。

> 我(10-17 17:22):咱们纯讨论啊,按理说,高动量的全球轮动,比稳健型的总体收益要高不少,现在看起来,居然还没稳健型高,这是为什么啊

讨论了半小时,我提了一个自己的猜测:

> 我(10-17 17:38):我有个猜测,高弹性不是根据的价格,而是指数本身,因为 QDII 额度的问题,全球 ETF 大部分溢价很多,你能做个实测,来验证么

这句话的结构值得单独拿出来说:"我有个猜测……你能做个实测来验证么。"

我不需要会证明,我只需要会怀疑,并且把怀疑变成一个可验证的问题。AI 算了一遍:把 ETF 的实际价格和它跟踪的指数做对比,溢价确实吃掉了相当一部分收益。假设成立。

这是普通人用 AI 的最高效姿势:你出假设,它出证据,你来判断要不要改。

第六个问题:那个 NaN

那天晚上 22:33,我截了一张图:

image
image

> 我(10-17 22:33):这个 NaN 是什么回事,好像很多图都有这个现象

NaN,就是"不是一个数"。图上出现它,说明某个位置的数据是空的。追下去,还是数据完整性的问题——某段时间价格缺失,指标算不出来,就变成了空值。

到这里,一天之内我抓出了六个问题:动量口径、回撤算法、指数错配、净值冻结、溢价损耗、空值。全部靠常识和追问,一行代码没看。

这一篇学到的

我问的话它其实在问什么
"20 日是 20 个交易日还是 20 天"你的每个参数都得说清楚
"区间越大回撤越低,可能吗"常识能戳穿算法错误
"收益更高、回撤更低,凭什么"反常的组合必有问题
"参照的指数和买的标的,是一个吗"信号和建仓必须同源
"市值为什么一直不变"不动的数字比乱跳的更危险
"我有个猜测,你能实测吗"不会证明也能验证

【你也可以】

给你三个可以直接抄的问句:

1. "这个数字是怎么算出来的?把公式念给我听。"(不用看懂代码,听懂口径就行) 2. "这个结果和常识矛盾吗?如果矛盾,是数据错了还是我理解错了?" 3. "我有个猜测:……你能做个实测来验证吗?"

记住那句最重要的话:AI 给结论,你去现场。 它给你的每个数字,都值得被问一次"凭什么"。


本系列为个人研究与搭建记录,所有数据与策略均不构成投资建议,历史回测不代表未来收益。

数据仅供参考,不构成任何投资建议。市场有风险,投资需谨慎。

其他笔记