Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
OnTradeTransaction() - это ОБРАБОТЧИК торгового события. Не важно чем вызвано событие, важно то, что событие произошло.
Выписка из документации:
OrderSend() / OrderSendAsync() - это ТОРГОВЫЕ ФУНКЦИИ.
Для OnTradeTransaction() нет никакой разницы с помощью какой функции Вы отправили торговый приказ OrderSend() или OrderSendAsync().
Так вот это я перечитал столько раз, прежде чем создать тему, ... промолчу.
Но всё-же, вывод сделал такой, что вероятность потери из кучи транзакций более вероятна, чем потеря одной транзакции в течении секунды, а может и не одной (секунды). Вот именно это я и пытаюсь выяснить. Пытаюсь выяснить ваше мнение по этому поводу. Какова вероятность потери транзакции, если они достаточно редки и одинарные?
С точки зрения вероятностей не знаю.
Придётся руководствоваться одним единственным мнением Михаила, основанного на собственном опыте. Если у него за полгода не потерялось, из кучи ордеров, ни одной транзакции, то будем считать, что один единственный ордер не потеряется.
Потихоньку осваиваю, пытаюсь не нарушать логики, но иногда получается что одно мешает другому...
Придётся руководствоваться одним единственным мнением Михаила, основанного на собственном опыте. Если у него за полгода не потерялось, из кучи ордеров, ни одной транзакции, то будем считать, что один единственный ордер не потеряется.
Потихоньку осваиваю, пытаюсь не нарушать логики, но иногда получается что одно мешает другому...
Алексей, задайте себе простой вопрос:
Что лучше, копаться в истории, после каждой команды, или 1 раз, а может, вовсе ни разу, перепроверить ордер (не сработал OnTradeTransaction)?
Проверку реализовать не просто (кстати, в моём примере есть ошибки ), но вполне реально, главное принцип - КАЖДОМУ ордеру - СВОЙ Magic.
И ещё. Я уже говорил, что каждый волен идти своим путём....
Алексей, задайте себе простой вопрос:
Что лучше, копаться в истории, после каждой команды, или 1 раз, а может, вовсе ни разу, перепроверить ордер (не сработал OnTradeTransaction)?
Проверку реализовать не просто (кстати, в моём примере есть ошибки ), но вполне реально, главное принцип - КАЖДОМУ ордеру - СВОЙ Magic.
И ещё. Я уже говорил, что каждый волен идти своим путём....
Михаил, именно простой ответ на этот простой вопрос и заставил меня всё это обсуждать. И пока я не собираюсь бросать эту затею. Но так и не могу понять, возможна-ли потеря транзакции после команды OrderSend() или активации отложки, или при закрытии позиции по стопу\тейку.
Из первого твоего ответа я понял что у тебя даже OrderSendAsync() не теряются транзакции. Пытаюсь понять это для решения, а надо-ли городить проверку при таких, достаточно редких транзакциях. Тем более учитывая выделенное.
Чисто логически, если OrderSend() не завершится пока не получит ответ, то и транзакция потеряться не может. А вот активация отложки и закрытие позиции в моей логике не помещаются. Если транзакция в этом случае срабатывает внутри МТ5 то соответственно не потеряется, а если через сервер... хз. (хотелось-бы знать) Но по интуиции думаю что с сервера приходит ответ о выполнении и активирует OnTradeTransaction().
Парни, вот такая непонятка вылезла:
Если открывать позицию, то OnTradeTransaction отрабатывает только TRADE_TRANSACTION_DEAL_ADD... Всё нормально.
Если ставить отложку, к примеру SellStop, отрабатывает только TRADE_TRANSACTION_ORDER_ADD... Тоже всё нормально.
А вот если поставить и позицию и следом отложку, то отрабатывает TRADE_TRANSACTION_DEAL_ADD и дважды TRADE_TRANSACTION_ORDER_ADD
почему так?
Парни, вот такая непонятка вылезла:
Если открывать позицию, то OnTradeTransaction отрабатывает только TRADE_TRANSACTION_DEAL_ADD... Всё нормально.
Если ставить отложку, к примеру SellStop, отрабатывает только TRADE_TRANSACTION_ORDER_ADD... Тоже всё нормально.
А вот если поставить и позицию и следом отложку, то отрабатывает TRADE_TRANSACTION_DEAL_ADD и дважды TRADE_TRANSACTION_ORDER_ADD
почему так?
Вы где-то ошиблись. И в первом и во втором случае должно быть как минимум два события: TRADE_TRANSACTION_ORDER_ADD и TRADE_TRANSACTION_DEAL_ADD. Почему Вы не получаете TRADE_TRANSACTION_ORDER_ADD не понятно.
Попробуйте switch закомментировать и вывести полный лог всех поступивших в OnTradeTransaction событий.
Вы где-то ошиблись. И в первом и во втором случае должно быть как минимум два события: TRADE_TRANSACTION_ORDER_ADD и TRADE_TRANSACTION_DEAL_ADD. Почему Вы не получаете TRADE_TRANSACTION_ORDER_ADD не понятно.
Попробуйте switch закомментировать и вывести полный лог всех поступивших в OnTradeTransaction событий.
Да пробовал конечно. Перед switch(type) в пустой строке было Print(EnumToString(type)); И распечатывало именно так как я описал.
Вот повторные экперименты.
Проверил Ваш код у себя. - Все правильно работает.
Вариант без отправки стоп ордера в догонку:
2015.02.10 18:32:03.332 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_ADD
2015.02.10 18:32:03.331 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
2015.02.10 18:32:03.327 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
Вариант с отправкой стоп-ордера:
2015.02.10 18:35:59.633 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_UPDATE
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_REQUEST
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_DEAL_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_HISTORY_ADD
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_DELETE
2015.02.10 18:35:59.629 TestOnTradeTransaction (EURUSD,M1) TRADE_TRANSACTION_ORDER_ADD
Проверил Ваш код у себя. - Все правильно работает.
Вариант без отправки стоп ордера в догонку:
Вариант с отправкой стоп-ордера:
з.ы. Время на полный цикл приятно удивило: стаблильно 60-70 мсек. Разработчики молодцы, хорошо постарались!Видимо это и есть потеря транзакций... и, в первую очередь, (вырезка из документации)
При этом очередность поступления этих транзакций в терминал не гарантирована
Василий, а это тестер или демка? У меня пробы с тестера. Интересно есть-ли разница срабатывания OnTradeTransaction в тестере и на счёте? При случае проверю.
ps; Получается так, что после потери транзакции она вдруг появляется при следующей активации функции OnTradeTransaction.
Видимо это и есть потеря транзакций... и, в первую очередь, (вырезка из документации)
Василий, а это тестер или демка? У меня пробы с тестера. Интересно есть-ли разница срабатывания OnTradeTransaction в тестере и на счёте? При случае проверю.
ps; Получается так, что после потери транзакции она вдруг появляется при следующей активации функции OnTradeTransaction.
Нет, транзакции не теряются, просто они могут приходить не в определённой последовательности.
Только TRADE_TRANSACTION_REQUEST приходит всегда первым, иначе Вы не получите билет ордера.
Читайте ВНИМАТЕЛЬНО документацию.