按价格和交易量的订单执行模式

发送交易请求时,我们需要以特殊的方式在算法中指定买入/卖出价格和交易量。同时应注意的是,在金融市场中,无法保证在某个时刻,金融工具能以期望的价格获得全部请求交易量。因此,交易操作受价格和交易量执行模式(或策略)的制约。二者定义了在发送请求过程中价格发生变化或者不能完全满足需求时的规则。

在交易品种一章的 交易条件和订单执行模式一节中,我们已经讨论了按价格执行订单 (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 执行模式下,允许使用所有交易量成交策略。