首页 > 博客 > MT5 错误代码详解:10027、10030、10016 等

MT5MQL5错误代码故障排查EA日志

MT5 错误代码详解:10027、10030、10016 等

发布日: 2026-05-18阅读时间:约 8 分钟
⏱ 本文为发布之日的信息。EA的业绩数值(PF、DD、年化)会随实盘运行与重新验证而变动,最新数值请在各EA页面确认。 查看最新EA业绩 →

MT5 / MQL5 错误代码:返回代码 10004–10031 与运行时错误

MT5 会报告两类错误:5 位数的交易返回代码(如 10027 自动交易被禁用、10030 不支持的成交方式、10016 无效止损、10019 资金不足),以及由 GetLastError() 返回的 4 位数运行时错误(如 4401、4756)——下表列出了每个代码对应的解决方法。

速查表:代码 → 含义 → 解决方法

编号与常量名称均以 MQL5 官方参考文档为准(交易服务器返回代码和运行时错误)。

交易返回代码(MqlTradeResult.retcode)

代码常量含义解决方法详情
10004TRADE_RETCODE_REQUOTE重新报价——成交前价格已变动放宽允许的偏差(deviation),或按最新价格重新发送Off quotes 与重新报价
10006TRADE_RETCODE_REJECT请求被拒绝通常由点差过大或行情过快引起;让 EA 在之后的 Tick 重试即可—
10013TRADE_RETCODE_INVALID无效请求请求中的某个字段(操作、订单类型、交易品种)有误;发送前先用 OrderCheck() 校验—
10014TRADE_RETCODE_INVALID_VOLUME请求中的交易量无效将手数按交易品种的最小值、最大值和步长(SYMBOL_VOLUME_MIN / MAX / STEP)取整—
10015TRADE_RETCODE_INVALID_PRICE请求中的价格无效按交易品种的小数位数和最小报价单位规范化价格;确认挂单位于市价的正确一侧—
10016TRADE_RETCODE_INVALID_STOPS请求中的止损止盈无效让 SL/TP 的距离大于券商的止损级别,并位于价格的正确一侧Invalid stops
10017TRADE_RETCODE_TRADE_DISABLED交易被禁用在规格中查看该品种的交易模式,并确认是用交易密码(而非投资者密码)登录;否则请咨询券商—
10018TRADE_RETCODE_MARKET_CLOSED市场已关闭等待该品种的交易时段开启Market closed
10019TRADE_RETCODE_NO_MONEY资金不足,无法完成请求减小手数、平掉部分持仓或入金Not enough money
10021TRADE_RETCODE_PRICE_OFF没有可用于处理请求的报价检查连接以及该品种当前是否有报价,然后重试Off quotes 与重新报价
10026TRADE_RETCODE_SERVER_DISABLES_AT自动交易被服务器禁用券商禁止了该账户的算法交易;请联系券商自动交易被禁用
10027TRADE_RETCODE_CLIENT_DISABLES_AT自动交易被客户端禁用打开 Algo Trading 按钮,并在选项和 EA 属性中允许算法交易自动交易被禁用
10030TRADE_RETCODE_INVALID_FILL订单成交方式无效将 type_filling 设为该品种支持的方式(FOK / IOC / Return)Unsupported filling mode
10031TRADE_RETCODE_CONNECTION未与交易服务器建立连接检查连接状态栏、VPS 网络以及券商的服务器状态—

运行时错误(GetLastError())

代码常量含义解决方法详情
4001ERR_INTERNAL_ERROR意外的内部错误并不对应某一个具体原因:在要检查的函数之前调用 ResetLastError(),若持续出现则重启或更新终端—
4401ERR_HISTORY_NOT_FOUND未找到请求的历史记录读取之前,先用包含该成交或订单的时间段调用 HistorySelect()—
4752ERR_TRADE_DISABLED禁止 Expert Advisor 交易打开 Algo Trading,并在 EA 属性中勾选「Allow Algo Trading」自动交易被禁用
4756ERR_TRADE_SEND_FAILED交易请求发送失败OrderSend() 返回了 false;请读取 MqlTradeResult.retcode 了解真正原因(常见为 10027、10030 或 10016)—

从 MT4 转过来? 对于同样的情况,MT4 使用的是另一套编号,大多为 3 位数(134、130、132、136、4109 ……)。下文各小节都列出了取自 MQL4 官方参考文档的 MT4 对应代码。请注意,在 MT5 中 4109 表示 ERR_CHART_WRONG_PROPERTY(图表错误),而不是交易错误。

📧 免费邮件课程(共 8 封)+ 订阅者专享 MT5 指标 13 款合集

订阅后会立即收到订阅者专享合集的下载链接,内含本站 13 款 MT5 指标的已编译文件(.ex5)、源代码和使用指南。随后通过共 8 封邮件介绍外汇自动交易的本质、回测的正确解读方法和经纪商选择技巧(前 5 天每天 1 封,之后在订阅第 7、14、30 天各 1 封)。MQL5 Market 版(首发价,随销量分阶段涨价)涨价前也会通知您。在本站,只要拥有合作经纪商的真实账户,EA 即可免费使用。

