EA 回测盈利、实盘却亏损?多数情况下,答案不是运气,而是过度拟合(曲线拟合)与数据偏差。本文是一份 EA 回测指南:从数据与成本假设、样本内 / 样本外拆分、参数稳健性检验到 MT5 策略测试器实操,给出一套可复现、可质疑的回测流程,帮你判断一套 EA 是 "拟合了历史",还是真正值得实盘验证。
一、数据与成本假设:回测的地基
数据质量是回测的地基。 只覆盖 "看起来够长" 的区间远远不够:
- 覆盖完整市场周期:数据区间应包含趋势市与震荡市、高波动与低波动阶段、牛熊转换,确保策略经历过多种市场结构。持仓周期不同,所需历史长度也不同 —— 交易频率越低,越需要更长历史来积累足够的交易样本。
- 选择建模精度:MT5 策略测试器提供多种报价生成模式,精度递减 ——"基于真实报价的每个报价"(使用经纪商累积的真实 tick,最接近实盘,但首次下载慢)>"每个报价"(由分时数据模拟全部报价)>"1 分钟 OHLC">"仅开盘价"(只适合快速粗筛,且不做保证金控制)MetaTrader 5。短线 / 剥头皮类策略必须用真实 tick 或 "每个报价" 模式,"仅开盘价" 的结果不可信。
- 警惕数据偏差:
- 前视偏差:使用了未来信息,例如用当根 K 线的收盘价做同根 K 线开盘价的入场决策,或指标里含未来函数。
- 幸存者偏差:只回测现在仍然活跃的品种 / 合约,忽略已下架、已改名的标的,结果会被系统性高估。
- 对齐与后缀问题:服务器时间与数据时间不一致、品种后缀不同(如
.a、.m),会直接影响测试区间与开闭市判断,也会让实盘信号与回测对不上。
成本假设必须贴近真实且可调:
- 使用可变点差(新闻、开盘时段明显扩大),而不是固定最小点差;
- 计入佣金(按手或按成交额)、滑点(市价单、止损单尤其敏感)、隔夜利息 / 库存费(持仓过夜或多日的策略影响显著);
- MT5 测试器支持修改品种规格(点差、保证金、手续费、执行模式)来模拟不同经纪商条件,也支持模拟成交延迟(无延迟 / 随机延迟 / 固定延迟),近似实盘请求执行环境 。
用多组成本假设(乐观 / 基准 / 严苛)跑同一套策略,结果仍合理才算过关。
二、样本内与样本外:防止参数过拟合
- 参数优化只允许使用样本内(训练期)数据,优化完成后,用未参与优化的样本外(检验期)区间验证。
- 反复查看样本外结果同样是泄漏:看一次是检验;看完不满意再回头调参、再跑,样本外就变成了 "样本内"。每轮只允许一次前向检验,看完必须冻结参数。
- MT5 内置 Forward 前向测试:在 "设置" 中指定前向期为总区间的 1/2、1/3、1/4 或自定义日期,前向期恒取总区间的后段;前半段用于参数适应,后半段用于验证 。
- 更严格的做法是滚动式 Walk-Forward:把历史切成连续窗口,逐窗口执行 "用前段优化→用后段验证→窗口前移",所有样本外段合并后的表现比单次前向更接近实盘。这需要多次手动分段,或用支持该流程的工具完成。
三、稳健性检查:改变条件后结果是否仍合理
- 改变成本假设(点差、滑点、佣金各设多档);
- 改变起止日期(换年份窗口、换市场阶段);
- 改变参数邻域(关键参数上下调整 10%–20%);
- 观察回撤、交易次数、盈亏结构是否平稳,而不是只看净利润。
只有单一参数点表现优异,通常是危险信号—— 说明结果依赖巧合的参数组合,而不是策略本身的优势。
四、测试条件必须可复现
每次回测都应形成一份可追溯的记录,至少包含:
表格
项目 | 记录内容 |
数据 | 来源(哪个经纪商 / 数据商)、时间区间、数据粒度(tick/M1/…) |
建模 | 报价生成模式(真实 tick / 每个报价 / 1 分钟 OHLC / 仅开盘价) |
成本 | 点差(可变 / 固定)、佣金、滑点、隔夜利息 |
账户 | 杠杆、初始资金、货币 |
参数 | EA 版本与参数版本、优化方法(穷举 / 遗传)、随机种子 |
环境 | 平台与软件版本、测试器版本、运行环境 |
结果 | 全部运行结果,包括失败的 |
只展示最佳年份会掩盖连续亏损和换市场后失效的问题。 把逐年收益、逐品种表现完整列出,比一个 "总盈利 XX%" 更有说服力。
五、识别过度拟合:7 个危险信号
- 参数轻微变化就由盈转亏:止损改 5%、点差加 0.5 点即大幅亏损 → 策略稳定性不足。
- 最佳参数点孤立:优化曲面剧烈起伏,最佳点像 "针尖" 一样,邻域参数明显变差。
- 交易次数远少于参数数量:如 8 个参数、只有 40 笔交易,拟合自由度太大。
- 权益曲线过于平滑:回撤几乎为零的曲线在真实市场很少出现,通常是优化过度。
- 收益被单一年份或单笔大单支撑:删掉最佳年份或最大盈利单,策略立刻变负。
- 样本外区间明显衰减:冻结参数后,在未参与优化的区间表现大幅缩水。
- 成本假设一变就崩:只要点差、滑点按真实值上调,结果就从盈利变亏损。
例如:某组参数在训练期盈利,但点差增加 0.5 点或止损改变 5% 就大幅亏损 —— 这更像曲线拟合,而非稳定优势。测试报告应同时保留失败结果、软件版本、数据来源和随机种子。
六、一套不过度依赖最佳参数的流程
- 预留样本外:先切出一段从未参与调参的区间,锁死不动。
- 多成本假设:用多组点差、滑点、佣金组合分别回测。
- 参数邻域扫描:关键参数上下调整 10%–20%,看回撤、交易次数、盈亏结构是否平稳;不平稳说明策略对参数敏感,应简化或放弃。
- 逐年与分阶段拆分:按年份、按波动率 / 市场状态分组统计,确认结果没有被某一年份 "撑起来"。
- 综合判断:只有多个成本档、多个时间段、参数邻域内都保持合理,才认为策略具备稳健性。
历史回测只能帮助排除脆弱方案,不能证明实盘收益。 回测通过是必要不充分条件。
七、从技术测试过渡到受控实盘
评估顺序(不可跳级):
文件与权限安全 → 逻辑与参数理解 → 可复现回测 → 模拟环境运行 → 极小规模真实执行 → 才考虑扩大使用。
每步设定通过标准,例如:
- 日志无关键错误;
- 订单与规则一致(手数、止损止盈、时间);
- 成本假设合理(点差 / 滑点接近该账户真实值);
- 断线重连后不会重复下单、不会漏单。
不能因为某段回测收益较高就跳过中间阶段。
实盘验证应关注回测很难重现的因素:服务器时间、品种后缀、点差突增、成交滑点、网络中断、VPS 重启、授权服务异常(EA 许可失效)。
账户级保护:先设好账户日亏损上限、最大仓位、人工停机条件(kill switch);定期核对 EA 版本与参数是否与记录一致。
记住:自动交易减少的是人工操作,不是市场风险,也不代表无需持续监督。
八、应用到你的账户条件
把本文示例中的数字(0.5 点、5%、10%–20% 等)替换为你自己的账户条件(点差水平、佣金、滑点、止损习惯、资金规模),并在记录中注明数据来源、观察日期和仍未确认的假设。这样即使规则、报价或平台页面发生变化,你也能回头判断当初的结论是否仍然适用。
常见问题
回测越久越好吗?
时间更长有帮助,但数据质量、市场结构变化和样本覆盖面同样重要。一段 "长但单一" 的区间,未必好过 "覆盖多种市况" 的中等长度区间。
高胜率代表稳健吗?
不代表。还要看盈亏比、利润因子、尾部风险和最大回撤。90% 胜率的策略可能被一次大亏损打穿;连续小赢加偶尔巨亏的模式尤其危险。
实际使用时最容易忽略什么?
把样本拆成训练期和样本外期、改变参数和成本假设、观察结果是否仍在可接受范围,是最常被跳过的一步。此外常见的还有:只保留最佳年份、忽略失败记录、成本假设过于乐观、没考虑实盘执行差异(服务器时间、品种后缀、点差突增、断线重连)。
样本外表现好就能实盘赚钱吗?
不能。回测无法重现滑点执行、流动性、重复报价、交易商环境差异等现实因素,只能排除明显脆弱的设计。实盘必须从受控的小规模开始验证。
参数越多越好吗?
不是。参数越多,拟合历史的自由度越大,样本外越容易失效。效果相近时,优先选择参数更少、逻辑更简单的方案。