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交易操作类型交易请求结构交易请求结构的检查结果交易请求结构的结果