※ 严格保护隐私。可随时取消订阅。

如何查看Expert日志标签页

点击 MT5 底部的 Expert 标签页,即可按时间顺序查看所有 EA 的活动日志。

显示格式:
2026.05.18 10:00:01.234  GOLD VIPER XAUUSD,M30: [ERROR] 10016

时间        EA名称         交易品种  时间框架  消息内容

出现错误时,请根据代码编号在上表中查找原因。


常见错误代码及处理方法

10019 — 资金不足(TRADE_RETCODE_NO_MONEY)

MT4 对应代码: 134 ERR_NOT_ENOUGH_MONEY。ERR_NO_MONEY 是对同一情况广泛使用的简称。

示例消息: "Order failed: not enough money"
         "No money"

原因: 保证金不足,EA 无法开立新仓位。

处理方法:

  1. 在 MT5 的交易标签页中确认当前的保证金维持率
  2. 若维持率接近或低于 100%,考虑追加入金
  3. 调低 EA 的 RiskPercent 设置以减小仓位规模
  4. 手动平掉部分持仓,释放保证金

📖 为什么余额看起来充足却仍然出现,以及用于预防的 MQL5 代码,请参阅 MT5 的 Not enough money — 原因与解决方法。


10027 — 自动交易被客户端禁用(TRADE_RETCODE_CLIENT_DISABLES_AT)

相关的 MT5 运行时错误: 4752 ERR_TRADE_DISABLED。MT4 对应代码: 4109 ERR_TRADE_NOT_ALLOWED。

示例消息: "AutoTrading disabled by client"
         "Trade is not allowed"

原因: MT5 的自动交易功能已关闭。

处理方法:

  1. 点击 MT5 工具栏上的 Algo Trading 按钮将其开启(按钮应变为绿色)
  2. 进入工具 → 选项 → Expert Advisors → 启用 Allow Algo Trading,然后重启 MT5

此错误常见于 VPS 重启后 MT5 自动启动时。

📖 完整的权限链(选项设置、各图表的 Allow Algo Trading、投资者密码,以及 10027 与 10026 的区别),请参阅 MT5 自动交易被禁用 — 彻底解决。


10018 — 市场已关闭(TRADE_RETCODE_MARKET_CLOSED)

MT4 对应代码: 132 ERR_MARKET_CLOSED。

示例消息: "Market closed"

原因: EA 在非交易时间(周末或节假日)尝试入场。

处理方法: 无需处理。周末市场处于关闭状态,在此期间任何入场尝试都会出现此错误;市场重新开盘后 EA 会自动恢复。

📖 工作日也出现?交易品种的交易时段、服务器时间和仅平仓模式,详见 Market closed(10018/132)— 原因与解决方法。


10016 — 无效止损(TRADE_RETCODE_INVALID_STOPS)

MT4 对应代码: 130 ERR_INVALID_STOPS。

示例消息: "Invalid stops"

原因: SL(止损)或 TP(止盈)的数值违反了券商的最小止损级别要求。

处理方法:

  1. 确认券商的止损级别(最小 SL 距离):在 MT5 中右键点击交易品种 → 规格 → 查看止损级别一栏
  2. 确保 EA 的 SL 距离大于止损级别
  3. 此错误最常见于 ATR 值极小的低波动时段

📖 止损级别的实际运作方式、10016 与 130 的区别,以及一劳永逸地避免它的 MQL5 代码,请参阅 Invalid stops(10016/130)— 彻底解决。


10021 — 无报价(TRADE_RETCODE_PRICE_OFF)

MT4 对应代码: 136 ERR_OFF_QUOTES。

示例消息: "Off quotes"

原因: 未能从券商服务器接收到报价,属于连接问题。

处理方法:

  1. 在 MT5 屏幕底部的状态栏中确认连接状态
  2. 若已断开,请重启 MT5
  3. 在券商的服务器状态页面查看是否有故障
  4. 检查 VPS 的网络连接

📖 与重新报价(10004/138)的区别、偏差(deviation)调整以及重试的实现方式,请参阅 Off quotes 与重新报价(10021/10004)— 彻底解决。

📖 刚更换券商就出现 Unsupported filling mode(10030)?那是另一个问题——请参阅 Unsupported filling mode(10030)— 解决方法。


10012 — 请求超时(TRADE_RETCODE_TIMEOUT)

MT4 对应代码: 128 ERR_TRADE_TIMEOUT。

示例消息: "Request canceled by timeout"

原因: 由于服务器拥堵或网络延迟,订单超时。

处理方法:

  1. 此错误最常见于重大新闻公布后服务器负载较高的时段
  2. EA 通常会在下一个 Tick 重试——无需处理
  3. 若频繁发生,请检查 VPS 的网络环境或考虑更换券商

10006 — 请求被拒绝(TRADE_RETCODE_REJECT)

