简体   繁体   中英

sending order to open a position via MetaTrader5 python module and nothing happens

I followed Metatrader5 python documentation and this answer in stack overflow

I try to open a sell position:

 import MetaTrader5 as mt5 ea_magic_number = 9986989 # if you want to give every bot a unique identifier def get_info(symbol): '''https://www.mql5.com/en/docs/integration/python_metatrader5/mt5symbolinfo_py ''' # get symbol properties info=mt5.symbol_info(symbol) return info def open_trade(action, symbol, lot, sl_points, tp_points, deviation): '''https://www.mql5.com/en/docs/integration/python_metatrader5/mt5ordersend_py ''' # prepare the buy request structure symbol_info = get_info(symbol) if action == 'buy': trade_type = mt5.ORDER_TYPE_BUY price = mt5.symbol_info_tick(symbol).ask elif action =='sell': trade_type = mt5.ORDER_TYPE_SELL price = mt5.symbol_info_tick(symbol).bid point = mt5.symbol_info(symbol).point buy_request = { "action": mt5.TRADE_ACTION_DEAL, "symbol": symbol, "volume": lot, "type": trade_type, "price": price, "sl": price - sl_points * point, "tp": price + tp_points * point, "deviation": deviation, "magic": ea_magic_number, "comment": "sent by python", "type_time": mt5.ORDER_TIME_GTC, # good till cancelled "type_filling": mt5.ORDER_FILLING_RETURN, } # send a trading request result = mt5.order_send(buy_request) return result, buy_request def close_trade(action, buy_request, result, deviation): '''https://www.mql5.com/en/docs/integration/python_metatrader5/mt5ordersend_py ''' # create a close request symbol = buy_request['symbol'] if action == 'buy': trade_type = mt5.ORDER_TYPE_BUY price = mt5.symbol_info_tick(symbol).ask elif action =='sell': trade_type = mt5.ORDER_TYPE_SELL price = mt5.symbol_info_tick(symbol).bid position_id=result.order lot = buy_request['volume'] close_request={ "action": mt5.TRADE_ACTION_DEAL, "symbol": symbol, "volume": lot, "type": mt5.ORDER_TYPE_SELL, "position": position_id, "price": price, "deviation": deviation, "magic": ea_magic_number, "comment": "python script close", "type_time": mt5.ORDER_TIME_GTC, # good till cancelled "type_filling": mt5.ORDER_FILLING_RETURN, } # send a close request result=mt5.order_send(close_request) # This is how I would execute the order result, buy_request = open_trade('buy', 'USDJPY', 0.1, 50, 50, 10) close_trade('sell', buy_request, result, 10)

Nothing happens and there is no reaction in applications terminal. I also check Trade and History section in Metatrader5 to find some related information but I find out nothing.

how can I monitor the logs in Metatrader5 to debug the code and resolve the problem?

In MetaTrader algo trading must be ON in order to make a buy/sell position.

在此处输入图像描述

在此处输入图像描述

Just for people that reach this topic and for whom the Algo trading button was ON and nothing was happening when sending orders.

In my case, it was because I was setting the 'volume' of the request as an integer, and it must be a float. No error was being shown, no sign of life, order_send(...) returned None and that was it. Just cast'ed the incoming value to float and it worked.

This is not the case of the question author, but I hope it helps some venturing soul in the future.

I have changed:

"type_filling": mt5.ORDER_FILLING_RETURN

to:

"type_filling": mt5.ORDER_FILLING_IOC

and then It works for me.

I'm using python version 3.10

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM