- Структура даты
- Структура входных параметров индикатора
- Структура исторических данных
- Структура стакана цен
- Структура торгового запроса
- Структура результата проверки торгового запроса
- Структура результата торгового запроса
- Структура торговой транзакции
- Структура для получения текущих цен
- Структуры экономического календаря
Структура торговой транзакции (MqlTradeTransaction)
В результате выполнения определенных действий с торговым счетом, его состояние изменяется. К таким действиям относятся:
- Отсылка торгового запроса любым MQL5-приложением в клиентском терминале при помощи функций OrderSend и OrderSendAsync и его последующее исполнение;
- Отсылка торгового запроса через графический интерфейс терминала и его последующее исполнение;
- Срабатывания отложенных ордеров и стоп-ордеров на сервере;
- Выполнения операций на стороне торгового сервера.
В результате данных действий для счета выполняются торговые транзакции:
- обработка торгового запроса;
- изменение открытых ордеров;
- изменение истории ордеров;
- изменение истории сделок;
- изменение позиций.
Например, при отсылке рыночного ордера на покупку он обрабатывается, для счета создается соответствующий ордер на покупку, происходит исполнение ордера, его удаление из списка открытых, добавление в историю ордеров, далее добавляется соответствующая сделка в историю и создается новая позиция. Все эти действия являются торговыми транзакциями.
Для получения торговых транзакций, примененных к счету, в MQL5 предусмотрен специальный обработчик OnTradeTransaction(). В первый параметр этого обработчика передается структура MqlTradeTransaction, описывающая торговые транзакции.
struct MqlTradeTransaction
|
Описание полей
Поле |
Описание |
---|---|
deal |
Тикет сделки. |
order |
Тикет ордера. |
symbol |
Имя торгового инструмента, по которому совершена транзакция. |
type |
Тип торговой транзакции. Значение может быть одним из значений перечисления ENUM_TRADE_TRANSACTION_TYPE. |
order_type |
Тип торгового ордера. Значение может быть одним из значений перечисления ENUM_ORDER_TYPE. |
order_state |
Состояние торгового ордера. Значение может быть одним из значений перечисления ENUM_ORDER_STATE. |
deal_type |
Тип сделки. Значение может быть одним из значений перечисления ENUM_DEAL_TYPE. |
time_type |
Тип ордера по истечению. Значение может быть одним из значений ENUM_ORDER_TYPE_TIME. |
time_expiration |
Срок истечения отложенного ордера (для ордеров типа ORDER_TIME_SPECIFIED и ORDER_TIME_SPECIFIED_DAY). |
price |
Цена. В зависимости от типа торговой транзакции может быть ценой ордера, сделки или позиции. |
price_trigger |
Стоп-цена (цена срабатывания) стоп-лимитного ордера (ORDER_TYPE_BUY_STOP_LIMIT и ORDER_TYPE_SELL_STOP_LIMIT). |
price_sl |
Цена Stop Loss. В зависимости от типа торговой транзакции может относиться к ордеру, сделке или позиции. |
price_tp |
Цена Take Profit. В зависимости от типа торговой транзакции может относиться к ордеру, сделке или позиции. |
volume |
Объем в лотах. В зависимости от типа торговой транзакции может указывать на текущий объем ордера, объем сделки или объем позиции. |
position |
Тикет позиции, на которую повлияла транзакция. |
position_by |
Тикет встречной позиции. Используется при закрытии позиции встречной — открытой по тому же инструменту, но в противоположном направлении. |
Определяющим параметром для анализа поступившей транзакции является ее тип, который передается в поле type. Например, если транзакция является типом TRADE_TRANSACTION_REQUEST (получен результат обработки торгового запроса сервером), то структура имеет только одно заполненное поле type, остальные поля анализировать не нужно. В этом случае можно произвести анализ двух дополнительных параметров request и result, которые передаются в обработчик OnTradeTransaction(), как это показано в примере ниже.
Зная тип торговой операции, можно принять решение об анализе текущего состояния ордеров, позиций и сделок на торговом счете. Необходимо иметь в виду, что один торговый запрос, отправленный из терминала серверу, может породить несколько торговых транзакций, очередность поступления которых в терминал не гарантируется.
Структура MqlTradeTransaction заполняется по-разному в зависимости от типа торговой транзакции (ENUM_TRADE_TRANSACTION_TYPE):
TRADE_TRANSACTION_ORDER_* и TRADE_TRANSACTION_HISTORY_*
Для торговых транзакций, касающихся обработки открытых ордеров (TRADE_TRANSACTION_ORDER_ADD, TRADE_TRANSACTION_ORDER_UPDATE и TRADE_TRANSACTION_ORDER_DELETE) и истории ордеров (TRADE_TRANSACTION_HISTORY_ADD, TRADE_TRANSACTION_HISTORY_UPDATE, TRADE_TRANSACTION_HISTORY_DELETE), в структуре MqlTradeTransaction заполняются следующие поля:
- order - тикет ордера;
- symbol - имя финансового инструмента в ордере;
- type - тип торговой транзакции;
- order_type - тип ордера;
- orders_state - текущее состояние ордера;
- time_type - тип истечения ордера;
- time_expiration - время истечения ордера (для ордеров с типом истечения ORDER_TIME_SPECIFIED и ORDER_TIME_SPECIFIED_DAY);
- price - цена в ордере, указанная клиентом;
- price_trigger - стоп-цена срабатывания стоп-лимитного ордера (только для ORDER_TYPE_BUY_STOP_LIMIT и ORDER_TYPE_SELL_STOP_LIMIT);
- price_sl - цена Stop Loss ордера (заполняется, если указана в ордере);
- price_tp - цена Take Profit ордера (заполняется, если указана в ордере);
- volume - текущий объем ордера (не исполненный). Изначальный объем ордера можно узнать из истории ордеров при помощи функций HistoryOrders*.
- position - тикет позиции, открытой, измененной или закрытой в результате исполнения ордера. Заполняется только для рыночных ордеров. Не заполняется для TRADE_TRANSACTION_ORDER_ADD.
- position_by - тикет встречной позиции. Заполняется только для ордеров на закрытие позиции встречной (close by).
TRADE_TRANSACTION_DEAL_*
Для торговых транзакций, касающихся обработки сделок (TRADE_TRANSACTION_DEAL_ADD, TRADE_TRANSACTION_DEAL_UPDATE и TRADE_TRANSACTION_DEAL_DELETE), в структуре MqlTradeTransaction заполняются следующие поля:
- deal - тикет сделки;
- order - тикет ордера, на основе которого совершена сделка;
- symbol - имя финансового инструмента в сделке;
- type - тип торговой транзакции;
- deal_type - тип сделки;
- price - цена, по которой совершена сделка;
- price_sl - цена Stop Loss (заполняется, если указана в ордере, на основе которого совершена сделка);
- price_tp - цена Take Profit (заполняется, если указана в ордере, на основе которого совершена сделка);
- volume - объем сделки в лотах.
- position - тикет позиции, открытой, измененной или закрытой в результате исполнения сделки.
- position_by - тикет встречной позиции. Заполняется только для сделок на закрытие позиции встречной (out by).
TRADE_TRANSACTION_POSITION
Для торговых транзакций, касающихся изменений позиций, не связанных с исполнением сделок (TRADE_TRANSACTION_POSITION), в структуре MqlTradeTransaction заполняются следующие поля:
- symbol - имя финансового инструмента позиции;
- type - тип торговой транзакции;
- deal_type - тип позиции (DEAL_TYPE_BUY или DEAL_TYPE_SELL);
- price - средневзвешенная цена открытия позиции;
- price_sl - цена Stop Loss;
- price_tp - цена Take Profit;
- volume - объем позиции в лотах, если он был изменен.
- position - тикет позиции.
Изменение позиции (добавление, изменение или ликвидация) в результате совершения сделки не влечет за собой появление транзакции TRADE_TRANSACTION_POSITION. |
TRADE_TRANSACTION_REQUEST
Для торговых транзакций, описывающих факт, что торговый запрос обработан сервером, и результат его обработки получен (TRADE_TRANSACTION_REQUEST), в структуре MqlTradeTransaction заполняется только одно поле:
- type - тип торговой транзакции;
Для транзакций данного типа необходимо анализировать только одно поле - type (тип торговой транзакции). Для получения дополнительной информации необходимо анализировать второй и третий параметры функции OnTradeTransaction (request и result). |
Пример:
input int MagicNumber=1234567; |
Смотри также