Skip to content

回测漂亮,实盘能跑吗?看一个AMD策略的两轮压力测试实例

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

文中示例仅用于技术讨论,不构成任何操作建议。
量化策略开发应以学习和技术交流为目的。
本号不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。

本文约 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.270.540.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 #量化开发 #策略验证 #风险控制

Published inAI&Invest专栏

Be First to Comment

    发表回复