作者:老余捞鱼
原创不易,转载请标明出处及原作者。

文中示例仅用于技术讨论,不构成任何操作建议。
量化策略开发应以学习和技术交流为目的。
本号不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。
本文约 6500 字 | 预计阅读 12 分钟
· · ·
我在Reddit上看到一个AMD的动量交叉策略,拿过去46年的价格数据做回测,效果漂亮得吓人:10万美元滚成几百万,买入持有被它远远甩在后面。分了三个时间段测,全过,风险指标也挑不出啥毛病。
一、策略背景
这套策略的核心逻辑其实不复杂:
- 动量交叉(Momentum Crossover)作为入场信号;
- RSI 指标作为出场条件;
- AMD(超威半导体)日线价格历史;
- 近46年数据,跨越多个完整牛熊周期;
- 三个阶段回测验证。
但我心里一直犯嘀咕:这套东西,到底是真有内在的赚钱逻辑,还是说是它是拿着答案倒推出来的解题过程。参数不是事先定好的,而是在看完了46年所有走势之后,挑出来的那组“恰好能赚最多钱”的数字。
核心问题:这是真正robust的系统,还是完美拟合过去的故事?
测试一:WFO(前进优化)
传统回测的问题在哪
传统回测的套路挺简单:拿全部历史数据当题库,翻来覆去地调参数,直到挑出一组历史上赚得最多的“最优解”,然后跑一遍,效果漂亮。
毛病在哪儿呢?这套流程在优化阶段就已经翻过答案了,它知道1995年、2005年、2020年哪些设置管用、哪些不管用。等于先把卷子看了再答题。
但真金白银下场的人,是没法提前看到下一道题的。他们只能猜。
WFO(前进优化)换了个玩法:
Walk Forward Optimization(前进优化,简称WFO)把游戏规则改了:
传统回测把1960年到2026年的全部数据摆在面前,一次性调出最优参数。等于先看了答案再出结果。
WFO不是这样的,它是滚动来的:拿1980到1984这五年调参数,调完了去测1985年;再拿1981到1985调,去测1986……依此类推如下:
训练区间 → 测试区间1980~1984 → 19851981~1985 → 19861982~1986 → 1987 ... ...
策略每一步都只依赖过去知道的东西,去验证自己完全没见过的未来数据。从头到尾,没有任何信息是从未来倒灌回过去的。
WFO配置
具体参数设置:
- 训练窗口:4年:用过去4年数据选出最优参数
- 测试窗口:1年:冻结参数,在接下来1年实盘模拟
- 动量周期:8、10、12(三个候选值)
- 快动量:4、5、6
- RSI阈值:24、30、36
- RSI周期:11、14、17
每年末,策略从过去4年数据里选出最优参数组合,冻结,然后下一年用这组参数交易。每年重复一次。模拟器里没有任何未来数据。
WFO结果
结果很有意思,策略依然存活了。

Walk Forward Optimization 权益曲线
| 指标 | WFO结果 | 对比基准 |
|---|---|---|
| 总收益率 | 52,006% | 基准 2,872% |
| 夏普比率(Sharpe) | 0.653 | × |
| 索提诺比率(Sortino) | 0.993 | × |
| 盈亏比(Profit Factor) | 2.419 | × |
| 总交易次数 | 318笔 | × |
| 最大回撤 | -90.14% | 重要警告 |
重点不是收益数字。重点是:当参数每年按序选择时,策略的Alpha并没有消失。
但回撤数字讲出了另一个故事。
最大回撤 -90.14%
策略可以拥有正期望收益,但实际操作体验可能是毁灭性的。10万美元账户,中间一度会跌到大约1万美元才能恢复。策略本身活了下来。但持有这个策略的投资人,大概率已经中途放弃退出了。
测试二:Monte Carlo模拟
这个测试问的是什么?
Walk Forward回答的问题是:“策略在去除未来信息之后,还能存活吗?”
Monte Carlo问的是另一个问题:“如果交易的序列改变了,会发生什么?”
市场不会照着回测的顺序走一遍。同样的一套交易信号,搁在不同的时间段里,结果可能截然不同。就算策略本身长期能赚钱,要是亏损的那几年恰好扎堆出现在你刚入场的时候,实盘早就扛不住了,哪还等得到它“长期有效”的那一天。
为什么用区块bootstrap
具体设置:
- 1000次独立模拟
- 区块bootstrap方法(Block Bootstrap)
- 5日收益率区块