示例消息: "Request rejected"

原因: 订单被券商拒绝——通常是因为点差超出限制或价格变动过快。

处理方法:

  1. 检查 MaxSpreadPoints 设置;点差大幅扩大时此错误较为常见
  2. 在新闻公布期间及公布后不久,这属于预期行为——可以忽略
  3. 若频繁发生,可适当调高 MaxSpreadPoints 的值

"Margin level too low"

示例消息: "Margin level too low. Skip signal."

原因: EA 的 UseMarginCheck = true 设置检测到保证金维持率已低于 MinMarginLevel(如 200%),因此自动阻止新的入场。

处理方法:

  1. 这是正常的保护机制——并非错误
  2. 保证金维持率恢复后,入场将自动恢复
  3. 根本解决方案:追加入金或调低 RiskPercent

"No signal on this bar" 或 "Wait for next bar"

这些不是错误,而是调试日志。

"No signal. ATR=1245, EMA(50)=1998.23"

EA 会在每根 K 线上评估图表,并在未满足入场条件时输出日志。这属于正常运行。


错误优先级分类

优先级错误处理方式
紧急10019 资金不足(MT4:134)立即入金或减小手数
紧急10027 自动交易被禁用 / 4752(MT4:4109)开启 Algo Trading
注意10016 无效止损(MT4:130)重新检查 SL 设置
注意10030 成交方式无效设置该品种支持的成交方式
注意10021 无报价(MT4:136)反复出现检查连接状况
正常10018 市场已关闭(MT4:132)仅限周末无需处理
正常10012 超时(MT4:128)偶发无需处理
正常Margin level too low保证金偏低时的正常保护动作

高效查看Expert日志的方法

筛选日志

在 Expert 标签页内右键点击并选择过滤器,即可仅显示特定 EA 或特定错误类型的日志。

日志文件保存位置

MT5 的日志文件保存在以下路径:

C:\Users\[用户名]\AppData\Roaming\MetaQuotes\Terminal\[ID]\MQL5\Logs\

文件会按日期自动生成。排查错误时,请打开该文件夹。


总结

EA 的绝大多数错误可归为以下四类:

  1. 保证金不足(10019) — 追加入金或减小手数
  2. 自动交易已关闭(10027 / 4752) — 点击 Algo Trading 按钮将其开启
  3. 连接问题(10021 / 10031) — 重启 MT5 或检查 VPS 网络
  4. 正常行为 — 无需处理(周末休市、回避点差扩大等)

建议养成每天查看 Expert 标签页的习惯,以便在紧急错误(10019 和 10027)造成问题之前及时发现。


常见问题(FAQ)

Q:在哪里可以查询错误代码?

MQL5 官方参考文档列出了所有代码:10004–10046 范围见交易服务器返回代码,4xxx 范围见运行时错误。也可以通过 MT5 的内置帮助(按 F1 键)进行搜索。

Q:返回代码(retcode)和 GetLastError() 有什么区别?

返回代码(10004–10046)是交易服务器对订单的答复,保存在 MqlTradeResult.retcode 中。GetLastError() 返回的是 MQL5 程序自身的运行时错误(4xxx 和 5xxx)。当 OrderSend() 失败时,往往两者都会出现:GetLastError() 返回 4756,同时还有一个说明实际原因的返回代码。

Q:错误频繁出现时,是否应该停止 EA?

如果 10018(市场已关闭)或 10012(超时)只是偶尔出现,无需停止 EA。但若 10019(资金不足)反复出现,请暂停 EA,检查保证金状况,问题解决后再重新启动。

Q:出现「Invalid account」错误。

MT5 的登录信息(服务器名、登录 ID 或密码)可能有误。请通过文件 → 开设账户重新登录。

Q:没有显示任何错误,但 EA 不入场。

如果既没有错误也没有入场,说明 EA 只是在等待入场条件满足——这完全正常。EA 并非在每根 K 线都会入场,只有在所有条件同时满足时才会入场。请耐心等待一段时间。H1 的 EA 每天入场 1 至 3 次属于正常运行。

📧 免费邮件课程(共 8 封)+ 订阅者专享 MT5 指标 13 款合集

订阅后会立即收到订阅者专享合集的下载链接,内含本站 13 款 MT5 指标的已编译文件(.ex5)、源代码和使用指南。随后通过共 8 封邮件介绍外汇自动交易的本质、回测的正确解读方法和经纪商选择技巧(前 5 天每天 1 封,之后在订阅第 7、14、30 天各 1 封)。MQL5 Market 版(首发价,随销量分阶段涨价)涨价前也会通知您。在本站,只要拥有合作经纪商的真实账户,EA 即可免费使用。

※ 严格保护隐私。可随时取消订阅。

对EA或外汇有疑问吗?

可以在Nattzy交易论坛发帖提问(免费注册)。不限于本文内容,EA设置、经纪商选择等问题也欢迎。

在Nattzy提问 ↗

评论与提问