You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用MetaTrader5下单失败:返回None且曾报10013错误

问题分析与解决方案

先排查初始化有效性

你的代码仅调用mt5.initialize()但未校验返回状态,若初始化失败,后续所有操作都会返回None。先补充初始化检查:

if not mt5.initialize():
    print(f"初始化失败,错误码: {mt5.last_error()}")
    quit()

错误码10013的核心原因

10013代表无效交易量,你使用的0.15手可能不符合品种NQ100_m_i的交易规则,先确认该品种的最小交易量、交易量步长:

symbol_info = mt5.symbol_info("NQ100_m_i")
if symbol_info is None:
    print(f"未找到品种NQ100_m_i,错误码: {mt5.last_error()}")
else:
    print(f"最小手数: {symbol_info.volume_min}, 步长: {symbol_info.volume_step}")

比如若品种最小手数为0.2、步长0.1,那0.15就不符合要求,必须用0.2、0.3这类符合步长倍数的数值。

订单返回None的其他排查点

  • MT5端权限设置:确保MT5客户端开启自动交易权限(工具→选项→EA交易,勾选「允许自动交易」),且未阻止Python脚本的连接请求。
  • tick数据有效性:symbol_info_tick("NQ100_m_i")可能返回None,先校验tick获取状态:
tick = mt5.symbol_info_tick("NQ100_m_i")
if tick is None:
    print(f"获取tick失败,错误码: {mt5.last_error()}")
else:
    price = tick.bid
  • 成交模式匹配:不同品种支持的成交模式不同,FOK(立即全成否则取消)可能不适用于当前品种,建议先使用品种默认成交模式:
type_filling = symbol_info.filling_mode

替换订单中的type_filling参数。

完整调试代码

整合所有校验逻辑,便于精准定位问题:

import MetaTrader5 as mt5

# 初始化校验
if not mt5.initialize():
    print(f"初始化失败,错误码: {mt5.last_error()}")
    mt5.shutdown()
    quit()

# 品种信息校验
symbol = "NQ100_m_i"
symbol_info = mt5.symbol_info(symbol)
if symbol_info is None:
    print(f"品种{symbol}不存在,错误码: {mt5.last_error()}")
    mt5.shutdown()
    quit()
if not symbol_info.visible:
    print(f"品种{symbol}不可见,尝试添加到市场观察")
    if not mt5.symbol_select(symbol, True):
        print(f"添加失败,错误码: {mt5.last_error()}")
        mt5.shutdown()
        quit()

# 打印品种交易参数
print(f"最小手数: {symbol_info.volume_min}, 最大手数: {symbol_info.volume_max}, 步长: {symbol_info.volume_step}")
print(f"默认成交模式: {symbol_info.filling_mode}")

# Tick数据校验
tick = mt5.symbol_info_tick(symbol)
if tick is None:
    print(f"获取tick失败,错误码: {mt5.last_error()}")
    mt5.shutdown()
    quit()
price = tick.bid
print(f"当前买价: {price}")

# 构造合规订单
requester = {
    "action": mt5.TRADE_ACTION_DEAL,
    "symbol": symbol,
    "volume": round(0.2, 2),  # 替换为符合品种步长的手数
    "type": mt5.ORDER_TYPE_BUY,
    "price": price,
    "sl": price - 50,  # 示例止损,替换为合理数值
    "tp": price + 50,  # 示例止盈,替换为合理数值
    "deviation": 30,
    "magic": 234000,
    "comment": 'test_order',
    "type_time": mt5.ORDER_TIME_GTC,
    "type_filling": symbol_info.filling_mode,  # 使用品种默认成交模式
}

# 发送订单并校验结果
result = mt5.order_send(requester)
if result is None:
    print(f"订单发送无返回,错误码: {mt5.last_error()}")
else:
    print(f"订单结果: {result}")
    if result.retcode != mt5.TRADE_RETCODE_DONE:
        print(f"订单未执行,返回码: {result.retcode}, 错误信息: {mt5.last_error()}")

# 关闭连接
mt5.shutdown()

额外注意事项

  • 确保MT5客户端处于登录状态,且交易账号拥有对应品种的交易权限。
  • 部分品种不允许止损/止盈为0,建议设置合理的止损止盈数值。
  • 模拟账户需确认交易规则与实盘一致,避免因规则差异导致订单失败。

内容的提问来源于stack exchange,提问作者mahdi abbasi nourabadi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 17:13:38