- EA 交易的主要事件:OnTick
- 基本原理和概念:订单、交易和仓位
- 交易操作类型
- 订单类型
- 按价格和数量划分的订单执行模式
- 挂单到期日期
- 期货订单的保证金计算方法:OrderCalcMargin
- 估算交易操作的利润:OrderCalcProfit
- MqlTradeRequest 结构体
- MqlTradeCheckResult 结构体
- 请求验证:OrderCheck
- 请求发送结果:MqlTradeResult 结构体
- 发送交易请求:OrderSend 和 OrderSendAsync
- 买入和卖出操作
- 修改仓位的止损和/或止盈水平
- 跟踪止损
- 平仓:全部和部分
- 反向平仓:全部和部分
- 挂单
- 修改挂单
- 删除挂单
- 获取活动订单列表
- 订单特性(现行和历史)
- 用于读取活动订单特性的函数
- 按特性选择订单
- 获取仓位列表
- 仓位特性
- 用于读取仓位特性的函数
- 交易特性
- 从历史中选择订单和交易
- 用于从历史中读取订单特性的函数
- 用于从历史中读取交易特性的函数
- 交易类型
- OnTradeTransaction 事件
- 同步和异步请求
- OnTrade 事件
- 监测交易环境变化
- 创建多交易品种 EA 交易
- EA 交易的优势和局限性
- 在 MQL 向导中创建 EA 交易
订单特性(活跃和历史)
在与交易操作相关的章节中,特别是与 买入/卖出、 平仓和 下达挂单相关的章节中,我们已经看到请求是根据 MqlTradeRequest 结构体中特定字段的填充发送到服务器的,其中大多数字段直接定义了生成订单的特性。MQL5 API 允许你了解这些特性以及由交易系统本身设置的一些其他特性,比如订单号、注册时间和状态。
值得注意的是,订单特性列表对于活跃订单和历史订单是通用的,当然,许多特性的值会有所不同。
在 MQL5 中,订单特性根据我们已经熟悉的基于值类型的原则进行了分组:整数型(与 long/ulong 兼容)、实数型 (double) 和字符串型。每种特性组都有自己的枚举。
整数型特性在 ENUM_ORDER_PROPERTY_INTEGER 中汇总,并在下表中列出。
标识符 |
说明 |
类型 |
---|---|---|
ORDER_TYPE |
订单类型 |
|
ORDER_TYPE_FILLING |
按交易量分类的订单类型 |
|
ORDER_TYPE_TIME |
订单生命周期(挂单) |
|
ORDER_TIME_EXPIRATION |
订单到期时间(挂单) |
datetime |
ORDER_MAGIC |
由下订单的 EA 交易设置的任意标识符 |
ulong |
ORDER_TICKET |
订单号;服务器分配给每个订单的唯一编号 |
ulong |
ORDER_STATE |
订单状态 |
ENUM_ORDER_STATE(见下文) |
ORDER_REASON |
订单的原因或来源 |
ENUM_ORDER_REASON(见下文) |
ORDER_TIME_SETUP |
订单下达时间 |
datetime |
ORDER_TIME_DONE |
订单执行或撤销时间 |
datetime |
ORDER_TIME_SETUP_MSC |
下单执行时间(毫秒) |
ulong |
ORDER_TIME_DONE_MSC |
订单执行/撤回时间(毫秒) |
ulong |
ORDER_POSITION_ID |
订单执行时生成或执行修改的仓位 ID |
ulong |
ORDER_POSITION_BY_ID |
ORDER_TYPE_CLOSE_BY 类型订单的对应仓位标识符 |
ulong |
每一笔执行的订单都会生成一笔交易,用于开立新仓位或改变现有仓位。在 ORDER_POSITION_ID 特性中,该仓位的 ID 被分配给已执行的订单。
ENUM_ORDER_STATE 枚举包含说明订单状态的元素。参见下面订单的简化方案(状态图)。
标识符 |
说明 |
---|---|
ORDER_STATE_STARTED |
订单已经过正确性检查,但尚未被服务器接受 |
ORDER_STATE_PLACED |
订单已被服务器接受 |
ORDER_STATE_CANCELED |
订单已被客户(用户或 MQL 程序)取消 |
ORDER_STATE_PARTIAL |
订单已部分执行 |
ORDER_STATE_FILLED |
订单已全部履行 |
ORDER_STATE_REJECTED |
订单已被服务器拒绝 |
ORDER_STATE_EXPIRED |
订单已在到期时取消 |
ORDER_STATE_REQUEST_ADD |
订单正在注册(正在交易系统中下单) |
ORDER_STATE_REQUEST_MODIFY |
订单正在被修改(其参数被更改) |
ORDER_STATE_REQUEST_CANCEL |
订单正在被删除(从交易系统中删除) |
订单状态图
只有活跃订单才可以更改状态。对于历史订单(已完成或已取消),状态是固定的。
你可以取消已经部分履行的订单,然后其在历史中的状态将变为 ORDER_STATE_CANCELED。
ORDER_STATE_PARTIAL 仅适用于活跃订单。已执行(历史)订单的状态始终为 ORDER_STATE_FILLED。
ENUM_ORDER_REASON 枚举指定了可能的订单来源选项。
标识符 |
说明 |
---|---|
ORDER_REASON_CLIENT |
从桌面终端手动下单 |
ORDER_REASON_EXPERT |
由 EA 交易或脚本从桌面终端下单 |
ORDER_REASON_MOBILE |
从移动应用程序下单 |
ORDER_REASON_WEB |
从 WEB 终端(浏览器)下单 |
ORDER_REASON_SL |
作为触发止损的结果由服务器下单 |
ORDER_REASON_TP |
作为触发止盈的结果由服务器下单 |
ORDER_REASON_SO |
作为停止事件的结果由服务器下单 |
真实特性收集在 ENUM_ORDER_PROPERTY_DOUBLE 枚举中。
标识符 |
说明 |
---|---|
ORDER_VOLUME_INITIAL |
下单时的初始交易量 |
ORDER_VOLUME_CURRENT |
当前交易量(初始的或部分执行后剩余的交易量) |
ORDER_PRICE_OPEN |
订单中显示的价格 |
ORDER_PRICE_CURRENT |
尚未执行订单的当前交易品种价格或执行价格 |
ORDER_SL |
止损水平 |
ORDER_TP |
止盈水平 |
ORDER_PRICE_STOPLIMIT |
触发 StopLimit 订单时,下达限价订单的价格 |
ORDER_PRICE_CURRENT 特性包含活动买入挂单的当前 Ask 价格或活动卖出挂单的 Bid 价格。“当前价格”是指使用 OrderSelect 或 OrderGetTicket 选择订单时交易环境中的已知价格。对于历史中已执行的订单,此特性包含执行价格,由于滑点,该价格可能与订单中指定的价格不同。
仅当订单状态为 ORDER_STATE_PARTIAL 时,ORDER_VOLUME_INITIAL 和 ORDER_VOLUME_CURRENT 特性才不相等。
如果订单是部分完成的,那么它在历史中的 ORDER_VOLUME_INITIAL 特性将等于最后完成的部分的大小,并且与原始完整交易量相关的所有其他“完成”将作为单独的订单(和交易)来执行。
在 ENUM_ORDER_PROPERTY_STRING 枚举中说明了字符串特性。
标识符 |
说明 |
---|---|
ORDER_SYMBOL |
下单的交易品种 |
ORDER_COMMENT |
注释 |
ORDER_EXTERNAL_ID |
外部交易系统(交易所)中的订单 ID |
要读取上述所有特性,有两组不同的函数:分别用于活跃订单和历史订单。首先,我们将考虑活跃订单的函数,我们将返回到历史订单(在我们熟悉选择 历史中所需时期的原则后)。