order_check
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