Summary: 通过一次真实的回测性能排查,分享MT4/MT5回测提速的隐藏技巧,涵盖官方文档未明确说明的图表对象累积、日志开关等经验。




大部分人在聊EA都是写策略编代码之类的东西。没什么人聊等回测跑完到底有多无聊。上周四下午我就盯着一个进度条,卡在87%死活不动。策略本身不复杂,就是个均线金叉加移动止损,但五年EURUSD的tick数据跑起来就跟老牛拉破车一样。

我开始到处找原因。后来发现的问题其实不是单个故障,而是好几个小毛病叠在一起。全改完之后回测时间砍了一半左右。最关键的是这些修改大多用不了一分钟。

没人提过的图表箭头问题



这东西是我纯属意外发现的。开一个可视化回测,盯着图表看。EA每开一单或者平一单,MT4/MT5就会在图表上画一个箭头。开仓箭头、平仓箭头、止损标记、止盈标记。跑个几百笔交易下来,图表上跟刺猬似的。

MQL4官方文档里讲ObjectCreate()ObjectDelete()怎么用,教你怎么管理自定义图表对象。但它从来没说过回测引擎本身在后台也在生成对象,而这些对象是会吃CPU的。EA交易次数越多,对象堆得越多,回测就越慢。

后来我在一个论坛上看到有人提了一嘴,说在回测过程中手动删掉图表上的箭头和线条能提速。我一开始觉得扯淡,删几个视觉元素还能影响计算速度?但我试了一下。打开一个正在跑的可视化回测,点工具栏上的"删除"按钮(就是删趋势线那些东西的那个),下拉菜单里选"删除所有对象"。图表瞬间干净了。然后回测速度?肉眼可见地往上跳了一截。

MetaQuotes官方帮助中心讲性能优化的时候,主要提的是减少图表最大柱数和禁用新闻推送这些东西。他们从来没提过图表对象累积的问题。这是他们文档里的一个盲区,但很多交易者因为这个白白浪费好几个小时等回测跑完。

吃CPU的日志文件



另一个隐藏的性能杀手是终端日志。默认情况下,MT4和MT5在回测期间会记录每一个事件。每一个tick的处理、每一次价格检查、每一笔订单修改,全都写进日志。如果你的EA是高频策略,日志文件涨得飞快。

Exness的帮助中心里其实提到过这一点:如果你在跑EA,可以考虑关闭日志记录,因为它会占用计算机内存。但这个建议埋在它们的FAQ里,MetaQuotes自己的文档反而没写。但这个确实管用。

工具 > 选项 > EA交易里把"启用EA交易日志"的勾去掉。在我的测试里,光这一项就省了大概15%的运行时间。日志在调试的时候有用,但做大规模参数优化的时候真不需要。

减少最大柱数——但别矫枉过正



标准建议是在工具 > 选项 > 图表里把"图表中最多柱数"和"历史数据中最多柱数"调低。官方建议砍50%,我试过之后直接砍到策略实际需要的数量。

窍门在这:如果你的EA用200周期均线,你不需要10万根K线来算这根均线。前199根K线只是在填均线的缓冲区而已,再往前的数据跟当前计算没半毛钱关系。把"历史数据中最多柱数"设成2000或3000,别用默认的50000。这样能强制终端少加载数据到内存里。

但有个坑是官方文档没写明白的:如果你把这个值设得太低,指标计算可能会从均线还没"预热"好的位置开始算。MQL4官方文档里提到过指标需要足够的K线数量才能正确计算。所以要找个平衡点。对于200周期SMA加50根K线的信号过滤策略来说,3000根K线绰绰有余。如果策略用日线数据,可能需要多一点。

离线图表的歪招



这个比较奇葩。回测的时候如果你一直开着图表窗口并且还拖来拖去,终端在不停地重绘画面。这也在吃CPU。解决方法很简单:回测开始之后,把图表窗口最小化。别关,最小化就行——这样计算还在跑,但实时渲染停了。

我并排对比测试过。同样的EA、同样的数据范围。一个窗口最大化跑,一个最小化跑。最小化的那个快了大约12%。不算特别夸张,但几百次优化跑下来差距就大了。

VPS vs 本地电脑——真正的差别



所有人都推荐用VPS跑实盘交易。但回测是另一回事。Exness的帮助中心提到VPS主要是为了执行速度和连接稳定性。但回测的话,只要你电脑CPU还行,本地机器几乎永远比VPS快。

原因很简单。回测用的是本地存储的历史数据,没有网络延迟,所有计算都在你自己的处理器上跑。VPS通常是共享CPU资源,跑大量计算反而可能更慢。我的实盘EA放在VPS上跑,但所有回测和优化都在台式机上做。差距非常明显。

优化参数的顺序技巧



这是我这么多年跑参数优化自己观察出来的。内置优化器按你指定的参数顺序跑。如果你有三个参数,它会先跑最内层的循环。也就是说,它会先把最后一个参数优化完了再动下一个。

如果你的某个参数计算量很大(比如复杂的指标计算),把它放在外层循环。优化器算它的次数就会变少。MQL4本身没有给优化器提供显式的循环顺序控制,但你可以通过调整输入参数的顺序来减少重复计算。把最耗时的参数放在第一个,最省事的放最后一个。

这个我在任何官方文档里都没见过。纯粹是看CPU占用率的时候自己琢磨出来的。一个30秒的优化任务,简单调个顺序就能压到20秒。

所有方法叠加的效果



所有这些方法一起用上呢?我那个五年tick数据的回测从大约45分钟降到了差不多20分钟。提速55%,一行EA代码都没改。没动策略、没升级硬件,只是更清楚这个终端到底是怎么工作的而已。

MetaTrader平台功能很强大,但它的性能瓶颈在官方渠道里很少有人聊。MetaQuotes的文档告诉你"能做什么",但不太告诉你"别做什么"。这些经验就得靠实际跑出来的教训去填。

参考来源:MetaQuotes帮助中心 – Enhancing MetaTrader Performance(help.metaquotes.net),MQL4官方文档 – 自定义指标(docs.mql4.com),Exness帮助中心 – 可以提升MetaTrader的性能吗?(get.exness.help)。

本文首发于FXEAR.com,原创内容,未经授权禁止转载。