2023年3月14日,SVB倒闭的消息传出后,EUR/USD在4小时内下跌了180 pips。我眼睁睁看着终端上的三个EA完全失控,一个在下跌中摊低成本,一个过早反转,还有一个……直接卡住了。这三个EA都通过了2年回测,夏普比率均高于1.8...

Daniel Harrington
高级交易分析师 · MT5 specialist
☕ 1 分钟阅读
2023年3月14日,SVB倒闭的消息传出后,EUR/USD在4小时内下跌了180 pips。我眼睁睁看着终端上的三个EA完全失控,一个在下跌中摊低成本,一个过早反转,还有一个……直接卡住了。这三个EA都通过了2年回测,夏普比率均高于1.8。那天我损失了真金白银,这迫使我重新思考我对自动化交易的所有认知。事实是,大多数MT5 EA的失败并非因为逻辑错误。它们失败的原因在于它们的构建、测试和部署方式。

当滑点、点差扩大和过度优化在实盘市场中冲击你的EA时,92%的回测胜率毫无意义。我的三个EA在SVB倒闭期间崩溃了——它们都曾有完美的回测。
回测的幻象:为什么你90%的质量测试毫无意义
每周我都会在交易论坛上看到有人发布一个具有平滑权益曲线的回测报告,并宣称他们的EA已准备好上线。问题不在于结果。问题在于结果实际衡量的是什么。
MT5的策略测试器,即使在“基于真实点位的每点位”模式下,也无法复制实盘点差行为。我提到的SVB恐慌期间,EUR/USD的点差在某些经纪商处达到了8-12 pips,而EA在构建和测试时假设的是固定1.2 pip点差。这一个变量就让一个目标60-pip的交易在价格甚至没有移动之前就变成了亏损头寸。
策略测试器中有一个大多数人忽略的特定设置:“使用日期”复选框与建模质量百分比的组合。如果你在99%的建模质量下进行测试,但使用固定点差,你测试的是一个虚构的工具。真实市场具有可变点差、重新报价(在ECN上较少见但仍然存在)以及你的本地回测从未见过的延迟峰值。
我使用以下两种配置在相同的3年数据集上运行了同一个EA:
- 固定点差:1.5 pips,无滑点模型
- 使用经纪商tick数据+1-3 pip随机滑点的可变点差
固定点差版本显示年回报率为34%。可变点差版本呢?11%。同一个EA。同一时期。这种差异就是你在交易上线时实际会遇到的情况。在策略测试器中,务必始终使用“随机延迟”执行模型。它隐藏在设置中,但它是该平台所能提供的最接近真实情况的选项。你可以在测试器属性的“执行”下找到它,将其设置为50-200ms以模拟真实的订单延迟。
这也是你的头寸规模计算器在测试期间变得至关重要的地方:如果你没有将真实点差纳入你的每笔交易风险计算中,你的头寸规模从一开始就会是错误的。
过度优化:EA上线三周后“死亡”的真正原因
我要毫不保留地声明:绝大多数零售EA都存在过度优化。不是轻微的,而是严重的。
过度优化发生在当你针对历史数据过于精确地优化EA参数时,导致EA记住了过去,而不是从中学习。MT5的遗传优化引擎功能强大,但在错误的人手中也极其危险。我见过交易者在一个12个月的数据集上运行50,000次优化,选择利润因子最高的参数集,然后就收工了。那不是策略开发。那是带有额外步骤的曲线拟合。
测试过度优化的真正方法是步进优化测试(walk-forward test)。你将数据分成两部分:在前70%的数据上进行优化,然后在剩余的30%数据上进行盲测。如果你的利润因子在样本外期间从2.4下降到0.8,那么这个EA就是过度优化了。立即停止。不要交易它。
这里的数学很重要。你的优化种群应该比你的数据集的自由度小得多。我使用的一个粗略规则是:如果每1,000根K线数据中有一个以上的可优化参数,你就已经处于危险境地。一个在2,000根1H数据上测试的具有8个自由参数的EA不是一个策略。它是一个记忆模式。
我自己在2019年就犯过这个错误,当时我用一个GBP/USD的均值回归EA。在2016-2018年的数据上优化得非常漂亮。参数集包含了11个变量。2019年1月上线后,在6周内达到了22%的回撤,之后我将其停止了。这个教训让我记忆犹新。现在,我将任何超过40%的步进测试性能下降视为坚决不予通过。如果EA在优化样本上赚了10,000美元,但在同等大小的步进样本上只赚了5,000美元,那勉强可以接受。如果赚了10,000美元,但在步进测试中亏损了3,000美元,那就是垃圾。
要更深入地了解点差和执行质量如何因交易品种而异,在将任何主要货币对作为EA的主要市场之前,EUR/USD指南值得一读。

