Если пришла сделка и нет ее ордера, то взвести соответствующий флаг.
Если пришел ордер и взведен флаг, считать, что пришла сделка. Флаг обнулить.
Если пришла сделка и нет ее ордера, то взвести соответствующий флаг.
Если пришел ордер и взведен флаг, считать, что пришла сделка. Флаг обнулить.
На случай множественных транзакций (одна за другой) думал или о двумерном массиве [тикет сделки][тикет ордера]. Но о конкретной реализации ещё не знаю. Массив на случай того, что транзакции могут прийти вразнобой (сначала сделка потом ордер или наоборот).
В OnTradeTransaction заполнять этот массив (для заполнения ордеров нужно будет отлавливать TRADE_TRANSACTION_ORDER_ADD), а в OnTick проверять массив.
На случай множественных транзакций (одна за другой) думал или о двумерном массиве [тикет сделки][тикет ордера]. Но о конкретной реализации ещё не знаю. Массив на случай того, что транзакции могут прийти вразнобой (сначала сделка потом ордер или наоборот).
В OnTradeTransaction заполнять этот массив (для заполнения ордеров нужно будет отлавливать TRADE_TRANSACTION_ORDER_ADD), а в OnTick проверять массив.
//--- request trade history |
насколько я понимаю, цепочку ордер-сделка-позиция объединяет общий ID (я его использую, например, для поиска комиссии, которая числится в сделке, соответствующей позиции). должно и для ордера сработать - перебрать связки сделки-ордера с одинаковым ID и проверять тип ордера
Речь об этих свойствах:
Необходимо определить ситуацию, когда сделка появилась в результате срабатывания отложенного ордера. Появление сделки и срабатывание отложенного ордера - это элементы торговой истории. Пример торговой истории (окно "Инструменты", вкладка "История" и на вкладке "История" через правый клик выбрано отображение "Ордера и сделки") - сработал отложенный ордер Sell limit
Транзакцию TRADE_TRANSACTION_DEAL_ADD (добавление сделки в историю) я отлавливаю в OnTradeTransaction(). И здесь же провожу проверку - точно ли эта сделка есть в торговой истории:
и затем пытаюсь получить ордер из торговой истории (ордер который инициировал эту сделку) - но получаю ошибку: HistoryOrderSelect() не может найти этот ордер в торговой истории. Очевидно, что в торговую истории сначала пишется сделка, а затем уже записывается ордер.
Какие есть идеи? Как при отловленной транзакции TRADE_TRANSACTION_DEAL_ADD получить из торговой истории и сделку и ордер?
Я для себя решил использовать OnTrade, т.к. OnTradeTransaction() как раз и вызывается подряд несколько раз - 1. сделка заключена 2. позиция открылась 3. ордер удален из открытых 4. ордер добавлен в историю.
И на всё это вызывается в конце один OnTrade. Если скорость не критична, тогда пойдёт. Иначе отслеживать события с типом TRADE_TRANSACTION_HISTORY_ADD, тогда значит ордер уже в истории.

- www.mql5.com
Какие есть идеи? Как при отловленной транзакции TRADE_TRANSACTION_DEAL_ADD получить из торговой истории и сделку и ордер?
Если отложенный ордер исполнился всем объемом, то
TRADE_TRANSACTION_HISTORY_ADD
Если не всем объемом, то в TRADE_TRANSACTION_DEAL_ADD
проверяем начальный объем ордера и текущий.
ord_data.vol_init = OrderGetDouble(ORDER_VOLUME_INITIAL); ord_data.vol_cur = OrderGetDouble(ORDER_VOLUME_CURRENT);
Если отложенный ордер исполнился всем объемом, то
TRADE_TRANSACTION_HISTORY_ADD
Если не всем объемом, то в TRADE_TRANSACTION_DEAL_ADD
проверяем начальный объем ордера и текущий.
Вот за это огромное спасибо. Не сталкивался, так как нет биржевого счёта. Спасибо.
Добавлено:
Вероятно нужно ещё учесть и Общие принципы - Торговые операции
Следует
учитывать, что в некоторых случаях результатом исполнения ордера могут быть сразу несколько сделок.

- www.metatrader5.com

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Необходимо определить ситуацию, когда сделка появилась в результате срабатывания отложенного ордера. Появление сделки и срабатывание отложенного ордера - это элементы торговой истории. Пример торговой истории (окно "Инструменты", вкладка "История" и на вкладке "История" через правый клик выбрано отображение "Ордера и сделки") - сработал отложенный ордер Sell limit
Транзакцию TRADE_TRANSACTION_DEAL_ADD (добавление сделки в историю) я отлавливаю в OnTradeTransaction(). И здесь же провожу проверку - точно ли эта сделка есть в торговой истории:
и затем пытаюсь получить ордер из торговой истории (ордер который инициировал эту сделку) - но получаю ошибку: HistoryOrderSelect() не может найти этот ордер в торговой истории. Очевидно, что в торговую истории сначала пишется сделка, а затем уже записывается ордер.
Какие есть идеи? Как при отловленной транзакции TRADE_TRANSACTION_DEAL_ADD получить из торговой истории и сделку и ордер?