订单属性
订单属性
请求执行交易操作与命令一样正式化,每个订单都有多种属性准备,他们的信息可以使用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 事件而下单 |