order_check

检查是否有足够的资金执行所需的交易操作。检查结果以MqlTradeCheckResult结构返回。

order_check(

   request      // 请求结构

   );

参数

request

[in]  描述所需交易操作的MqlTradeRequest类型结构。所需的未命名参数。下面描述了填写请求和枚举内容的示例。

返回值

检查结果以MqlTradeCheckResult结构返回。回答中的request字段包含传递到order_check()的交易请求的结构。

注意

成功发送请求不代表所请求的交易操作就可成功执行。order_check函数类似于OrderCheck

TRADE_REQUEST_ACTIONS

ID 描述
TRADE_ACTION_DEAL 以指定参数(设置市价单)下现价交易订单。
TRADE_ACTION_PENDING 在指定条件下(挂单)下执行交易订单,
TRADE_ACTION_SLTP 更改持仓止损和止盈
TRADE_ACTION_MODIFY 更改之前所下交易订单的参数
TRADE_ACTION_REMOVE 删除之前所下的挂单
TRADE_ACTION_CLOSE_BY 反向平仓

ORDER_TYPE_FILLING

ID 描述
ORDER_FILLING_FOK 这个执行规则意味着一笔订单只能按照指定的交易量执行。如果金融产品的必要数额目前在市场上不能满足,则该订单将不会被执行。所需交易量可以由几个可用报价组成。
ORDER_FILLING_IOC 在订单中规定的交易量范围内,以市场最大交易量执行交易的协议。如果不能完全成交,则将执行可用交易量的订单,并取消其余交易量。
ORDER_FILLING_RETURN 这个规则只适用于市价单(ORDER_TYPE_BUY和 ORDER_TYPE_SELL)、limit和stop limit订单(ORDER_TYPE_BUY_LIMIT、ORDER_TYPE_SELL_LIMIT、 ORDER_TYPE_BUY_STOP_LIMIT和ORDER_TYPE_SELL_STOP_LIMIT)以及市价执行和交易所执行模式的交易品种。如果部分成交,则剩余交易量的订单不会被取消,等待进一步处理。 在激活ORDER_TYPE_BUY_STOP_LIMIT和ORDER_TYPE_SELL_STOP_LIMIT订单期间,将创建一个对应的限价单ORDER_TYPE_BUY_LIMIT/ORDER_TYPE_SELL_LIMIT,并使用ORDER_FILLING_RETURN类型。

ORDER_TYPE_TIME

ID 描述
ORDER_TIME_GTC 订单将一直保留在队列中,直到手动取消
ORDER_TIME_DAY 订单仅在当前交易日有效
ORDER_TIME_SPECIFIED 订单在指定日期之前有效
ORDER_TIME_SPECIFIED_DAY 订单在指定日23:59:59之前有效。如果此时间不在交易时段内,到期将在最近的交易时间内处理。

例如:

import MetaTrader5 as mt5

# display data on the MetaTrader 5 package

print("MetaTrader5 package author: ",mt5.__author__)

print("MetaTrader5 package version: ",mt5.__version__)



# establish connection to MetaTrader 5 terminal

if not mt5.initialize():

    print("initialize() failed, error code =",mt5.last_error())

    quit()

 

# get account currency

account_currency=mt5.account_info().currency

print("Account сurrency:",account_currency)



# 准备请求结构

symbol="USDJPY"

symbol_info = mt5.symbol_info(symbol)

if symbol_info is None:

    print(symbol, "not found, can not call order_check()")

    mt5.shutdown()

    quit()



# 如果市场报价中没有此交易品种,请添加

if not symbol_info.visible:

    print(symbol, "is not visible, trying to switch on")

    if not mt5.symbol_select(symbol,True):

        print("symbol_select({}}) failed, exit",symbol)

        mt5.shutdown()

        quit()



# prepare the request

point=mt5.symbol_info(symbol).point

request = {

    "action": mt5.TRADE_ACTION_DEAL,

    "symbol": symbol,

    "volume": 1.0,

    "type": mt5.ORDER_TYPE_BUY,

    "price": mt5.symbol_info_tick(symbol).ask,

    "sl": mt5.symbol_info_tick(symbol).ask-100*point,

    "tp": mt5.symbol_info_tick(symbol).ask+100*point,

    "deviation": 10,

    "magic": 234000,

    "comment": "python script",

    "type_time": mt5.ORDER_TIME_GTC,

    "type_filling": mt5.ORDER_FILLING_RETURN,

}



# 执行检查并显示结果'按原状'

result = mt5.order_check(request)

print(result);

# request the result as a dictionary and display it element by element

result_dict=result._asdict()

for field in result_dict.keys():

    print("   {}={}".format(field,result_dict[field]))

    # if this is a trading request structure, display it element by element as well

    if field=="request":

        traderequest_dict=result_dict[field]._asdict()

        for tradereq_filed in traderequest_dict:

            print("       traderequest: {}={}".format(tradereq_filed,traderequest_dict[tradereq_filed]))



# shut down connection to the MetaTrader 5 terminal

mt5.shutdown()





Result:

MetaTrader5 package author:  MetaQuotes Software Corp.

MetaTrader5 package version:  5.0.29



Account сurrency: USD

   retcode=0

   balance=101300.53

   equity=68319.53

   profit=-32981.0

   margin=51193.67

   margin_free=17125.86

   margin_level=133.45308121101692

   comment=Done

   request=TradeRequest(action=1, magic=234000, order=0, symbol='USDJPY', volume=1.0, ...

       traderequest: action=1

       traderequest: magic=234000

       traderequest: order=0

       traderequest: symbol=USDJPY

       traderequest: volume=1.0

       traderequest: price=108.081

       traderequest: stoplimit=0.0

       traderequest: sl=107.98100000000001

       traderequest: tp=108.181

       traderequest: deviation=10

       traderequest: type=0

       traderequest: type_filling=2

       traderequest: type_time=0

       traderequest: expiration=0

       traderequest: comment=python script

       traderequest: position=0

       traderequest: position_by=0

另见

order_send OrderCheck交易操作类型交易请求结构交易请求结构的检查结果交易请求结构的结果