- Главное событие экспертов: OnTick
- Основные принципы и понятия: ордер, сделка, позиция
- Типы торговых операций
- Типы ордеров
- Режимы исполнения ордеров по цене и объемам
- Сроки действия отложенных ордеров
- Расчет залога для будущего ордера: OrderCalcMargin
- Оценка прибыли торговой операции: OrderCalcProfit
- Структура торгового запроса MqlTradeRequest
- Структура проверки запроса MqlTradeCheckResult
- Проверка корректности запроса: OrderCheck
- Результат отправки запроса: структура MqlTradeResult
- Отправка торгового запроса: OrderSend и OrderSendAsync
- Совершение покупки или продажи
- Модификация уровней Stop Loss и/или Take Profit позиции
- Трейлинг стоп
- Полное и частичное закрытие позиции
- Полное и частичное закрытие встречных позиций (хедж)
- Установка отложенного ордера
- Модификация отложенного ордера
- Удаление отложенного ордера
- Получение списка действующих ордеров
- Свойства ордеров (действующих и в истории)
- Функции для чтения свойств действующих ордеров
- Отбор ордеров по свойствам
- Получение списка позиций
- Свойства позиций
- Функции для чтения свойств позиций
- Свойства сделок
- Выборка ордеров и сделок из истории
- Функции для чтения свойств ордеров из истории
- Функции для чтения свойств сделок из истории
- Типы торговых транзакций
- Событие OnTradeTransaction
- Синхронные и асинхронные запросы
- Событие OnTrade
- Контроль за изменениями торгового окружения
- Особенности создания мультисимвольных экспертов
- Ограничения и преимущества экспертов
- Создание заготовки эксперта в Мастере MQL
Свойства ордеров (действующих и в истории)
Как мы видели в разделах о торговых операциях, в частности о совершении покупки/продажи, закрытии позиции или установке отложенного ордера, отправка запросов на сервер фактически основана на заполнении специфических полей структуры MqlTradeRequest, большинство из которых напрямую определяет свойства создаваемых в результате ордеров. MQL5 API позволяет узнать эти и некоторые другие свойства, устанавливаемые самой торговой системой, такие как тикет, время регистрации и статус.
Важно отметить, что перечень свойств ордеров является общим как для действующих, так и исторических ордеров, хотя значения многих свойств у них, разумеется, будут отличаться.
Свойства ордеров сгруппированы в MQL5 по уже знакомому нам принципу, базирующемся на типе значений: целочисленные (совместимые с long/ulong), вещественные (double) и строковые. Каждая группа свойств имеет собственное перечисление.
Целочисленные свойства сведены в ENUM_ORDER_PROPERTY_INTEGER и представлены в следующей таблице.
Идентификатор |
Описание |
Тип |
---|---|---|
ORDER_TYPE |
Тип ордера |
|
ORDER_TYPE_FILLING |
Тип исполнения по объему |
|
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 |
Идентификатор ордера во внешней торговой системе (на бирже) |
Для чтения всех вышеупомянутых свойств существует два разных набора функций: для активных ордеров и для исторических. Сначала рассмотрим функции для активных ордеров, а к историческим вернемся после того, как познакомимся с принципами выделения требуемого фрагмента истории.