关于MT5策略测试器的多线程回测设置,如何压榨CPU性能缩短等待时间,这篇可能最接地气

较热54
登录发帖
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
感性的路人甲
感性的路人甲 楼主 2026-9-14 21:47:27 浏览 540 回复 0 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 4 帖数 9 积分 2149 汇币 1901
1楼
昨晚又是盯着进度条到凌晨一点半,眼看着一个欧美M15的十年回测跑了快四十分钟才到2019年,实在受不了了,干脆把MT5测试器的多线程设置翻出来折腾了一遍。这篇文章就写给和我一样刚接触这块的朋友,老手可以直接跳过。
先说结论:MT5策略测试器默认的线程调度其实挺保守的,如果你的CPU核心数够多但没做任何设置,等于白白浪费了一半算力。我的机器是8核16线程,之前跑一个含2000次参数优化的网格策略,全跑完要将近三小时,调整之后压到了五十分钟左右。
具体怎么弄,我按自己踩坑的顺序列一下:
  • 打开“代理”设置:在测试器界面右键选择“代理”,或者从“工具-选项-代理”进去。关键是把“本地代理”启用,并且把“使用的本地代理核心数”设成物理核心数,不是逻辑线程数。我一开始设成16,结果因为超线程争抢缓存,反而比8核慢了约12%,这个坑我踩了两天才发现。

  • 测试器本身的“线程数”选项:在策略测试器的“设置”标签页里,有个“线程”参数,默认是1。这里要理解一个逻辑——它控制的是同时进行的优化任务数,不是单次回测的线程。做参数优化时把它设成物理核心数减1,留一个核给系统,不然鼠标都会卡。但如果你只是跑单次回测,这个值设多少都没用,因为单次回测本身就是单线程的。

  • 历史数据质量比线程数更重要:我一开始死活跑不快,后来发现是欧美M1的数据只下载了最近两年,测试器一边跑一边补数据,CPU全耗在IO上了。建议先在“品种”里把对应周期的历史数据完整下载,尤其是要做tick级回测的话,数据量能差出几十倍。

  • EA代码本身的写法:这个算进阶但很关键。如果你的EA里用了大量Sleep()、WebRequest或者每tick都刷新对象,多线程优化时每个线程都会卡在等待上。我把自己写的均线EA里一个每tick调用一次的Comment()去掉之后,同样参数下回测时间直接少了18%。

最后说个观察:多线程优化时CPU占用率如果上不去,八成是数据IO或者内存带宽瓶颈,不是线程数没设对。我现在的习惯是跑优化前先开任务管理器看一眼磁盘活动时间,超过30%就先处理数据。
你们平时跑优化一般开几个线程?有没有遇到过线程数拉满反而更慢的情况,交流。

补充一下,那个“本地代理核心数”设成物理核心数后,记得把“代理”窗口里的“使用远程代理”也关掉,不然本地代理跑着跑着还是会偷偷连远程,速度又掉回去了。
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 大家小黄鱼吃的咋样 下一帖 → VPS延迟从8ms飙到47ms,排查三天发现是机房路由绕路