- EA 交易的主要事件:OnTick
- 基本原理和概念:订单、交易和仓位
- 交易操作类型
- 订单类型
- 按价格和数量划分的订单执行模式
- 挂单到期日期
- 期货订单的保证金计算方法:OrderCalcMargin
- 估算交易操作的利润:OrderCalcProfit
- MqlTradeRequest 结构体
- MqlTradeCheckResult 结构体
- 请求验证:OrderCheck
- 请求发送结果:MqlTradeResult 结构体
- 发送交易请求:OrderSend 和 OrderSendAsync
- 买入和卖出操作
- 修改仓位的止损和/或止盈水平
- 跟踪止损
- 平仓:全部和部分
- 反向平仓:全部和部分
- 挂单
- 修改挂单
- 删除挂单
- 获取活动订单列表
- 订单特性(现行和历史)
- 用于读取活动订单特性的函数
- 按特性选择订单
- 获取仓位列表
- 仓位特性
- 用于读取仓位特性的函数
- 交易特性
- 从历史中选择订单和交易
- 用于从历史中读取订单特性的函数
- 用于从历史中读取交易特性的函数
- 交易类型
- OnTradeTransaction 事件
- 同步和异步请求
- OnTrade 事件
- 监测交易环境变化
- 创建多交易品种 EA 交易
- EA 交易的优势和局限性
- 在 MQL 向导中创建 EA 交易
按价格和交易量的订单执行模式
发送交易请求时,我们需要以特殊的方式在算法中指定买入/卖出价格和交易量。同时应注意的是,在金融市场中,无法保证在某个时刻,金融工具能以期望的价格获得全部请求交易量。因此,交易操作受价格和交易量执行模式(或策略)的制约。二者定义了在发送请求过程中价格发生变化或者不能完全满足需求时的规则。
在交易品种一章的 交易条件和订单执行模式一节中,我们已经讨论了按价格执行订单 (SYMBOL_TRADE_EXEMODE) 和按交易量执行订单 (SYMBOL_FILLING_MODE) 的设置,二者均由经纪商设置。根据可用的 SYMBOL_FILLING_MODE 模式,MQL 程序必须为特殊结构体 MqlTradeRequest 中新形成的订单选择填充模式(很快我们将在实践中看到这一点)。
版本在 ENUM_ORDER_TYPE_FILLING 枚举中提供:其标识符与 SYMBOL_FILLING_MODE 的标识符相呼应。
执行策略(值) |
说明 |
---|---|
ORDER_FILLING_FOK (0) |
全部成交否则取消 |
ORDER_FILLING_IOC (1) |
立即成交否则取消 |
ORDER_FILLING_RETURN (2) |
部分成交 |
根据 ORDER_FILLING_FOK 策略,订单必须按指定的交易量成交。如果目前市场上没有足够交易量的金融工具,订单将不会被执行。所需的交易量可以由目前市场上可获得的几种报价组成。能否使用 FOK 订单取决于是否存在 SYMBOL_FILLING_FOK 权限。
采用 ORDER_FILLING_IOC 策略时,交易员同意在订单中指定的限制内,以市场上可用的最大交易量进行交易。如果无法全额成交,订单将以可用交易量执行,缺失的交易量将被取消。能否使用 IOC 订单取决于是否存在 SYMBOL_FILLING_IOC 权限。
使用 ORDER_FILLING_RETURN 时,在部分执行的情况下,剩余交易量的订单不会被取消,而是继续操作。这是默认模式,并且始终可用。但是有一个例外:市场执行模式下不允许部分成交订单(SYMBOL_TRADE_EXEMODE 交易品种特性中的 SYMBOL_TRADE_EXECUTION_MARKET)。
因此,在发送市场(非挂单)订单之前,MQL 程序应根据相应金融工具的 SYMBOL_FILLING_MODE 特性正确设置 ORDER_TYPE_FILLING 策略之一:该特性包含允许模式的位标志组合。
对于挂单,无论 SYMBOL_TRADE_EXEMODE 执行模式如何,都必须使用 ORDER_FILLING_RETURN 策略,因为此类订单稍后将根据经纪商当时设定的规则成交。
不同于交易量成交策略,不能选择价格的订单执行模式,因为它是由经纪商为每个交易品种预先确定的。这会影响在提交交易请求之前应填写 MqlTradeRequest 结构体的哪些字段。
根据执行模式应用成交策略可以表示为一个表('+' 表示允许,'-' 表示禁用,'±' 表示取决于交易品种设置):
成交策略 执行模式 |
ORDER_FILLING _FOK |
ORDER_FILLING _IOC |
ORDER_FILLING _RETURN |
---|---|---|---|
SYMBOL_TRADE_EXECUTION_INSTANT |
+ |
+ |
+ |
SYMBOL_TRADE_EXECUTION_REQUEST |
+ |
+ |
+ |
SYMBOL_TRADE_EXECUTION_MARKET |
± |
± |
- |
SYMBOL_TRADE_EXECUTION_EXCHANGE |
± |
± |
+ |
挂单 |
- |
- |
+ |
在 SYMBOL_TRADE_EXECUTION_INSTANT 和 SYMBOL_TRADE_EXECUTION_REQUEST 执行模式下,允许使用所有交易量成交策略。