我接手过不少让人头疼的策略:回测曲线漂亮得能发朋友圈,年化收益动辄三位数,回撤控制得比教科书还标准。结果一转到模拟盘,资金曲线就像温水煮青蛙一样,一点一点缩水。问题通常不在策略逻辑本身,而在于MT5回测设置与实盘环境的偏差。MT5的策略测试器远比你想象中复杂,从建模模式到点差、掉期、滑点,每一个选项背后都藏着影响结果真实性的变量。这篇文章就是要把这些变量逐个拆开,讲讲怎么设置回测,让结果尽可能接近实盘。
1. 先搞清楚:回测结果为什么天然比实盘“好看”
很多人以为回测和实盘的差异是“运气”问题,其实根源在于回测环境的理想化假设。MT5不是故意骗你,而是它需要在“计算速度”和“微观真实度”之间做取舍。如果你选了错误的建模模式,那些被忽略的盘中细节就会变成实盘时的损失。
1.1 四种建模模式背后的成交假设
MT5策略测试器提供几种不同的价格生成方式:
| 建模模式 | 成交精度 | 计算速度 | 主要缺陷 |
|---|---|---|---|
| 仅开盘价(Open prices only) | 极低 | 极快 | 只能按当前K线开盘价成交,完全忽略盘中波动 |
| 1分钟OHLC(1 Minute OHLC) | 低 | 快 | 每个1分钟K线内部按OHLC近似模拟,但仍是合成数据 |
| 每个报价基于所有报价(Every tick based on all ticks) | 中 | 中等 | 基于1分钟数据生成模拟tick,无法还原真实市场微观结构 |
| 每个报价基于真实报价(Every tick based on real ticks) | 高 | 慢 | 使用交易所/券商真实tick数据,最接近实际成交条件 |
问题在于,MT5自带的历史数据默认是1分钟K线,如果你不手动下载真实tick数据,即使选了“真实报价”模式,也只是在缺失的部分用了模拟补全。我曾经用同一套EA分别跑“1分钟OHLC”和“真实tick”模式,结果是最大回撤相差了近40%,尤其在止损单密集的策略中,这种差异会被急剧放大。
1.2 点差、掉期、佣金在回测里是怎么被处理的
MT5测试器默认点差往往是“当前点差”,但这个值取决于你打开测试器时的实时市场状况,通常不是恶化的状态。更重要的是,很多人在回测时完全不设置掉期(Swap)和佣金(Commission),这对于持仓过夜的策略来说是致命的。
举例来说,一个做纽元等高息货币的套息策略,如果忽略每日掉期收益,回测年化可能被低估;反之,一个做黄金多单长线持仓的策略,如果忽略库存费,实盘中你会发现收益被一点点吃掉。掉期参数在MT5测试器里是可以手动填写的,帮助你按照实际券商的多单/空单掉期值来模拟,但大多数人都没填过。
1.3 成交假设与实际执行的差距
回测中,你的订单总是能以理想价格成交,止损单在K线触碰价格时触发,止盈单也在精确位置离场。但实盘中有三样东西回测默认不计入:滑点、执行延迟、流动性不足。特别是在重要数据发布或市场跳空时,实盘的报价可能是跳跃的,甚至出现短暂无报价。用“1分钟OHLC”模式回测时,这些瞬间会被平滑掉,但实盘不会对你客气。
2. 回测前的准备:数据与时段选择决定八成可信度
我发现很多人在点开策略测试器之前,根本没想过数据质量这个前提。数据是回测的地基,地基歪了,后面的设置再精细也白搭。
2.1 用什么样的数据回测
优先使用经纪商提供的真实tick数据,而不是平台默认生成的K线数据。在MT5的“工具”菜单里可以找到“数据中心”,如果你用的是合规的大型经纪商,通常能下载到较完整的tick数据。
你需要确认三件事:
- 数据中是否包含真实的买卖价差变化,而不仅仅是中间价;
- 是否有完整的日内成交量(虽然MT5回测不强制,但对判断流动性有用);
- 数据覆盖的时间范围是否足够长,至少覆盖一轮完整的上升、下跌和震荡行情。
如果你的券商数据只有分钟级别,那就老老实实选中档精度的“每个报价基于所有报价”模式,并且回测后多留出安全边际,不要被漂亮的曲线冲昏头。
2.2 时间窗口不能只看“好赚钱”的一段
选时间段是回测里最主观、也最容易作假的环节。常见错误是只选择一段单边上涨行情来测试多头策略,或者只选震荡行情测试网格策略,结果当然好看。更科学的做法是回测包含:
- 至少一次大幅回调(比如20%以上跌幅);
- 高波动事件时段,如非农数据、央行利率决议;
- 流动性极差的时段,如周末开盘后的跳空时段;
- 低波动阴跌阶段,看策略是否被拖死。
我的经验是,把总回测时间拉长到3到5年,并且把其中市场结构变化最剧烈的年份(比如近年来的大幅波动行情)单独拆出来看策略表现。如果策略只在特定行情下赚钱,那它就不是一个值得实盘的策略。
2.3 品种差异别忽略
不同品种的点差、隔夜利息、市场深度完全不同。你用EURUSD的默认点差来测试黄金策略,或者在测试原油时忽略周一跳空风险,都会让回测结果失真。最稳的做法是找到你实盘券商的品种规格表,把合约大小、点差、掉期、保证金要求都填进MT5测试器的对应设置里。
3. MT5策略测试器的关键参数逐项拆解
真正决定回测可信度的,是测试器设置面板里那几项看着简单、实际学问很大的参数。下面我按影响程度从高到低来拆。
3.1 建模模式:直接决定成交是否会被“美化”
如果你追求最接近实盘的效果,只要数据支持,就选“每个报价基于真实报价”,虽然速度慢,但它的成交逻辑最接近真实盘口。预算有限或数据不完整时,“每个报价基于所有报价”是次优选择,它会在每一分钟K线内部按不同算法生成模拟tick,至少能模拟盘中波动。
不要顺手选“1分钟OHLC”或“仅开盘价”,这两个模式只适合做策略初筛,比如你写了100个想法,想快速过滤掉明显不行的,才用它。但凡要做实盘决策,必须切到更精确的模式。
3.2 点差:用保守值而不是当前值
点差设置看起来简单,但陷阱最多。测试器默认的“当前点差”是在你打开面板那一刻的市场情况,常见于流动性较好的时段,点差偏窄。实盘中,你还要面对非农、利率决议、亚欧美收盘时段,点差会瞬间拉宽。
我通常的做法是:先看一下该品种最近30天的平均点差,然后在回测里设置成平均值的1.5倍;再额外跑一组“极端点差”测试,把点差人为调成平均值的3倍。如果策略在极端点差下还能盈利,那实盘中至少不会被点差吃掉太多。
3.3 初始资金和杠杆不是随便填的
很多人直接用系统默认的1万美金、1:100杠杆,但如果你实盘用的是500美金的小账户和1:500杠杆,回测结果完全不能直接照搬。杠杆越高,保证金占用越少,可开手数越大;初始资金越小,资金曲线的百分比回撤与真实账户的差异越大。
我自己一直坚持的原则是:测试器里的初始存款和杠杆,必须和真实经纪商账户保持完全一致。保证金不足时的强制平仓逻辑,回测中也会模拟,这样你才能看出策略会不会在极端行情里先被扫地出门。
参数建议:
- 初始存款:按你实盘计划入金的金额来;
- 杠杆:按经纪商提供的真实杠杆;
- 账户类型:选择与你实盘一致的模式(净额或对冲),某些策略在对冲和净额账户上的表现差异巨大。
3.4 掉期和佣金:隐形成本必须入账
掉期在MT5测试器里可以分别设置多单掉期和空单掉期,单位为“点”。不同券商对同一品种的隔夜利息可能差出好几倍,所以别偷懒,去你的交易账户里查一下真实的掉期数值,再填进去。
佣金方面,如果你用的是ECN/RAW账户,每手交易有固定手续费,也要如实填入。不要小看这几美元,高频策略跑下来,一年几十万美元的交易量,手续费能占到利润的三四成。
3.5 滑点模拟:宁可多设,不能少设
MT5测试器在“设置—执行”相关选项里提供了滑点参数,需要按点填写。我的建议是至少设置1到2个点的滑点,如果你交易的是流动性较差的品种,比如某些交叉盘或小众CFD,直接设置5个点以上,并且跑一组10个点的极端滑点压力测试。
这里要特别提醒:滑点并不只是“成交价变差”,还包括止损单触发后可能以更差价格离场,以及开仓时跳价造成的挂单无法成交。回测中滑点的统计方式是固定的,但真实环境中滑点会在波动放大时呈非线性增长,所以不要把滑点参数当作精确值,它只是一个压力测试工具。
4. 参数优化和过拟合:让回测结果“可信”而不是“漂亮”
回测设置得再精细,如果策略本身是过拟合出来的,一切努力都是白费。MT5自带的优化器是一个工具,也是很多人的“梦想粉碎机”。
4.1 优化器到底在优化什么
MT5的优化器会在你设定的参数范围内暴力搜索,这个参数组合的努力方向只有一个:在历史数据上做到最赚钱。但历史数据只有一条路径,参数越多,越容易找到一条恰好贴在历史走势上的“完美曲线”。
比如你优化了移动平均周期、止损点数、止盈点数三个参数,每个参数取10个可能值,那就有1000种组合。在这么多种可能里,必然有一些组合历史表现极好,但它们大概率是过拟合的产物。
我的经验是:把优化参数的个数控制在2到3个以内,并且优化后一定要做样本外验证,用没有参与优化的那段时间来跑一遍。如果样本外表现垮了,说明策略是“背答案”,不是“会做题”。
4.2 样本内与样本外的正确分法
假设你有5年数据,不要简单地把前4年设为样本内、后1年设为样本外,这样做太粗糙。更可靠的是做滚动窗口验证(Walk-Forward Analysis),但MT5原生没有这个功能,需要手动切时间段来模拟。
我常用的一个土办法是:
- 在2019到2021年做参数优化;
- 锁死优化出的参数,在2022年单独回测;
- 如果2022年结果还过得去,再把参数应用到2023年到2024年;
- 连续两个样本外年份都稳定,才考虑进入模拟盘。
这个流程虽然笨,但比一个大的样本外测试更能说明策略的稳定性,因为它经历了不同的市场环境切换。
4.3 模拟盘和回测相互配合
回测之后再跑模拟盘,不是走流程,而是用真实盘口检验策略的执行细节。我在模拟盘阶段经常发现回测没暴露的问题:订单偶尔没有及时成交、报价跳动导致止损触发不精确、策略在低流动性时段频繁开单等等。这些偏差只有实盘环境才能暴露。
模拟盘至少跑2周到1个月,覆盖足够多的开单次数。如果模拟盘结果与回测偏差在20%以内,我觉得是可以接受的范围;如果偏差超过50%,说明回测设置还有硬伤,需要回头检查数据、点差和执行参数。
5. 回测结果里的关键指标怎么读
设置对了,还得会看结果。MT5回测报告里指标很多,但真正值得盯住的其实就几个。
5.1 交易次数少于100笔,回测没有统计意义
别把一次回测跑出20笔交易当回事。交易次数太少,样本就不具备统计意义,结果可能只是运气。我自己心里有一条线:回测中的订单数量至少要达到100笔,最好超过200笔。如果一个策略一年才交易十几次,那么它至少需要覆盖多个经济周期的数据,才有资格被讨论。
5.2 回撤和恢复因子比盈利因子更值得关注
盈利因子(Gross Profit / Gross Loss)大于1.5当然好,但我更看重最大回撤和恢复因子(净盈利除以最大回撤)。最大回撤决定你最坏情况下能扛多少回撤,恢复因子则告诉你策略从回撤中爬起来有多快。一个年化收益80%、最大回撤40%的策略,和一个年化收益30%、最大回撤8%的策略,前者看起来很诱人,但在实际操作中往往很难坚持执行。
5.3 一套参考的“回测达标线”
给你一套我自己用来筛选策略的参考线,不绝对,但你拿去用至少能过滤掉明显的坑:
- 最大回撤小于20%;
- 恢复因子大于3;
- 盈利因子大于1.5;
- 连续亏损次数不超过6次;
- 回测交易次数大于100笔;
- 样本外结果与样本内结果偏差小于30%。
如果回测结果连这个标准都达不到,就别浪费时间去实盘了。如果达到了,也别忘了用下一章的方法再检验一把。
6. 从回测到实盘:我踩过的坑和现在的做法
最后聊聊我自己在实盘验证中的积累。做这行越久,越觉得回测的本质是“有条件的筛选”,而不是“未来的预测”。
先说几个踩过的坑:
第一,不设掉期导致套息策略回测年化虚高。有一个长期做纽元兑美元的策略,回测年化20%,实盘一跑缩水到12%,查到最后是把每天0.8个点的隔夜利息收益当成了策略本事,实盘账户的掉期一扣,利润就被削掉一大块。
第二,只用默认点差回测黄金策略。黄金的点差在实盘里经常波动,尤其是亚洲早盘和重要数据发布时,可以瞬间从2个点拉宽到8个点。回测用默认点差跑出来的稳定盈利,在实盘变成了一连串止损。
第三,过度依赖优化器选出的“黄金参数”。之前一个海龟策略的变种,在优化器里找出了完美参数组合,样本外跑了一年也还算稳,但一遇到趋势反转的新行情,连续四次止损,直接把我打回原形。后来我把优化参数的取值范围缩小了很多,优先选择在广泛参数区间内都能盈利的策略,而不是只在某个峰值点上盈利的策略。
现在的做法相对固定:先用“1分钟OHLC”模式快速筛掉明显不靠谱的想法,然后切换到“真实tick”模式跑细测,同时把点差、掉期、佣金、滑点全部按真实账户来设置;再手动划分样本内和样本外,做至少两个不同年份的验证;最后用模拟盘跑2到4周,每天比对回测预期和实际成交的偏差。这个过程很繁琐,但经过这轮过滤后,策略进入实盘后的表现,至少不会让人晚上睡不踏实。
回测永远不可能100%等于实盘,能做的只是尽量抹平那些显而易见的乐观假设。你花在回测设置上的功夫,最终都会体现在实盘资金曲线里。