MT4 EA报错130怎么排查?从止损距离到动态限制的四步法
用原创浅蓝色流程图逐步排查MT4 EA的ERR_INVALID_STOPS:日志、报价精度、MODE_STOPLEVEL和动态限制,避免以放宽止损掩盖风险。
作者:托马斯|EA与MT4实务|2026年10月20日
EA已经挂到图表、自动交易也已开启,却在提交订单时出现“130”,通常会让人误以为程序完全坏了。MQL4参考文档将130列为ERR_INVALID_STOPS:请求中的止损止盈、挂单价格或其规范化方式未被交易服务器接受。它是定位线索,不是允许盲目放宽止损的理由。本文用四步排查法说明该看哪些记录。
第一步:先确定是哪一次请求失败
打开MT4终端或程序的相关日志,记录出错的服务器时间、品种、订单方向、操作是OrderSend还是OrderModify,以及返回的错误码。若日志只有“下单失败”四个字,先让EA在不输出密码等敏感数据的前提下记录请求价格、止损、止盈和返回值。先区分开仓失败、修改止损失败、挂单失败;三者检查的价格关系不同。
不要在实时账户里通过不断重复发送同一失败请求来“碰碰运气”。重复尝试可能形成额外负载,也可能在行情变化后突然成功而产生意外仓位。先在模拟环境复现,并保留参数版本和当时的平台报价。
第二步:核对Bid、Ask、Point和Digits
MQL4的MarketInfo可以读取当前品种Bid、Ask、Point和Digits。Point代表该报价的最小显示单位之一,Digits表示小数位数;“10点”等于多少美元要根据该品种实际Point计算,不能把不同券商的黄金代码和精度混为一谈。价格传入前还要按相应位数规范化。
举例仅作数学示意:若某模拟品种Point为0.01、最小距离为50个point,计算出的距离是0.50报价单位;换成Point为0.001的品种则为0.05。数字不代表任何真实平台今天的合约规则。查看日志时同时保存买卖价,避免用卖价检查本应参考买价的一侧,或者反过来。
第三步:检查MODE_STOPLEVEL与订单类型
官方OrderSend文档说明,止损与止盈不能离市价过近;挂单的预定开仓价也不能离当前市场过近。可用MarketInfo(Symbol(),MODE_STOPLEVEL)查询公开的最小距离,单位为point。再根据订单是买入、卖出或哪一种挂单,分别核对价格方向、距离和规范化,而不是把一个固定偏移量套在所有订单上。

上图是原创流程示意,没有真实报价或账户资料。最小距离只是服务器接受订单的技术边界,不等于策略上合理的止损距离。若为了绕过130而把止损移远,原先计划的单笔风险就会变大;应先重新计算仓位,必要时放弃该笔交易。
第四步:返回0也不能断言没有限制
MQL4官方对MODE_STOPLEVEL的说明特别提醒:返回0可能意味着没有固定最小距离,也可能是服务器采用终端无法直接表示的动态限制。后一种情况仍可能返回130。因此“查到0就把止损紧贴价格”并不成立。行情剧烈变化时,报价更新、点差变化和服务端规则也可能使先前计算过的距离失效。
若代码算式与当时日志相符,仍遇到130,保留失败时间、品种、订单参数和平台版本,查经纪商的品种规格与订单限制,并向平台技术支持核实。不要凭别家平台的Point和StopLevel推断本账户规则,更不要通过删除止损来掩盖真正的失败原因。
修复后的验证顺序
先在模拟账户运行最小可复现案例:用同一品种记录四个报价参数与StopLevel,发送单次测试请求,检查服务器返回与订单状态。再测试价格快速变化或不同交易时段的行为。确认程序有失败后的停止或冷却机制,且不会在重试时重复开仓。最后核对风险预算、点差和可接受损失是否仍符合原计划。
错误130的排查重点是“请求为何被拒绝”,不是“怎样强行让它成交”。EA运行结果还受策略逻辑、网络和平台执行影响;任何修复都不保证盈利或避免损失。杠杆交易可能造成重大损失。