回测赚了200%,实盘却亏钱?
老张上个月找到我,说他在MQL5社区下载了一个EA,MT4回测跑了3年数据,净利润翻了两倍多。他兴冲冲挂上实盘,入金5000美元,跑了两周亏了600多。
他问我:"回测明明很漂亮,为什么实盘完全不是那么回事?"
说实话,这种情况我见过太多了。回测和实盘之间,隔着至少7个大坑。今天我把这些坑一个个掰开说清楚,你以后少交点学费。
坑一:你的回测数据可能根本不准
MT4回测有三种建模模式:逐笔报价(Every Tick)、控制点(Control Points)、开盘价(Open Prices Only)。
很多人看到"Every Tick"就以为是真实的逐笔数据。不是的。MT4的Every Tick模式其实是用1分钟K线数据插值生成的伪tick。它会在每根1分钟K线的开高低收之间,用一种固定算法"编造"出中间的价格波动。
真实市场里,1分钟内可能有几百个tick,价格走势千奇百怪。但MT4插值出来的tick只有十几个,而且走势非常规律,先从开盘价到最高价(或最低价),再折回来。
这意味着什么?如果你的EA依赖止损止盈的精确触发位置,回测结果可能完全失真。比如你设了15点止损,真实市场里价格可能先打到你止损再反弹,但插值数据里这个瞬间波动被"抹平"了,回测中你的止损根本没触发。
怎么判断数据质量?看回测报告左下角的"建模质量"(Modeling Quality)。如果只用MT4自带数据,通常只有25%或者90%。想要接近99%,你需要用Tick Data Suite这类工具导入真实tick数据。
一个直观的对比:我曾经用同一个剥头皮EA,MT4默认数据回测年化收益80%,换成99%建模质量的tick数据后,年化收益直接掉到12%。差距就是这么大。
坑二:点差模型太理想
MT4默认回测用的是固定点差。比如EURUSD设成2点,从头到尾都是2点。
但真实市场的点差是浮动的。正常时段EURUSD可能是0.8-1.5点,到了非农数据公布那几秒钟,点差可能瞬间飙到8-15点。亚盘流动性差的时候,点差也会明显变宽。
如果你的EA是短线策略,平均每笔盈利只有5-8点,那么点差从1点变成3点,你的利润直接被砍掉一大块。更极端的情况,非农时段点差飙到10点以上,你的EA可能在最差的价格开仓,然后扛着巨大的浮亏。
我见过一个网格EA,回测用2点固定点差,年化收益60%。把点差模型改成浮动点差后,年化收益变成22%。再加上新闻时段的极端点差模拟,年化收益只剩8%。
你想想,这三个数字,哪个更接近实盘表现?
坑三:回测假装没有滑点
回测里每一笔订单都是完美成交的。你挂1.08500买入,就一定在1.08500成交。
实盘不是这样。你点买入的那一刻,价格可能已经跳到了1.08520。这就是滑点。
滑点大小取决于很多因素:你的网络延迟、broker的执行速度、市场波动程度、你的订单量大小。正常情况下EURUSD滑点大概0.5-2点,行情剧烈波动时可以到5-10点甚至更多。
对于高频或剥头皮策略来说,滑点是致命的。假设你的EA平均每单利润8点,每单滑点2点(开仓1点+平仓1点),你的实际利润就缩水了25%。如果一天交易20次,光滑点成本就是40点。
而回测报告里,这些成本统统是零。
坑四:执行延迟被完全忽略
回测是瞬时执行的。EA发出信号的那一刻,订单就成交了。
实盘中,从EA发出指令到broker服务器执行,中间有一段延迟。这段延迟通常在50-300毫秒之间,取决于你的VPS位置和broker服务器的距离。
50毫秒听起来很短?在价格快速变动的时候,50毫秒内EURUSD可以跳2-3点。如果你的VPS在国内,broker服务器在伦敦,延迟可能到200-400毫秒,那就是5-8点的差距。
这就是为什么挂EA一定要用VPS,而且VPS的位置要尽量靠近broker的服务器。如果你的broker主服务器在纽约(Equinix NY4机房),那你的VPS也应该选纽约节点。在伦敦的broker就选伦敦节点。
我认识一个朋友,同一个EA,从国内阿里云换到纽约VPS后,月收益从2.3%提升到了4.1%。这就是延迟的差距。
坑五:市场环境变了,策略就废了
这是最容易被忽视、但影响最大的一个坑。
你回测用的是2020年到2023年的数据。这三年里EURUSD经历了大趋势行情(2020年从1.08涨到1.23,2022年从1.13跌到0.96)。你的趋势跟踪EA在这段数据上表现非常好。
但2024年呢?EURUSD可能进入一个宽幅震荡区间,1.05-1.12之间来回跑。你的趋势策略在这种行情里会反复被假突破打脸,止损一个接一个。
市场有周期。趋势阶段和震荡阶段交替出现,没有任何一种策略能在所有市场环境下都赚钱。
回测能告诉你策略在过去某段时间表现如何,但不能保证未来也是这样。如果你的回测期正好是策略最擅长的行情类型,那回测结果就会严重高估未来表现。
比较靠谱的做法:把回测数据分成样本内和样本外。用2018-2022年的数据优化参数,然后看2023-2024年数据上的表现。如果样本外的表现比样本内差很多,说明策略的普适性不够。
坑六:过度拟合,回测曲线太完美反而危险
如果你一个EA有20个可调参数,你反复调整这些参数去拟合历史数据,最后一定能调出一条非常漂亮的回测曲线。
但这条曲线大概率在实盘中崩溃。
因为你不是在找市场规律,你是在找历史数据的巧合。20个参数足以拟合任何一段历史价格走势,但这些参数组合对未来毫无预测能力。
判断过度拟合有几个简单标准:
- 参数只要微调一点,回测结果就剧烈变化?过拟合。
- 换一个货币对或换一段时间,策略直接不赚钱?过拟合。
- 回测曲线完美得不真实,几乎没有回撤?过拟合。
好的策略应该是参数鲁棒的。把止损从25点改成30点,把均线周期从20改成25,收益率应该有变化但不会天翻地覆。
坑七:不同broker,不同世界
你在IC Markets上回测用的是IC Markets的历史数据。但你实盘挂在FXTM上。两家broker的数据源不一样,报价会有微小差异。
这些差异包括:
- 开盘价和收盘价的时间差:不同broker的服务器时区可能不同(GMT+0、GMT+2、GMT+3),同一根日线K线的开收盘价就不一样。这会直接影响基于日线的策略信号。
- 点差结构不同:A家broker的EURUSD点差平均1.2点,B家1.8点。看起来差别不大,对日内策略的影响是实实在在的。
- 流动性提供商不同:大broker对接多家银行报价,小broker可能只有一两家LP。流动性差的broker在行情波动时滑点更严重,报价也可能有异常跳空。
- 执行模式不同:STP/ECN和做市商的执行逻辑完全不一样。做市商可能有重新报价(Requote),ECN可能有部分成交(Partial Fill)。
同一个EA,在IC Markets上月赚3%,换到另一家小broker上可能月亏1%。这不是策略问题,是执行环境问题。
怎么缩小回测和实盘的差距?
知道了这7个坑,接下来说说怎么尽量填平它们。
第一步:提高回测质量
用99%建模质量的tick数据做回测。Tick Data Suite或者Birt's Tick Data可以帮你获取真实的历史tick。同时,回测时设置浮动点差和滑点模拟。MT5在这方面比MT4好很多,如果可以的话建议用MT5回测。
第二步:做压力测试
别只用标准参数回测一次就完事。把点差放大到正常值的2-3倍,看看策略还能不能赚钱。加上2-3点的随机滑点,看看曲线变成什么样。如果加了这些"惩罚"之后策略还有利润,说明它有一定的安全边际。
第三步:模拟盘前向测试
回测通过之后,不要直接上实盘。先挂在模拟盘上跑至少4-8周。模拟盘的价格和执行速度接近实盘,可以帮你发现很多回测看不到的问题。
注意对比模拟盘和回测的关键数据:胜率、平均盈利、平均亏损、最大回撤。如果差距超过30%,你需要找出原因。
第四步:小资金实盘验证
模拟盘测试通过后,用最小手数(0.01手)挂实盘跑2-4周。这一步的目的不是赚钱,是验证真实执行环境下策略的表现。
重点观察实际成交价和EA下单价之间的滑点、实际点差和回测设定点差的差异、订单执行是否有延迟或拒绝。
第五步:分批加仓
验证没问题后,逐步增加仓位。别一步到位。可以每两周增加一次仓位,每次增加20-30%。这样即使策略在某个阶段表现不好,你的损失也是可控的。
上实盘前的检查清单
在你把EA从回测环境搬到实盘之前,逐条确认以下内容:
- 回测建模质量达到99%(使用真实tick数据)
- 回测中设置了浮动点差,而不是固定点差
- 回测中加入了1-3点的滑点模拟
- 策略在不同时间段(样本外数据)都能盈利
- 关键参数微调后回测结果没有剧烈变化
- 在至少2个不同货币对上测试过策略逻辑
- 模拟盘前向测试至少运行了4周
- 模拟盘结果和回测结果的偏差在合理范围内(30%以内)
- VPS已配置好,延迟在100毫秒以内
- 已准备好最小手数的实盘资金做验证
- 设定了明确的止损线(账户最大回撤比例)
- EA的错误处理逻辑已经检查(断网、断线重连、订单失败重试)
这12条里如果有3条以上没做到,我建议你先别急着上实盘。
常见问题
Q1:为什么我的EA在模拟盘上表现也不错,但实盘就不行?
模拟盘和实盘之间也有差距,主要是执行质量的差异。模拟盘订单不进入真实市场,不存在流动性问题,成交几乎不滑点。另外有些broker的模拟盘点差比实盘窄。所以模拟盘更多是验证策略逻辑,不能完全代替实盘测试。这也是为什么小资金实盘验证那一步不能省。
Q2:回测报告里的建模质量90%够用吗?
看策略类型。如果是基于4小时或日线的中长线策略,90%的建模质量问题不大,因为策略不依赖精细的价格波动。但如果是剥头皮或短线策略,平均持仓时间在几分钟到几十分钟,90%远远不够,你需要99%以上的tick级数据。
Q3:MT5的回测比MT4更准确吗?
总体来说是的。MT5原生支持真实tick数据回测,建模质量可以达到100%。MT5还支持多货币同时回测,可以更真实地模拟多品种策略。另外MT5的点差模型更贴近实盘。如果你开发新EA,建议直接用MT5平台。
Q4:我应该用多长时间的历史数据做回测?
至少要覆盖不同的市场环境。一般建议3-5年的数据,确保包含趋势行情和震荡行情。太短的回测(比如只有半年)样本量不够,结果不可靠。太长的回测(比如15年以上)也要小心,因为10年前的市场微观结构(点差、流动性、波动率)和现在差别很大,远古数据的参考价值有限。
Q5:有没有办法在回测阶段就完全消除这些差距?
没有。回测永远是对历史的模拟,不可能100%复现真实交易环境。你能做的是尽量缩小差距,但不可能完全消除。这就是为什么一定要经过模拟盘测试和小资金实盘验证这两个步骤。把回测当作筛选工具,不要把它当作预测工具。
回测是起点,不是终点。好的回测结果只能说明策略"有可能"赚钱,不能证明它"一定"赚钱。真正的验证要在实盘中完成。如果你正在寻找经过实盘验证的EA或者想系统学习EA评估方法,可以到 FXTool 看看,上面有不少实用的工具和资源。