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

Python API对接MT5下单报错'Unsupported Filling Mode'求助

问题:MT5 Python提交订单报错「Unsupported Filling Mode」,如何转换成交模式类型?

我在开发Python程序,尝试向Alpari经纪商的Meta Trader 5发送订单时,出现如下错误:

Unsupported Filling Mode

使用的代码如下:

# Import the libraries
import MetaTrader5 as mt5
from datetime import datetime
 
# Create the bound between MT5 and Python
mt5.initialize()
 
# Place buy order

# Initialization value
symbol = "EURUSD"
lot = 0.01
 
# Choose the deviation
deviation = 10

# Find the filling mode of symbol
filling_type = mt5.symbol_info(symbol).filling_mode
 
# Create dictionary request
request = {
     "action": mt5.TRADE_ACTION_DEAL,
     "symbol": symbol,
     "volume": lot,
     "type": mt5.ORDER_TYPE_SELL,
     "price": mt5.symbol_info_tick(symbol).bid,
     "deviation": deviation,
     "type_filling": filling_type,
     "type_time": mt5.ORDER_TIME_GTC
}
 
mt5.order_check(request)

执行结果:

OrderCheckResult(retcode=10030, balance=0.0, equity=0.0, profit=0.0,
 margin=0.0, margin_free=0.0, margin_level=0.0, comment='Unsupported
 filling mode', request=TradeRequest(action=1, magic=0, order=0,
 symbol='EURUSD', volume=0.01, price=1.0793, stoplimit=0.0, sl=0.0,
 tp=0.0, deviation=10, type=1, type_filling=1, type_time=0,
 expiration=0, comment='', position=0, position_by=0))

恳请帮忙解决:如何将SYMBOL_FILLING_MODE转换为ENUM_ORDER_TYPE_FILLING值?


解决方法

问题根源在于:mt5.symbol_info(symbol).filling_mode返回的是品种本身支持的成交模式(SYMBOL_FILLING_MODE),但订单请求里的type_filling字段需要的是经纪商允许的订单成交模式(ENUM_ORDER_TYPE_FILLING),两者不能直接复用,需要按规则映射。

1. 先确认品种支持的成交模式

先打印出当前品种的成交模式数值,以及MT5定义的相关常量,明确对应关系:

symbol = "EURUSD"
symbol_info = mt5.symbol_info(symbol)
print(f"品种支持的成交模式数值: {symbol_info.filling_mode}")
# 打印MT5内置的成交模式常量
print(f"SYMBOL_FILLING_RETURN: {mt5.SYMBOL_FILLING_RETURN}")
print(f"SYMBOL_FILLING_IOC: {mt5.SYMBOL_FILLING_IOC}")
print(f"SYMBOL_FILLING_FOK: {mt5.SYMBOL_FILLING_FOK}")

2. 映射为订单允许的成交模式

大部分经纪商的映射规则是直接对应,但Alpari可能有特殊限制,你可以直接尝试以下两种方式:

方式一:按常量直接映射

如果品种支持的是SYMBOL_FILLING_RETURN(数值0),对应订单用mt5.ORDER_FILLING_RETURN;支持SYMBOL_FILLING_IOC(数值1)则对应mt5.ORDER_FILLING_IOC,以此类推。修改代码中的请求字典:

request = {
     "action": mt5.TRADE_ACTION_DEAL,
     "symbol": symbol,
     "volume": lot,
     "type": mt5.ORDER_TYPE_SELL,
     "price": mt5.symbol_info_tick(symbol).bid,
     "deviation": deviation,
     # 替换为订单成交模式常量,Alpari常用ORDER_FILLING_RETURN
     "type_filling": mt5.ORDER_FILLING_RETURN,
     "type_time": mt5.ORDER_TIME_GTC
}

方式二:逐个测试验证

如果不知道具体映射关系,可以依次测试MT5提供的三个订单成交模式常量,用mt5.order_check()验证哪个能通过:

# 定义所有订单成交模式常量
filling_options = [mt5.ORDER_FILLING_RETURN, mt5.ORDER_FILLING_IOC, mt5.ORDER_FILLING_FOK]

for option in filling_options:
    request["type_filling"] = option
    result = mt5.order_check(request)
    print(f"测试模式{option}: {result.comment}")

3. 辅助验证:查看MT5终端品种规格

打开MT5终端,右键点击EURUSD→「规格」→「交易」标签,里面会显示该品种允许的成交模式,直接对应到Python中的常量即可。


内容的提问来源于stack exchange,提问作者M.Rafi Biglari

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:13:12