MT5和MT4的EA代码能通用吗,求大佬指点

新帖
登录发帖
Exness 推荐平台

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

FSA(塞舌尔)/FCA(英国) / CySEC(塞浦路斯) · 最低入金 $130
半糖去冰同学
半糖去冰同学 楼主 昨天 11:21 浏览 74 回复 3 阅读 1 分钟
新汇友(注册会员) 等级 Lv.1 主题 3 帖数 7 积分 922 汇币 731
1楼
前两天把用了好几年的MT4 EA往MT5上搬,结果直接懵了。系统是Win11 23H2,MT4 build 1420,MT5 build 4260,同一个EA源码在MT4里编译正常,换到MT5的MetaEditor里一编译就炸。
最典型的是OrderSend那套参数,MT4里七个参数写得顺顺的,MT5里结构完全变了,提示'OrderSend' - wrong parameters count,还有一堆关于MqlTradeRequest的报错。我试过改后缀、复制粘贴、甚至把MT4的.ex4文件直接丢进MT5的Experts目录,结果MT5根本不认,加载列表里都看不到。
后来查了下好像MT4用的是MQL4,MT5是MQL5,语法虽然像但底层交易函数和订单模型不是一回事,MT4那套OrderClose、OrderModify在MT5里得换成OrderSend加trade request结构体。我现在卡在持仓遍历这块,MT4的OrderSelect循环逻辑搬到MT5里老是取不到单子,PositionGetTicket返回0,不知道是不是magic number过滤写错了。
有没有从MT4迁到MT5踩过同样坑的朋友?你们当时是重写还是用兼容库过渡的?求指点一下思路🙏
0 回复 众裁0 复制
#1
阿斌哥
阿斌哥 #2· 昨天 11:52
2楼
MT4的OrderSend在MT5里根本对不上,那套request结构体得重写。我XAU的EA迁过来时PositionGetTicket也返回0,后来发现是循环里没刷PositionGetSymbol
赞 回复 众裁0 复制
昨天 11:52 #2
StrategyDeploy12
StrategyDeploy12 #3· 昨天 14:00
3楼
PositionGetTicket返回0不一定是magic过滤的问题,先确认PositionGetSymbol之后有没有调PositionSelectByTicket,我当初也踩过。MT4和MT5订单模型底层差异太大,直接搬基本没戏,建议重写交易层,判断逻辑能复用。兼容库过渡会留坑,后期维护更麻烦,我之前试过一段时间还是推倒重来了。
赞 回复 众裁0 复制
昨天 14:00 #3
michael38
michael38 #4· 昨天 14:00
4楼
除了上面说的刷PositionSelect,持仓遍历那块我建议直接用PositionsTotal配PositionGetTicket按索引走,MT4那种OrderSelect循环硬搬过来很容易漏单。我XAU的EA迁MT5就是重写的,兼容库过渡后面对不上账更麻烦。
赞 回复 众裁0 复制
昨天 14:00 #4
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 EA异常处理与日志记录这几个细节很多人忽略 下一帖 → 波动率通道指标的代码实现思路