回测年赚300%,实盘三个月亏光——问题出在哪?
你大概见过这种EA:回测曲线漂亮得像印钞机,年化收益300%,最大回撤8%,盈利因子4.5。你兴奋地挂上实盘,结果三个月亏了40%。
这不是个案。这是过度拟合(Overfitting)的经典剧本。
我见过一个做EUR/USD的EA,开发者用2018到2023年的数据优化,回测净利润$85,000,最大回撤不到6%。曲线平滑得像用尺子画的。结果实盘跑了8周,亏了22%。
为什么?因为那个EA根本没学会交易,它只是把过去5年的行情"背"下来了。
什么叫过度拟合?用一个例子说清楚
你准备数学考试,老师给了10道真题。你没有学解题方法,而是把这10道题的答案全背了下来。考试一看——10道原题一模一样!满分。
但如果考试换了题目呢?你一题都不会做。
过度拟合就是这么回事。EA在优化的时候,不是在找市场规律,而是在"背答案"。它记住了2019年3月12日下午EUR/USD跌了80个点,所以在那个时间点做空。它记住了2021年6月黄金连涨两周,所以在那段时间做多。
这些都是历史上已经发生的事,不会原样重复。
一个健康的EA应该学到的是:"当RSI低于30且价格触及布林带下轨时,反弹的概率比较高。"这是规律。
一个过度拟合的EA学到的是:"2020年3月9日13:45分钟EUR/USD=1.1289时买入,在1.1342卖出。"这是背答案。
为什么"完美"的回测反而是危险信号?
正常的市场充满噪音。再好的策略也会经历连续亏损、横盘不赚钱的阶段。一个真实有效的策略,回测曲线应该有波动、有回撤、有不顺的时候。
如果一个EA的回测曲线像45度直线一样完美,99%的概率不是它找到了圣杯,而是它把参数调得太死,把历史数据的每一个噪音都"吃"进去了。
打个比方:你用10个条件去描述1000个数据点,每个条件覆盖一类行情特征,这是归纳规律。你用800个条件去描述1000个数据点,每个条件精确对应一两个特定时刻,这就是过度拟合。
怎么判断一个EA是不是过度拟合了?
参数太多太精确
一个EA如果有3-5个核心参数,正常。如果有20个以上可调参数,你就该警惕了。
参数越多,EA就越容易"雕刻"出一条完美的回测曲线。就像你手里有100块拼图,拼出一幅好看的画不难——但这幅画对未来毫无预测能力。
更具体的信号:参数值非常"奇怪"。均线周期14、20、50,这些是常用值,合理。但如果参数是"17.3周期均线配合63.8周期均线",你就该问:这个数字是怎么来的?十有八九是优化器算出来的,它只在特定历史区间有效。
曲线太平滑
真实的赚钱策略,资金曲线会有波动。如果一条曲线几乎没有回撤,平滑得像存银行,两种可能:一是马丁格尔类策略(风险藏在尾部),二是过度拟合。
看资金曲线的时候,同时看看回撤的分布。真实策略的回撤会随机分布在不同时间段。过度拟合的EA可能在回测期间几乎没有回撤,但换一段时间数据就原形毕露。
参数敏感性测试暴露一切
这是判断过度拟合最实用的方法。
假设EA的核心参数是RSI周期,优化结果是14。你把它改成13试试,改成15试试,改成12和16试试。
好的策略:参数从12到16,收益率从35%到45%之间浮动,都赚钱。
过度拟合的策略:参数14赚50%,参数13亏10%,参数15亏5%。只有一个精确的"甜蜜点",偏一点就崩。
如果你把参数画成X轴、把利润画成Y轴,好的策略是一座宽阔的山丘,过度拟合的策略是一根尖尖的针。你要找山丘,不要找针。
样本外测试:最简单的防骗手段
做法很简单:把历史数据分成两段。
比如你有2016到2025年共10年的数据。用2016-2021年做优化(样本内),用2022-2025年做验证(样本外)。
关键是:优化的时候完全不碰2022-2025的数据。
优化完了,把参数锁死,直接在2022-2025的数据上跑一遍。
如果样本外的表现只比样本内差10%-20%,策略大概率是靠谱的。如果样本外利润直接腰斩甚至变成亏损,过度拟合无疑。
| 对比项 | 正常策略 | 过度拟合策略 |
|---|---|---|
| 样本内年化收益 | 40% | 120% |
| 样本外年化收益 | 30% | -15% |
| 样本内最大回撤 | 15% | 5% |
| 样本外最大回撤 | 20% | 45% |
| 样本内盈利因子 | 1.8 | 4.5 |
| 样本外盈利因子 | 1.5 | 0.7 |
看到了吗?正常策略的两段数据表现接近,虽然样本外差一点,但差距不大。过度拟合的策略两段数据判若两人。
走步优化:让EA一直面对"新题目"
样本外测试已经不错了,但走步优化(Walk-Forward Optimization)更进一步。
原理很好理解。
第一步:用2016-2019年数据优化参数,然后在2020年数据上验证。
第二步:用2017-2020年数据重新优化参数,然后在2021年数据上验证。
第三步:用2018-2021年数据再优化,在2022年数据上验证。
依此类推。
每一轮,EA都在用过去几年的数据学习,然后在紧接着的"未来"数据上考试。就像每次考试都是新题目,而且题目越来越新。
走步优化的结果是一连串"考试成绩"。如果每一轮验证期都能盈利,说明策略的逻辑是站得住脚的。如果只有一两轮赚钱,其他几轮都亏,策略就不够稳健。
MT5自带走步优化功能,在策略测试器里选"前推测试"就行。MT4没有这个功能,得靠手动操作或者第三方工具。
蒙特卡洛模拟:给EA来一场"压力测试"
蒙特卡洛模拟听着高大上,做的事情很朴素:随机打乱交易顺序,看结果会怎么变。
你的EA回测了500笔交易,按时间顺序排列,最大回撤是15%。但如果把这500笔交易的顺序随机打乱呢?运气不好的话,可能好几笔大亏损连在一起出现,回撤会变大。
蒙特卡洛模拟就是把交易顺序随机打乱几千次(通常1000-5000次),每次计算一遍收益和回撤,看最坏情况能坏到什么程度。
假设你的EA回测最大回撤15%。蒙特卡洛模拟1000次后,95%的情况下最大回撤不超过25%,最坏一次到了35%。
这意味着什么?你实盘的时候,心理上和资金上要做好承受25%-35%回撤的准备。原来那个15%的回撤只是历史上的一种可能排列,不是上限。
如果蒙特卡洛模拟显示50%以上的情况出现亏损,这个策略就不能用。原始回测赚钱可能只是因为交易顺序碰巧比较好。
有一些免费工具可以做这个分析,比如Quant Analyzer。把回测的交易记录导出来就能跑。
参数稳定性:好EA的"宽容度"
前面提到过参数敏感性测试,这里展开说。
一个真正稳健的策略,核心参数应该有一个"有效区间",不是只有一个"有效点"。
比如一个趋势跟踪EA,用的是均线交叉策略。快线周期优化结果是10,慢线周期是50。
你应该做这样的测试:
| 快线周期 | 慢线周期 | 年化收益 | 最大回撤 | 盈利因子 |
|---|---|---|---|---|
| 8 | 45 | 28% | 18% | 1.6 |
| 9 | 48 | 32% | 16% | 1.7 |
| 10 | 50 | 35% | 15% | 1.8 |
| 11 | 52 | 33% | 16% | 1.7 |
| 12 | 55 | 29% | 19% | 1.5 |
上面这张表的结果很健康。参数在一个范围内浮动,收益和风险指标也跟着小幅变化,但整体方向一致——都赚钱、回撤都可控。
如果表格变成这样:
| 快线周期 | 慢线周期 | 年化收益 | 最大回撤 | 盈利因子 |
|---|---|---|---|---|
| 8 | 45 | -12% | 35% | 0.7 |
| 9 | 48 | 5% | 28% | 1.1 |
| 10 | 50 | 50% | 8% | 3.5 |
| 11 | 52 | -8% | 30% | 0.8 |
| 12 | 55 | -20% | 42% | 0.6 |
只有10/50这一个组合赚钱,其他全亏。这就是典型的过度拟合。实盘中市场条件稍有变化,等效于参数偏移了一点,策略立刻失效。
开发或选EA时,怎么避开过度拟合的坑?
第一,控制参数数量。 参数越少越好。一个策略能用3个参数说清楚逻辑,就别搞成8个。每多一个参数,过度拟合的风险就翻一倍。
第二,优化的时候留一段数据不碰。 这是底线。不管用什么方法,至少要有一段样本外数据来验证。如果开发者告诉你"我用全部数据做了优化",转身就走。
第三,回测时间要够长。 3年起步,5年以上更好。时间越长,EA越难靠"背答案"蒙混过关。短期数据很容易被拟合,长期数据会逼出真正的规律。
第四,别追求完美曲线。 回测结果"太好"本身就是问题。年化50%、回撤15%,比年化200%、回撤3%可信得多。后者要么是过度拟合,要么是马丁格尔在藏风险。
第五,在多个品种、多个时间段测试。 一个号称通用的趋势策略,你在EUR/USD上有效,在GBP/USD和AUD/USD上也应该基本能用。如果换个品种就不行了,策略很可能只是拟合了某个品种某段时间的特殊走势。
第六,考虑交易成本。 优化的时候把点差设高一点,比如设成真实点差的1.5倍。如果加了成本还能赚钱,策略的利润空间就足够厚实。很多过度拟合的策略,利润空间薄如纸片,加一点成本就亏。
第七,看交易逻辑是否说得通。 过度拟合的策略往往无法用简单的话解释清楚。"当RSI低于30在支撑位附近买入"——这说得通。"当第17根K线的收盘价大于第43根K线的最高价乘以0.9873时买入"——这说不通,这是优化器算出来的巧合。
常见问题
参数少的EA就一定不会过度拟合吗?
不一定。参数少只是降低了过度拟合的风险,不能完全消除。一个只有2个参数的EA,如果这2个参数被调到了非常精确的数值,而且只在特定时间段有效,依然是过度拟合。判断的标准始终是:换一段数据、改一点参数,策略还能不能赚钱。
走步优化和普通样本外测试,用哪个就够了?
如果只能选一个,走步优化更好。因为走步优化做了多轮验证,每一轮都在不同的时间段上测试,相当于做了好几次样本外测试。普通样本外测试只有一次机会,运气成分更大。但两个都做当然最稳妥。
我买的EA开发者说回测很好,我怎么自己验证?
三步走。第一步,拿到EA后自己在MT4/MT5上跑回测,确认结果和开发者展示的一致。第二步,把回测时间段换一下——开发者用的2018-2023,你就试试2015-2017和2024-2025,看样本外表现。第三步,做参数敏感性测试,把核心参数上下浮动10%-20%,看利润变化幅不幅。如果任何一步不达标,这个EA大概率有问题。
实盘跑了一段时间开始亏钱,是过度拟合吗?
不一定。任何策略都有回撤期,连续亏钱不等于策略失效。你要对比的是:当前的亏损幅度和频率,有没有超过历史回测中最差的表现。如果回撤在回测的最大回撤范围内,继续观察。如果已经大幅超过了回测的最坏情况,比如回测最大回撤20%而实盘已经亏了35%,大概率是过度拟合或者市场环境发生了根本变化,该停了。
蒙特卡洛模拟必须做吗?
不是必须,但强烈建议做。它能告诉你一件关键的事:回测中那个漂亮的最大回撤数字是不是运气好。很多EA回测回撤15%,蒙特卡洛一跑发现95%置信度下回撤是30%。知道这个数字,你才能合理设定资金量和止损线。不做蒙特卡洛也行,但至少把回测的最大回撤乘以2作为你的心理预期。
选EA就像选合伙人——你要找的不是那个把简历写得天花乱坠的人,而是换个环境还能稳定输出的人。过度拟合的EA就是那个只会背面试题的候选人,真干活不行。做好样本外测试、参数敏感性测试和走步优化,大多数过度拟合的EA在你花钱之前就会现出原形。FXTool 外汇工具网上提供了多种EA的回测数据和评测,值得在做决定之前参考对比。
免责声明:外汇交易涉及高风险,可能导致本金全部亏损。本文仅供教育参考,不构成任何投资建议。在进行任何交易前,请充分了解相关风险并考虑自身财务状况。