EA运行报错排查实录这几个细节很多人忽略

新帖
登录发帖
XM 推荐平台

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

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
pearl51
pearl51 楼主 2 小时前 浏览 7 回复 0 阅读 1 分钟
Lv.1 新手汇友 等级 Lv.1 主题 3 帖数 12 积分 2042 汇币 1899
1楼
有个汇友昨天发我一段日志,说他的EA挂在MT5上跑欧美,开了三个图表,结果只有第一个图表正常下单,后面两个死活不动。他以为是平台问题,换了VPS重装了两遍还是老样子。我让他把Journal和Experts两个标签页的日志都截图发我,一看就明白了——Error 4109: trade is not allowed,典型的自动交易权限没打开。
这个问题其实特别常见,但很多人排查方向一开始就错了,先去怀疑策略逻辑或者VPS网络,白白折腾半天。下面我把整个排查流程梳理一下,都是我自己踩过的坑。
首先第一步永远是看日志,不是看你自己print出来的东西,而是看MT5原生报错。
  • Journal标签页看平台级错误,比如连接、登录、权限;
  • Experts标签页看EA自身输出和交易服务器返回码;
  • 如果用了DLL或者外部信号,还要看是否被Allow DLL imports拦住了。
我见过一个案例,EA里调用了WebRequest去拉数据,结果终端设置里没勾选允许URL,报错代码是4060,排查了一整天才发现是权限问题。
第二个容易忽略的点是品种后缀。很多经纪商的欧美是EURUSD.a、EURUSDpro这种带后缀的,你EA里硬编码Symbol()返回的是当前图表品种没错,但如果用SymbolInfoDouble去查点差或者用OrderSend传了固定字符串"EURUSD",那在带后缀的账户上就会报Error 4301: unknown symbol。解决办法是用Symbol()动态获取,或者用SymbolInfoString配合后缀变量。我自己是写了个函数,遍历Market Watch找匹配前缀的品种名。
第三个坑是订单填充模式。MT5的OrderSend里有个type_filling参数,不同经纪商支持的模式不一样。有的只支持FOK,有的只支持IOC,你如果写死ORDER_FILLING_FOK,在某些平台上就会报Error 10030: unsupported filling mode。我的做法是先调用SymbolInfoInteger(SYMBOL_FILLING_MODE)拿到支持的位掩码,然后按优先级选一个。
还有一个细节是止损止盈的最小距离。黄金和镑美这种波动大的品种,有些平台要求SL/TP离现价至少多少个点,你设太近会直接报Error 130: invalid stops。这个值可以用SymbolInfoInteger(SYMBOL_TRADE_STOPS_LEVEL)拿到,然后在下单前做一次校验。
最后提醒一句,排查EA报错一定要用策略测试器的可视化模式先跑一遍,很多权限和品种问题在回测里就能暴露出来,比实盘试错成本低得多。你们平时遇到最头疼的报错代码是哪个?评论区贴出来一起看看。
0 回复 众裁0 复制
#1
💬
暂无回复,来抢沙发吧!
THE END
本帖内容仅供学习交流,不构成任何投资建议。外汇交易存在高风险,请谨慎参与。
← 上一帖 API行情源免费与付费档对比 下一帖 → EA在数据行情里疯狂开平仓怎么办,求大佬指点