MT5 Python API 平仓不起作用

hog*_*oga 4 python metatrader5

我试图通过 Python 平掉 MT5 中的现有仓位,但 MT5 总是声称“不支持的填充模式”。
我尝试了所有可能的填充模式,但总是得到相同的结果。同样,如果我省略请求中的填充模式。我还尝试从符号信息中获取填充模式并在请求中使用它 - 但没有成功。这种情况发生在真实账户上。
这是我的函数,它采用现有仓位并发送该仓位的平仓请求:

async def ClosePosition(position):
   if (position.type == mt5.POSITION_TYPE_BUY):
       order_type = mt5.ORDER_TYPE_SELL
       price = mt5.symbol_info_tick(position.symbol).bid
   else:
       order_type = mt5.ORDER_TYPE_BUY
       price = mt5.symbol_info_tick(position.symbol).ask

   request = {
           "action": mt5.TRADE_ACTION_DEAL,
           "symbol": position.symbol,
           "volume": position.volume,
           "type": order_type,
           "position": position.ticket,
           "price": price,
           "deviation": 10,
           "magic": 0,
           "comment": "Closed by Python",
           "type_time": mt5.ORDER_TIME_GTC,
           "type_filling": mt5.ORDER_FILLING_RETURN
       }

   result = mt5.order_send(request)

Run Code Online (Sandbox Code Playgroud)

杂志上是这样说的:
Trades '#######': failed market buy 0.01 CHFJPY, close #109459760 sell 0.01 CHFJPY 116.807 [Unsupported filling mode]

任何帮助是极大的赞赏。

hog*_*oga 7

最终我发现SYMBOL_FILLING_MODE的值与ENUM_ORDER_TYPE_FILLING的值不匹配。当我将 SYMBOL_FILLING_MODE 转换为适当的 ENUM_ORDER_TYPE_FILLING 时,它可以工作。
因此,在我的示例中,使用 mt5.ORDER_FILLING_IOC 成功平仓。