Свойства ордеров

Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций 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

Идентификатор эксперта выставившего ордер (предназначен для того, чтобы каждый эксперт выставлял свой собственный уникальный номер)

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

Уровень Stop Loss

double

ORDER_TP

Уровень Take Profit

double

ORDER_PRICE_CURRENT

Текущая цена по символу ордера

double

ORDER_PRICE_STOPLIMIT

Цена постановки Limit ордера при срабатывании StopLimit ордера

double

Для функций OrderGetString() и HistoryOrderGetString()

ENUM_ORDER_PROPERTY_STRING

Идентификатор

Описание

Тип

ORDER_SYMBOL

Символ, по которому выставлен ордер

string

ORDER_COMMENT

Комментарий

string

ORDER_EXTERNAL_ID

Идентификатор ордера во внешней торговой системе (на бирже)

string

 

При отправке торгового запроса функцией OrderSend() для некоторых операций необходимо указать тип ордера. Тип ордера указывается в поле type специальной структуры MqlTradeRequest, и может принимать значения из перечисления ENUM_ORDER_TYPE.

ENUM_ORDER_TYPE

Идентификатор

Описание

ORDER_TYPE_BUY

Рыночный ордер на покупку

ORDER_TYPE_SELL

Рыночный ордер на продажу

ORDER_TYPE_BUY_LIMIT

Отложенный ордер Buy Limit

ORDER_TYPE_SELL_LIMIT

Отложенный ордер Sell Limit

ORDER_TYPE_BUY_STOP

Отложенный ордер Buy Stop

ORDER_TYPE_SELL_STOP

Отложенный ордер Sell Stop

ORDER_TYPE_BUY_STOP_LIMIT

По достижении цены ордера выставляется отложенный ордер Buy Limit по цене StopLimit

ORDER_TYPE_SELL_STOP_LIMIT

По достижении цены ордера выставляется отложенный ордер Sell Limit по цене StopLimit

ORDER_TYPE_CLOSE_BY

Ордер на закрытие позиции встречной позицией

 

Каждый ордер имеет статус, описывающий его состояние. Для получения информации используйте функцию OrderGetInteger() или HistoryOrderGetInteger() с модификатором ORDER_STATE. Допустимые значения хранятся в перечислении 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

Ордер в состоянии удаления (удаление из торговой системы)

 

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

Режим исполнения по цене  – его можно получить из свойства символа SYMBOL_TRADE_EXEMODE, которое содержит комбинацию флагов из перечисления ENUM_SYMBOL_TRADE_EXECUTION.

Режим исполнения

Описание

Значение в ENUM_SYMBOL_TRADE_EXECUTION

Режим исполнения

 

(Request Execution)

Исполнение рыночного ордера по цене, предварительно полученной от брокера.

 

Перед отправкой рыночного ордера у брокера запрашиваются цены его исполнения. После их получения выполнение ордера по данной цене можно либо подтвердить, либо отклонить.

SYMBOL_TRADE_EXECUTION_REQUEST

Немедленное исполнение

 

(Instant Execution)

Немедленное исполнение рыночного ордера по указанной цене.

 

При отправке торгового запроса на исполнение платформа автоматически подставляет в ордер текущие цены.

  • Если брокер принимает цену, то ордер будет исполнен.
  • Если брокер не принимает запрошенную цену, то происходит так называемое "реквотирование" (Requote) — брокер возвращает цены, по которым может быть исполнен данный ордер.

SYMBOL_TRADE_EXECUTION_INSTANT

Исполнение по рынку

 

(Market Execution)

Решение о цене исполнения принимает брокер без дополнительного согласования с трейдером.

 

Отправка рыночного ордера в таком режиме подразумевает досрочное согласие с ценой, по которой он будет выполнен.

SYMBOL_TRADE_EXECUTION_MARKET

Биржевое исполнение

 

(Exchange Execution)

Торговые операции совершаются по ценам текущих рыночных предложений.

SYMBOL_TRADE_EXECUTION_EXCHANGE

Политика заполнения объема –  указывается в свойстве ордера ORDER_TYPE_FILLING и может содержать только значения из перечисления ENUM_ORDER_TYPE_FILLING

Политика исполнения

Описание

Значение в ENUM_ORDER_TYPE_FILLING

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

Ордер может быть исполнен исключительно в указанном объеме.

 

Если на рынке в данный момент не присутствует достаточного объема финансового инструмента, то ордер не будет исполнен.

 

Необходимый объем может быть составлен из нескольких предложений, доступных в данный момент на рынке.

 

Возможность использования FOK-ордеров определяется на торговом сервере.

ORDER_FILLING_FOK

Все/Частично (Immediate or Cancel)

Трейдер соглашается совершить сделку по максимально доступному на рынке объему в пределах указанного в ордере.

 

В случае невозможности полного исполнения ордер будет исполнен на доступный объем, а неисполненный объем ордера будет отменен.

 

Возможность использования IOC-ордеров определяется на торговом сервере.

 

ORDER_FILLING_IOC

Вернуть (Return)

В случае частичного исполнения ордер с остаточным объемом не снимается, а продолжает действовать.

 

Return-ордеры не разрешены в режиме исполнения Market Execution (исполнение ордеров по рынку — 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, которое показывает разрешенные для этого символа типы заполнения по объему в виде комбинации флагов. При этом нужно отметить, что тип заливки ORDER_FILLING_RETURN разрешен всегда, кроме режима "Исполнение по рынку" (SYMBOL_TRADE_EXECUTION_MARKET).

Применение типов заливки в зависимости от режима исполнения можно представить в виде таблицы:

Режим исполнения\Политика заполнения

Все/Ничего (FOK ORDER_FILLING_FOK)

Все/Частично (IOC ORDER_FILLING_IOC)

Вернуть (Return 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, так как такие ордеры не предназначены для исполнения в момент отправки. При использовании отложенных ордеров трейдер заранее соглашается, что при наступлении условий для проведения сделки по данному ордеру, брокером будет использован тот тип заливки, который поддерживается данной торговой площадкой.

 

Срок действия ордера можно задать в поле type_time специальной структуры MqlTradeRequest при отправке торгового запроса функцией OrderSend(). Допустимы значения из перечисления ENUM_ORDER_TYPE_TIME. Для получения значения этого свойства используйте функцию OrderGetInteger() или HistoryOrderGetInteger() с модификатором ORDER_TYPE_TIME.

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-программы – советником или скриптом

ORDER_REASON_SL

Ордер выставлен в результате срабатывания Stop Loss

ORDER_REASON_TP

Ордер выставлен в результате срабатывания Take Profit

ORDER_REASON_SO

Ордер выставлен в результате наступления события Stop Out