订单属性

请求执行交易操作与命令一样正式化,每个订单都有多种属性准备,他们的信息可以使用OrderGet...()和 HistoryOrderGet...() 函数获得。

函数 OrderGetInteger()HistoryOrderGetInteger()

ENUM_ORDER_PROPERTY_INTEGER

标识符 描述 类型
ORDER_TICKET 订单价格。每个订单分配唯一的号码 long
ORDER_TIME_SETUP 订单设置时间 datetime
ORDER_TYPE 订单类型 ENUM_ORDER_TYPE
ORDER_STATE 订单陈述 ENUM_ORDER_STATE
ORDER_TIME_EXPIRATION 订单终结时间 datetime
ORDER_TIME_DONE 订单执行或取消时间 datetime
ORDER_TIME_SETUP_MSC 以毫秒为单位计算01.01.1970以来下订单执行的时间 long
ORDER_TIME_DONE_MSC 以毫秒为单位计算01.01.1970以来订单执行/取消的时间 long
ORDER_TYPE_FILLING 订单填满类型 ENUM_ORDER_TYPE_FILLING
ORDER_TYPE_TIME 订单使用期 ENUM_ORDER_TYPE_TIME
ORDER_MAGIC EA交易的ID安置在订单之中(为确保每个EA交易安置都有独特的代码) long
ORDER_REASON 下单的原因或源 ENUM_ORDER_REASON
ORDER_POSITION_ID 一旦执行,位置指标马上建立一个订单。每个执行订单结果都使订单公开或修改已经存在的位置,明确指出指标的位置同时执行订单 long
ORDER_POSITION_BY_ID 反向持仓标识符,用于关闭订单ORDER_TYPE_CLOSE_BY long

函数 OrderGetDouble()HistoryOrderGetDouble()

ENUM_ORDER_PROPERTY_DOUBLE

标识符 描述 类型
ORDER_VOLUME_INITIAL 订单最初交易量 double
ORDER_VOLUME_CURRENT 订单当前交易量 double
ORDER_PRICE_OPEN 订单中的规定价格 double
ORDER_SL 斩仓值 double
ORDER_TP 盈利值 double
ORDER_PRICE_CURRENT 交易品种订单的当前价格 double
ORDER_PRICE_STOPLIMIT 限制停止订单的限制价格订单 double

函数 OrderGetString()HistoryOrderGetString()

ENUM_ORDER_PROPERTY_STRING

标识符 描述 类型
ORDER_SYMBOL 交易品种订单 string
ORDER_COMMENT 评价订单 string

当使用OrderSend()函数发送交易要求时,一些操作要求订单类型的指示,订单类型在类型列表中分类,尤其在MqlTradeRequest结构中,能接受到ENUM_ORDER_TYPE项目值。

ENUM_ORDER_TYPE

标识符 描述
ORDER_TYPE_BUY 市场购买订单
ORDER_TYPE_SELL 市场卖出订单
ORDER_TYPE_BUY_LIMIT 限制买入待办订单
ORDER_TYPE_SELL_LIMIT 限制卖出待办订单
ORDER_TYPE_BUY_STOP 停止买入待办订单
ORDER_TYPE_SELL_STOP 停止卖出待办订单
ORDER_TYPE_BUY_STOP_LIMIT 在到达订单价格之上,是限制买入订单安置在停止限制价格中
ORDER_TYPE_SELL_STOP_LIMIT 在到达订单价格之上,是限制卖出订单安置在停止限制价格中
ORDER_TYPE_CLOSE_BY 通过反向持仓平仓的订单

每一个订单都有其作用的描述,为获得信息,与ORDER_STATE修饰语一起使用OrderGetInteger()HistoryOrderGetInteger() 函数,允许值存储在 ENUM_ORDER_STATE 项目中。

ENUM_ORDER_STATE

标识符 描述
ORDER_STATE_STARTED 选中订单,并未被经纪人接收
ORDER_STATE_PLACED 接收订单
ORDER_STATE_CANCELED 客户撤销订单
ORDER_STATE_PARTIAL 履行部分订单
ORDER_STATE_FILLED 履行全部订单
ORDER_STATE_REJECTED 驳回订单
ORDER_STATE_EXPIRED 过期订单
ORDER_STATE_REQUEST_ADD 注册订单(到交易系统)
ORDER_STATE_REQUEST_MODIFY 更改订单(改变其参数)
ORDER_STATE_REQUEST_CANCEL 删除订单(从交易系统中删除)

在当前时间(有效时间)发送执行交易请求时,应该指定价格和所需的买卖交易量。此外,请记住,金融市场并不能保证某一交易品种可以期望的价格获得所需的全部交易量。因此,实时交易操作通过价格和交易量执行模式进行管理。模式或执行指令定义了价格改变或请求交易量不能在此刻完全满足的情况下的规则。

价格执行模式可以从SYMBOL_TRADE_EXEMODE交易品种属性中获得,其包含来自 ENUM_SYMBOL_TRADE_EXECUTION枚举的标识组合。

执行模式 描述 ENUM_SYMBOL_TRADE_EXECUTION中的值
执行模式   (要价执行) 以之前从交易商接收的价格执行市价单。   在订单发送之前,交易商会请求特定市价单的价格。在收到价格后,可以确认或拒绝以给定价格执行订单。 SYMBOL_TRADE_EXECUTION_REQUEST
现价执行   (现价执行) 立即以指定价格执行市价单。   当发送要执行的交易请求时,平台会自动将当前价格添加到订单中。
  • 如果交易商接受该价格,则订单执行。
  • 如果交易商不接受请求价格,则发送"Requote"(重报价) — 交易商返回可以执行此订单的价格。
