Режимы исполнения ордеров по цене и объемам

При отправке торговых запросов нам нужно будет указать в алгоритме особым образом цену и объем покупки/продажи. При этом необходимо учитывать, что на финансовых рынках нет гарантии, что в данный момент по финансовому инструменту доступен весь запрашиваемый объем по желаемой цене. Поэтому проведение торговых операций регулируется с помощью режимов (или политик) исполнения по цене и объему. Они определяют правила для случаев, когда в процессе отправки запроса изменилась цена или его не удается удовлетворить в полном объеме.

В главе про символы, в разделе Торговые условия и режимы исполнения приказов мы уже встречались с настройками исполнения ордеров по цене (SYMBOL_TRADE_EXEMODE) и заливки ордеров по объему (SYMBOL_FILLING_MODE), которые устанавливает брокер. В соответствие с тем, какие режимы SYMBOL_FILLING_MODE доступны, MQL-программа должна выбрать режим заливки нового формируемого ордера в специальной структуре MqlTradeRequest (скоро мы увидим это на практике).

Варианты сведены в перечисление ENUM_ORDER_TYPE_FILLING: их идентификаторы перекликаются с идентификаторами SYMBOL_FILLING_MODE.

Политика исполнения (Значения)

Описание

ORDER_FILLING_FOK (0)

Все или Ничего (Fill or Kill)

ORDER_FILLING_IOC (1)

Немедленно и хотя бы Частично (Immediate or Cancel)

ORDER_FILLING_RETURN (2)

Вернуть (Return)

При политике ORDER_FILLING_FOK ордер может быть исполнен исключительно в указанном объеме. Если на рынке в данный момент не присутствует достаточного объема финансового инструмента, то ордер не будет исполнен. Необходимый объем может быть составлен из нескольких предложений, доступных в данный момент на рынке. Возможность использования FOK-ордеров определяется наличием разрешения SYMBOL_FILLING_FOK.

При политике ORDER_FILLING_IOC трейдер соглашается совершить сделку по максимально доступному на рынке объему в пределах указанного в ордере. В случае невозможности полного покрытия ордер будет исполнен на доступный объем, а недостающий объем будет отменен. Возможность использования IOC-ордеров определяется наличием разрешения SYMBOL_FILLING_IOC.

При политике ORDER_FILLING_RETURN в случае частичного исполнения ордер с остаточным объемом не снимается, а продолжает действовать. Это — режим по умолчанию, доступный всегда. Однако есть одно исключение: Return-ордера не разрешены в режиме исполнения по рынку (SYMBOL_TRADE_EXECUTION_MARKET в свойстве символа SYMBOL_TRADE_EXEMODE).

Таким образом, перед отправкой рыночного (не отложенного) ордера MQL-программе следует правильно выставить одну из политик ORDER_TYPE_FILLING на основе свойства SYMBOL_FILLING_MODE соответствующего финансового инструмента: напомним, что в этом свойстве содержится комбинация битовых флагов разрешенных режимов.

Для отложенных ордеров независимо от режима исполнения 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 разрешены все политики заливки объемов.