你可能要问:为什么用区块抽样,而不是把每一天随机打散?
因为市场的日收益率不是独立的。市场存在波动聚集(volatility clustering):大涨之后往往跟着大涨或大跌,大跌之后同理。如果把每一天随机打乱,市场的结构性特征就被破坏了。用区块抽样,可以保留部分市场结构,让模拟更接近真实。
Monte Carlo结果

Monte Carlo 1000次模拟分布
1000次模拟的结果分布:
| 指标 | 第5百分位(最坏情况) | 中位数 | 第95百分位(最好情况) |
|---|---|---|---|
| 总收益率 | 48% | 48,776% | 10,412,635% |
| 最大回撤 | -98.15% | -88.77% | -74.80% |
| 夏普比率 | 0.27 | 0.54 | 0.79 |
结果分两头看:
最好情况(第95百分位)收益率能冲到千万倍,但这已经没意义了,那得是交易顺序完美到不能再完美才有的数字,跟现实没啥关系。关键得看最坏那头:运气差到极点的那一档,收益率还有48%,没亏,还是正的。这说明策略确实有点东西,不是纯粹靠数据挖出来的假Alpha。但旁边那个数字更吓人:最大回撤-98.15%,十万块进去剩不到两千。
数字上没归零,心理上已经归零一百次了。正常人扛不住这个。
四、压力测试到底证明了什么?
结论有点拧巴。
这个策略不是那种“纯靠运气画曲线”的假把式。它扛过了好几轮考验:
- ✓ 样本外测试(Out-of-sample testing)
- ✓ 滚动优化(WFO)
- ✓ 随机打乱交易顺序的蒙特卡洛模拟也过了
但该验的都验了,Alpha确实有,不是数据里硬挖出来的幻觉。
但问题也暴露得很彻底:这系统太激进了。赚的时候真能赚,亏的时候也是真敢亏,九十几个点的回撤,眼睛都不眨一下。
说白了,它缺的不是赚钱能力,是风险管理。
一个能把十万块滚成几百万、也能让你中途只剩两千块的东西,不适合叫“投资工具”,更像个高风险的系统性实验。
最重要的教训
回测本身说明不了什么。
一条漂亮的权益曲线,只是开始,真正要问的是后面这几件事::
- 策略在未见过的数据上能存活吗?(WFO答案:能)
- 参数稍微动一动会不会崩?(部分测过了,还行)
- 坏运气扎堆来的时候扛不扛得住?(蒙特卡洛测过了,勉强能,但会很惨)
- 一个真实的人能坚持执行这套策略吗?(这是真正的考验)
策略通过了前面三个测试。第四关也是最要命的一关没过:它的波动太大,一个正常人,能不能拿真金白银跟着它从头熬到尾?
五、下一步能干啥
改下一步的方向,不是改策略本身,而是给它加一层生存保护罩(Survival Layer)。主要有这么几个思路::
- 组合配置:别把弹药全压在一个策略上,分散着来;
- 波动率调整:市场疯的时候少下注,稳的时候多下注,跟着大环境走;
- 回撤控制:设好硬止损线,亏到一定份上就强制降仓位;
- 风险预算分配:看风险贡献来决定投多少,而不是简单看资金比例。
一套策略,如果连持有它的人自己都扛不住,就不是一个完整的系统。
这也是为什么很多量化团队在实盘里会加一层”风险管理外壳”,Alpha可以激进,但整体组合必须可控。
六、观点总结
大多数人看到52,000%收益的时候,脑子已经停转了,不会再往下想。

但我接着干了两件事:第一,用WFO把“事后诸葛亮”的幻想掐掉;第二,用Monte Carlo试着把“运气”和“本事”剥离开来。我认为这种折腾方式,可能才是对待回测该有的姿势。
回测和实盘之间,永远夹着一层东西:情绪。市场跌了90%还能涨回来,但坐在屏幕前的那个人,不一定能等到那天。所以“策略能不能活”归根到底问的是:“策略+人”这个组合能不能一起活下去。
下一步值得试的是:拿同一套框架,去测更多标的、更多策略,看看这个Alpha是AMD独享的,还是能在更大范围的股票池里复制出来。那个答案应该会比现在更有意思。
#量化策略 #WalkForwardOptimization #MonteCarlo模拟 #回测陷阱 #AMD股票 #动量策略 #RSI指标 #压力测试 #区块bootstrap #量化开发 #策略验证 #风险控制
Be First to Comment