SYMBOL_TRADE_EXECUTION_INSTANT
市价执行   (市价执行) 交易商不需要与交易者进行额外商量就可以决定订单执行价格。   以这种模式发送订单意味着事先同意以这个价格执行。 SYMBOL_TRADE_EXECUTION_MARKET
交易所执行   (交易所执行) 交易操作以当前市场报价执行。 SYMBOL_TRADE_EXECUTION_EXCHANGE

交易量成交指令ORDER_TYPE_FILLING订单属性中指定,可能只包含ENUM_ORDER_TYPE_FILLING枚举值

成交指令 描述 ENUM_ORDER_TYPE_FILLING
全数执行或立即取消 订单只能按照指定的交易量执行。   如果交易品种的所需交易量目前在市场上不能满足,则该订单将不会被执行。   所需交易量可以由几个可用报价组成。   由交易服务器决定使用FOK订单的可能性。 ORDER_FILLING_FOK
立即或取消 交易者同意按照订单中指定的场内最大交易量执行成交。   如果不能完全成交,则将执行可用交易量的订单,并取消其余交易量。   由交易服务器决定使用IOC订单的可能性。   ORDER_FILLING_IOC
被动(预订或取消) BoC订单假设订单只能在市场深度下单,不能立即执行。如果订单可以在下单后立即执行,则取消订单。   事实上,BOC指令保证了所下订单的价格会不及当前市场的价格。BoC订单用于实施被动交易,因此订单在下单时不会立即执行,也不会影响当前的流动性。   仅支持限价单和止损限价单(ORDER_TYPE_BUY_LIMIT、 ORDER_TYPE_SELL_LIMIT、ORDER_TYPE_BUY_STOP_LIMIT、 ORDER_TYPE_SELL_STOP_LIMIT)。 ORDER_FILLING_BOC
返回 如果部分成交,则订单剩余交易量不会取消,会进一步处理。   在市价执行模式下不允许返回订单(市价执行 — SYMBOL_TRADE_EXECUTION_MARKET)。 ORDER_FILLING_RETURN

当使用OrderSend()函数发送交易请求时,所需交易量执行指令可以在type_filling字段中设置,即在特殊的MqlTradeRequest结构中设置。可以使用ENUM_ORDER_TYPE_FILLING枚举值。若要获取特定活动/完成订单中的属性值,请使用OrderGetInteger()HistoryOrderGetInteger()函数(带有ORDER_TYPE_FILLING修饰符)。

在发送当前执行时间的订单之前,为了正确设置ORDER_TYPE_FILLING值(交易量执行类型),您可以对每个交易品种使用SymbolInfoInteger()函数来获取 SYMBOL_FILLING_MODE属性值,将交易品种允许的交易量执行类型显示为标识组合。除了“市价执行”模式(SYMBOL_TRADE_EXECUTION_MARKET)外,将一直启用ORDER_FILLING_RETURN成交类型。

根据执行模式使用的成交类型可以如下表所示:

执行类型/成交指令类型 全数执行或立即取消(FOK ORDER_FILLING_FOK) 立即或取消(IOC ORDER_FILLING_IOC) 返回(返回ORDER_FILLING_RETURN)
现价执行   (SYMBOL_TRADE_EXECUTION_INSTANT) + (无论交易品种如何设置) + (无论交易品种如何设置) + (始终)
要价执行   SYMBOL_TRADE_EXECUTION_REQUEST + (无论交易品种如何设置)   + (无论交易品种如何设置) + (始终)
市价执行   SYMBOL_TRADE_EXECUTION_MARKET + (在交易品种设置中设置) + (在交易品种设置中设置) - (无论交易品种如何设置,请禁用)
交易所执行   SYMBOL_TRADE_EXECUTION_EXCHANGE + (在交易品种设置中设置) + (在交易品种设置中设置) + (始终)

挂单情况下,无论执行类型(SYMBOL_TRADE_EXEMODE)如何,都应该使用ORDER_FILLING_RETURN成交类型,因为这类订单不会在发送时执行。使用挂单时,交易者事先同意,当满足此订单的交易条件时,交易商将使用交易所支持的成交类型。

当使用OrderSend() 函数发送交易请求时,订单有效期设定在MqlTradeRequest 特殊结构中的type_time领域,ENUM_ORDER_TYPE_TIME项目值是允许的,使用ORDER_TYPE_TIME修饰语和OrderGetInteger()HistoryOrderGetInteger() 函数可以获得该性质的值。

ENUM_ORDER_TYPE_TIME

标识符 描述
ORDER_TIME_GTC 取消订单
ORDER_TIME_DAY 前交易日订单
ORDER_TIME_SPECIFIED 过期订单
ORDER_TIME_SPECIFIED_DAY 订单将生效直至指定日期的23:59:59。如果该时间超出了交易期,那么该订单会在最近的交易时间内到期。

下单原因包含在ORDER_REASON 属性之中。可以通过MQL5程序,移动程序端以及StopOut来下单。可能的ORDER_REASON值会在ENUM_ORDER_REASON枚举中描述。

ENUM_ORDER_REASON

标识符 描述
ORDER_REASON_CLIENT 从桌面程序端下单
ORDER_REASON_MOBILE 从移动程序端下单
ORDER_REASON_WEB 从网页平台下单
ORDER_REASON_EXPERT 从MQL5程序下单,例如EA交易或脚本
ORDER_REASON_SL 因激活止损而下单
ORDER_REASON_TP 因激活止赢而下单
ORDER_REASON_SO 因Stop Out 事件而下单