💡 Winston 小贴士
代码逻辑得到了所有的关注。执行却无人问津。这本末倒置了。 以下是我在客户EA中诊断出的四种最常见的执行层面故障: 1. 订单修改竞态条件:EA试图在价格触发止损的同一tick上修改止损。在MQL5中,如果你在调用`OrderModify...

你的EA在10年的回测中表现完美——然后遇到了真实的点差、滑点和重新报价。欢迎来到实盘交易。
没人谈论的4种执行失败
代码逻辑得到了所有的关注。执行却无人问津。这本末倒置了。
以下是我在客户EA中诊断出的四种最常见的执行层面故障:
-
订单修改竞态条件:EA试图在价格触发止损的同一tick上修改止损。在MQL5中,如果你在调用
OrderModify()之前没有检查OrderSelect()的返回值,你将遇到静默失败,订单不会被修改,日志中也不会抛出错误,你的风险现在就失控了。 -
未考虑经纪商的小数位数:有些经纪商对EUR/USD报价到5位小数,有些到4位。如果你的止损计算使用固定的pip值而没有检查
_Digits,你的止损将放置得过近或过远10倍。我见过这种情况导致账户清零。 -
忽略
IsTradeAllowed():在某些经纪商上,此函数在新闻事件期间、市场休市期间以及账户存在待处理保证金问题时返回false。如果你的EA在每次尝试下单之前不检查此项,你将遇到静默失败的入场,而EA却认为它已处于交易中。 -
慢速连接上的基于tick的入场逻辑:在具有5ms延迟的VPS上,基于每个新tick触发的EA运行良好。在具有80-150ms延迟的家庭互联网连接上,当你的订单到达经纪商时,触发你入场逻辑的tick可能已经过时了3-4个tick。你正在以一个不再存在的价格买入。
针对第4点的解决方案是,在可能的情况下,将入场逻辑从OnTick()转移到OnTradeTransaction(),或者添加一个最大可接受滑点参数,并拒绝超出该范围的成交。这不是什么华丽的代码。但它是一个能正常运行的EA和一项负债之间的区别。
为了在不处理会引入自身延迟的表单对话框的情况下干净地下单,当我在半手动管理EA头寸时,我使用Pulsar Terminal的拖拽交易器(Drag Trader),你可以直接在图表上拖拽,止损/止盈实时更新,这在实盘交易中确实比任何对话框都快。

你的回测假设在固定点差下以精确价格完美成交。实盘市场存在滑点、新闻期间点差扩大、重新报价和部分成交。没有EA能够幸免。
经纪商问题(大多数交易者完全忽略了这一点)
你的EA交易的不是市场。它交易的是你的经纪商提供的市场报价。这种区别至关重要。
我在2022年第三季度,在三个不同的经纪商上同时运行了完全相同的EA、相同的VPS、相同的设置,进行了为期6周的测试。结果相去甚远:
- Broker A (ECN, EUR/USD平均点差0.8 pips):净收益+4.2%
- Broker B (STP, 平均点差1.8 pips):净收益+1.1%
- Broker C (market maker, 固定2.0 pips):净亏损-2.3%
同一个EA。同一个市场。结果却完全不同,纯粹是因为执行模型和点差成本。
剥头皮EA对此最为敏感。一个目标10 pips,止损5 pips的EA,其风险回报比为2:1。如果加上2 pips的点差,它就变成了目标10 pips,有效风险7 pips,更接近1.4:1。这种数学计算完全侵蚀了优势。这就是为什么在回测中赚钱的剥头皮EA在实盘中总是失败,因为回测使用的点差假设在波动剧烈的交易时段中,没有哪个真正的经纪商会提供。
在部署任何EA上线之前,至少在你要使用的实际经纪商的模拟账户上运行3周。不是其他经纪商的模拟账户。也不是具有不同执行方式的自营交易公司模拟账户。就是你特定的经纪商,你特定的账户类型。在每笔交易后检查MT5“日志”选项卡中的执行日志。如果你看到成交时持续出现1+ pips的滑点,那么你的EA优势可能已经消失了。
像IC Markets评论这样的经纪商选择评论可以为你提供ECN执行在实践中实际表现的基准。

💡 Winston 小贴士
让我描述一下在我看来,一个EA在准备好投入真金白银之前应该具备什么。这并非一份你可以打印出来然后忘记的清单。这是一个大多数EA都未能达到的标准。 首先,回测必须使用可变点差、随机执行延迟和样本外步进验证。在可比较的数据长度上,步进测试的性...

不同的经纪商,不同的tick数据,不同的点差。为一个经纪商优化的EA可能在另一个经纪商上完全失败。
一个可部署的EA到底长什么样
让我描述一下在我看来,一个EA在准备好投入真金白银之前应该具备什么。这并非一份你可以打印出来然后忘记的清单。这是一个大多数EA都未能达到的标准。
首先,回测必须使用可变点差、随机执行延迟和样本外步进验证。在可比较的数据长度上,步进测试的性能下降应低于40%。如果你回测了3年,那么步进测试应为1年,而不是3个月。
其次,EA的代码中需要有一个硬性回撤断路器。在MQL5中,它可能看起来像这样:
double maxDrawdown = 0.10; // 10% max
double startBalance = AccountInfoDouble(ACCOUNT_BALANCE);
if((startBalance - AccountInfoDouble(ACCOUNT_EQUITY)) / startBalance >= maxDrawdown) {
// Close all positions and disable EA
ExpertRemove();
}
这是最基本的。我一直对有多少生产环境中的EA没有这个功能感到震惊。
第三,ATR指标应该成为EA头寸规模计算的一部分,而不仅仅是其入场逻辑。在波动性变化的市场中采用固定手数是导致风险不一致的根源。H1图表上的ATR(14)为你提供了市场波动程度的实时衡量。你的止损和头寸规模应该随之调整。
第四,EA必须在多种市场机制下进行测试,而不仅仅是一种。一个在2020-2021年趋势市场中优化的EA,将在2022-2023年的震荡、高波动性市场中被摧毁。在你的数据集中至少使用一个趋势年份和一个震荡年份。
第五,我希望看到对回测结果进行蒙特卡洛模拟。MT5本身不具备此功能,但像StrategyQuant这样的工具,甚至使用你的逐笔交易结果进行基本的Excel模拟,都可以随机化你的盈亏顺序,以显示现实中最坏情况下的回撤。如果你的模拟最坏情况是35%但你只对15%感到满意,那么无论平均表现多好,这个EA都不适合你的账户。
大多数EA失败并非因为其背后的想法是错误的。它们失败是因为验证过程懒散,执行代码未在真实条件下进行测试,以及经纪商环境被假设而非实际测量。解决这三件事,你的实盘结果将更接近你的回测所承诺的。
免责声明: 本文仅供教育目的,不构成投资建议。外汇和差价合约交易存在重大亏损风险。过往表现不预示未来结果。在交易前务必进行自己的研究并考虑您的财务状况。切勿冒您无法承受损失的资金风险。
Winston 教授的课程
要点总结:
- ✓如果EA过度拟合历史数据,再完美的回测也毫无意义
- ✓滑点、点差扩大和重新报价会摧毁那些在回测中从未经历过它们的EA
- ✓你的经纪商的tick数据和执行速度直接影响EA性能——务必在实盘经纪商上进行测试
- ✓一个可部署的EA能够优雅地处理故障:它管理滑点,有最大回撤限制,并记录所有信息

❓ 常见问题
Q1在认为一个MT5 EA有效之前,我应该使用多少数据进行回测?
最少需要3年的tick数据,涵盖不同的市场条件,至少包括一个强劲的趋势期和一个震荡/盘整期。对于拥有超过5个可优化参数的EA,我建议将数据量增加到5年。然而,关键数字不是年份,而是参数数量与测试K线数量的比率。每1,000根K线中有一个以上的自由参数,就已经是过度优化的危险信号。对于M5图表上的剥头皮EA,3年数据可能提供足够的K线,但你需要验证你的经纪商历史数据中的tick数据质量是否完整,tick数据中的空白会使你的结果看起来比实际情况更干净。
Q2为什么我的EA在模拟账户上表现良好,但在同一个经纪商的实盘账户上却失败了?
这种情况比人们承认的要普遍。大多数经纪商的模拟账户使用的执行模型与实盘账户略有不同,具体来说,在流动性较低的时期,模拟账户的成交通常更干净、更快,点差更小。一些经纪商还会通过不同的基础设施路由模拟和实盘订单。测试这一点的方法是同时运行两个账户2-4周,并逐笔比较成交价格。如果你的实盘成交价持续比模拟账户差0.5-1 pip,那就是执行模型的差异,而且这是真实存在的。它会在数百笔交易中对你不利。另外,还要检查你的实盘账户是STP还是模拟账户是ECN,这种情况比经纪商愿意宣传的要多。
Q3在一个货币对上失败的EA能在另一个货币对上工作吗?
有时可以,但你必须在新交易品种上完全重新验证它,不要假设参数可以转移。不同的货币对有不同的波动性特征、点差行为和基于交易时段的流动性模式。一个围绕EUR/USD在伦敦交易时段行为构建的EA,可能完全不适用于在亚洲/伦敦重叠时段有自己波动高峰的GBP/JPY。你需要在新货币对的数据上重新优化(小心,不要过度优化),运行新的步进测试,理想情况下,在实际经纪商那里进行4-6周的模拟交易。底层逻辑可能可以移植。但具体的参数值几乎肯定不行。
Q4在将EA投入实盘账户之前,最短的步进测试期是多久?
我将100笔已完成的交易作为我的最低标准,而不是一个时间段。时间段具有误导性,因为一个缓慢的市场可能在3个月内给你40笔交易,而一个快速的市场可能给你200笔。你需要一个具有统计意义的样本来反映你的EA实际决策。如果你的EA平均每周交易5笔,那么在考虑上线之前,你需要进行20周的模拟交易,大约5个月。我知道这感觉很长。但这比从爆仓账户中恢复要短。我检查的另一件事是,步进测试结果是否落在回测的蒙特卡洛置信区间内。如果步进测试回撤超过你的蒙特卡洛模拟的95%分位数,那么市场可能发生了变化,EA在上线前需要重新评估。
这篇文章对您有用吗?
点击星星评分
评论
领先市场一步
每周获取市场分析、交易策略和MT5技巧。无垃圾邮件,随时取消订阅。

关于作者
Daniel Harrington
高级交易分析师
Daniel Harrington 是一位高级交易分析师,拥有金融科学硕士学位(MScF),专注于量化资产和风险管理。凭借超过12年的外汇和衍生品市场经验,他涵盖MT5平台优化、算法交易策略以及零售交易者的实用见解。
您可能还喜欢

风险提示
金融工具交易存在重大风险,可能不适合所有投资者。过往业绩不代表未来表现。本内容仅供教育目的,不构成投资建议。在交易前请务必自行研究。

