Свойства ордеров (действующих и в истории)

Как мы видели в разделах о торговых операциях, в частности о совершении покупки/продажи, закрытии позиции или установке отложенного ордера, отправка запросов на сервер фактически основана на заполнении специфических полей структуры MqlTradeRequest, большинство из которых напрямую определяет свойства создаваемых в результате ордеров. MQL5 API позволяет узнать эти и некоторые другие свойства, устанавливаемые самой торговой системой, такие как тикет, время регистрации и статус.

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

Свойства ордеров сгруппированы в MQL5 по уже знакомому нам принципу, базирующемся на типе значений: целочисленные (совместимые с long/ulong), вещественные (double) и строковые. Каждая группа свойств имеет собственное перечисление.

Целочисленные свойства сведены в ENUM_ORDER_PROPERTY_INTEGER и представлены в следующей таблице.

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

Описание

Тип

ORDER_TYPE

Тип ордера

ENUM_ORDER_TYPE

ORDER_TYPE_FILLING

Тип исполнения по объему

ENUM_ORDER_TYPE_FILLING

ORDER_TYPE_TIME

Время жизни ордера (отложенного)

ENUM_ORDER_TYPE_TIME

ORDER_TIME_EXPIRATION

Время истечения ордера (отложенного)

datetime

ORDER_MAGIC

Произвольный идентификатор, заданный экспертом, выставившим ордер

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

Идентификатор позиции, которую породил или изменил ордер, если он исполнен

ulong

ORDER_POSITION_BY_ID

Идентификатор встречной позиции для ордеров типа ORDER_TYPE_CLOSE_BY

ulong

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

Ордер выставлен из десктопного терминала советником или скриптом

ORDER_REASON_MOBILE

Ордер выставлен из мобильного приложения

ORDER_REASON_WEB

Ордер выставлен из web-терминала (браузера)

ORDER_REASON_SL

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

ORDER_REASON_TP

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

ORDER_REASON_SO

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

Вещественные свойства собраны в перечислении ENUM_ORDER_PROPERTY_DOUBLE.

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

Описание

ORDER_VOLUME_INITIAL

Первоначальный объем при постановке ордера

ORDER_VOLUME_CURRENT

Текущий объем (начальный или оставшийся после частичного исполнения)

ORDER_PRICE_OPEN

Цена, указанная в ордере

ORDER_PRICE_CURRENT

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

ORDER_SL

Уровень Stop Loss

ORDER_TP

Уровень Take Profit

ORDER_PRICE_STOPLIMIT

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

Свойство ORDER_PRICE_CURRENT содержит для действующих отложенных ордеров текущую цену Ask для покупки или цену Bid для продажи. Под "текущей" понимается цена, известная в торговом окружении на момент выбора ордера с помощью OrderSelect или OrderGetTicket. Для исполненных ордеров в истории данное свойство содержит цену исполнения — она может отличаться от заданной в ордере из-за проскальзывания.

Свойства ORDER_VOLUME_INITIAL и ORDER_VOLUME_CURRENT не равны друг другу, только если статус ордера — ORDER_STATE_PARTIAL.

Если ордер исполнялся частями, то в истории его свойство ORDER_VOLUME_INITIAL будет равно размеру последней исполненной части, а все остальные "заливки", относящиеся к исходному полному объему, будут оформлены отдельными ордерами (и сделками).

Строковые свойства описаны в перечислении ENUM_ORDER_PROPERTY_STRING.

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

Описание

ORDER_SYMBOL

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

ORDER_COMMENT

Комментарий

ORDER_EXTERNAL_ID

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

Для чтения всех вышеупомянутых свойств существует два разных набора функций: для активных ордеров и для исторических. Сначала рассмотрим функции для активных ордеров, а к историческим вернемся после того, как познакомимся с принципами выделения требуемого фрагмента истории.