同一套EA在MT4跑三年,迁到MT5后夏普直接腰斩

较热62.8
登录发帖
Exness 推荐平台

入金门槛低,出金到账快,支持多种账户类型

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
bird0388
bird0388 楼主 2026-9-18 15:25:16 浏览 548 回复 4 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 2 帖数 5 积分 20 汇币 20
1楼
有汇友在后台问我,说他把一套在MT4上跑了三年的欧美EA原封不动挪到MT5,结果回测夏普比率从1.8直接掉到0.9,问是不是MT5本身有问题。我去年也踩过这个坑,当时差点以为策略失效了,后来逐行对tick才找到原因,今天就把整个排查过程捋一遍。
先说结论:MT4和MT5的tick数据模型、订单执行逻辑、指标计算精度都不一样,同一套代码直接迁移,夏普腰斩是常态,不是个案。我当时那套EA核心是
  • 基于MA交叉入场,周期M15
  • 止损固定35点,止盈70点
  • 用iATR做动态仓位
在MT4上跑欧美,三年回测夏普1.76,最大回撤12%。迁到MT5后同样的参数、同样的历史区间,夏普0.91,回撤飙到23%。
我一开始怀疑是点差建模问题。MT4默认用当前点差回测,MT5可以导入真实tick。后来用TDS(tick data suite)分别给两个平台灌了同样的Dukascopy tick数据,差距缩小了一点,夏普从0.91回到1.12,但离1.76还差得远。说明tick精度只是部分原因,不是主因。
真正的坑在订单执行逻辑。MT4的EA里我用了大量OrderSend+OrderModify的写法,MT5里对应的MqlTradeRequest结构完全变了。我直接把MT4的订单模块用宏定义硬套过去,结果止盈止损挂单经常被拒,因为MT5对止损距离有最小限制(STOPS_LEVEL),而MT4某些经纪商是0。这就导致回测里很多本该止盈的单子被卡住,最后反向打止损。我后来在初始化里加了SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)做动态校验,夏普回到1.35左右。
还有一个隐蔽的坑是指标句柄。MT4的iMA、iATR是每tick重新计算,MT5里必须用iMAHandle创建句柄,然后CopyBuffer取值。我偷懒直接在OnTick里反复创建句柄,结果内存泄漏不说,指标值还滞后一根K线。改完句柄复用后,夏普又回来0.2左右,到1.55。
最后剩下的差距在点差和滑点建模。MT4回测用的是经纪商固定的点差表,MT5我用了真实tick但没开滑点模拟。后来在MT5的策略测试器里勾选“随机延迟”和“滑点”,夏普落到1.48,但这个数字反而更接近我实盘的表现——MT4那个1.76本来就是虚高的。
所以现在我的做法是:
  • MT4的老EA不直接迁,先写一个适配层,把订单和指标接口抽象出来
  • 迁移后必须用真实tick+滑点回测,别信默认点差
  • 夏普下降先查STOPS_LEVEL和句柄,再查数据精度
整套折腾下来大概花了我两个周末,但至少现在MT5上的回测和实盘偏差能控制在15%以内。
你们迁MT5的时候有没有遇到过止盈挂不上的情况?还是说直接重写成MQL5原生代码更省心?

补充一句:后来我把iATR的周期参数按MT5的tick精度重新调了一遍,夏普才慢慢爬回来——所以别急着换策略,先把指标计算的差异对齐再说。
0 回复 众裁0 复制
#1
leo9942
leo9942 #2· 2026-9-18 15:56:03
2楼
你提到MT5对STOPS_LEVEL有最小限制导致止盈单被拒,这点我特别有共鸣。我想追问下:你加SymbolInfoInteger动态校验后,是直接把止损距离往上取整到broker要求的最小值,还是干脆改成市价平仓?我手上这套EA也是35点固定止损,迁MT5后回测老出现挂单被拒,不确定哪种改法对回测夏普影响更小。
赞 回复 众裁0 复制
2026-9-18 15:56:03 #2
MeadowSong
MeadowSong #3· 2026-9-18 16:18:03
3楼
你提到止损往上取整还是改市价平仓,我遇到的情况是取整到STOPS_LEVEL更好,但35点固定止损在部分broker会被卡,我后来改成动态距离,夏普才慢慢回来。😅
赞 回复 众裁0 复制
2026-9-18 16:18:03 #3
ben1753
ben1753 #4· 2026-9-18 16:39:04
4楼
你那句“止盈止损挂单经常被拒”真是戳到我了,iATR动态仓位配固定35点止损在MT5确实容易踩STOPS_LEVEL。我自己也把iMA句柄改成CopyBuffer取数组后夏普才稳点。
赞 回复 众裁0 复制
2026-9-18 16:39:04 #4
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 信号源历史最大回撤到底该怎么看才算合格? 下一帖 → 黄金点差突然拉大那几秒,你靠什么工具判断是流动性真空还是平台动手脚