Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
можно обойтись без таймера (всё зависит от конкретной задачи).
Зачем множество решений зависящих от конкретных задач, когда есть одно универсальное решение?
Имелось ввиду срабатывание отложенного ордера (стоящего в очереди), да и способ отправки ордера
тоже имеет значение (ассинхронный или нет).
Откуда ушли, туда же и пришли. В итоге все сводится к тому, что надо писать функцию анализирующую историю и только на основании анализа истории принимать решение. Если надо ускориться на 33 тысячных секунды, то дополнительно вызывать эту функцию из OnTradeTransaction()... из таймера... откуда угодно.
Откуда ушли, туда же и пришли. В итоге все сводится к тому, что надо писать функцию анализирующую историю и только на основании анализа истории принимать решение. Если надо ускориться на 33 тысячных секунды, то дополнительно вызывать эту функцию из OnTradeTransaction()... из таймера... откуда угодно.
Выходит действительно так получается. Только сейчас понял, что можно даже в OnTradeTransaction не анализировать чего там пришло, а просто на дурака вызывать функцию анализирующую историю, следуя логике "если что появилось, то оно появилось, а если нет - то его нет":))
Dmitry Fedoseev, Vasiliy Sokolov
Глобально Вы правы, но бывают ТС в которых просто необходимо как можно быстрее ответить на сообщение об отправленном ордере (н-р парный трейдинг)
И в OnTradeTransaction TRADE_TRANSACTION_DEAL_ADD позволяет оперативно отреагировать на совершение первой сделки.
Добавлено
Вот подтверждение моих слов (реал)
Ответная сделка(ки) произошла через 14-16 мс.
На самом деле, быстрее (пока сервер обработал ответ биржи и отправил в терминал)
А время реагирования измеряется микросекундами
Добавлено
Совсем забыл...
Если установлен отложенный ордер (стоит в стакане в очереди), то по таймеру (OnTick(), OnBookEvent()), мы будем просто бессмысленно "долбить" функцию проверки торгового окружения!
И в истории ордера не будет!
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Очерёдность приходящих транзакций
Viktar Dzemikhau, 2018.08.11 13:23
Проще всего говорить абстрактно. А конкретно, как мне тогда принтануть транзакции, что бы была видно цепочка произошедших транзакций в том порядке, в котором они и происходят. Иначе все эти фразы, что кто-то что-то не понимает не актуальны. У меня всё работает. Но вот вывести в лог в адекватной последовательности хочется. А оно не выводится. Поэтому если это так и задумано, есть вариант вернутся к обычным обработкам событий, который более наглядны и стабильны. А я как посмотрю, все говорят о типа что кто-то что-то не догнал, хотя конкретным примеров я так и не увидел. В статье Дениса Кириченко, кстати, так же, как у меня всё принтуется. Но там же принты выводятся в правильном виде. Подгонка или нет, не скажу. Но вижу, что здесь что-то не то..Верно подмечено, что-то не то... наверное случайность...
Правда у автора есть такой пассаж в упомянутой статье:
4. Универсальный обработчик
Давайте посмотрим глазами конечного пользователя на программу, которая умеет работать с событием TradeTransaction. Наверное, пользователю понадобится именно та, которая сможет успешно работать как с ордерами, так и с позициями. Тогда программист должен написать код для обработчика OnTradeTransaction() таким образом, чтобы последний умел идентифицировать все транзакции и их комбинации, независимо от того, что обрабатывалось – позиция или ордер. Ну и желательно, чтобы по завершению обработки серии транзакций программа смогла бы сказать, какая торговая операция была выполнена.
В моём примере используется последовательная обработка транзакций. Однако разработчик языка MQL5 утверждает следующее:
Поэтому если возникает необходимость создать что-то работающее близко к идеалу, нужно совершенствовать предлагаемый мною пример и сделать обработку транзакций независимой от очерёдности поступления транзакций...
Виктар, коллеги Вам много сделали дельных замечаний и дали советов. Пробуйте, тестируйте, и всё получится :-))
Кстати, можно придумать какой-нибудь контейнер. Заполняться он будет транзакциями, которые могут поступать без "правильной" последовательности. И как только контейнер заполнится, то он сообщит, что произошло какое-то торговое событие. Вот как-то так...
P.S. А я думал, что в августе все на пляже :-))
...
P.S. А я думал, что в августе все на пляже :-))
Лично я уже свое отвалялся на горячем песочке:)
Да, совершенно точно. При работе с OnTradeTransaction нужно всегда писать две независимые логики: одну для OnTradeTranaction, другую альтернативную, например проверять состояние позиций и ордеров по таймеру. При том, если сработала логика для OnTradeTranaction делать так, что бы по OnTimer логика уже не срабатывала (исключить двойное срабатывание). Это серьезное усложнение алгоритма.
Единственное преимущество OnTradeTranaction в Вашем случае, на сколько я понимаю, это скорость. Вы по пришедшему событию узнаете о изменениях сразу, не дожидаясь нового тика или вызова таймера. Однако если делать логику по таймеру с временем 100 мсек., то в среднем Вы будете узнавать об изменениях на рынке на всего на 50 мсек позже, чем они фактически произойдут. И это без всяких усложнений логики. Выходит что топорный таймер делает тоже, почти также быстро и гораздо надежней. Как-то вот так получается.
Это уже излишество. Проверять то, что "работает", а потом то, чем проверяешь "проверять". Ну можно ещё проверить то, чем будет проверять OnTradeTranaction(). И будет совсем идиотизм. Я ни кого не оскорбляю своим постом. Дело в том, что у меня сложились такие мысли, когда я про это думал.
Есть 2 вариант. Использовать проверки событий по тиково или по таймеру. Другого нет. Я сам пока что не решил. По ходу, таймер удобен тем, что таким образом можно отделить логику совы от логики событий. (ещё больше отделить т.к. у меня и так к каждой сове прилагается класс Signal, в котором формируется торговый сигнал.
С другой стороны, тики в разное время дня и ночи риходят с разными интервалами. И чётко задать время не получится. А раньше прихода очередного типа производить проверку не резон т.к. если новый тик не пришёл, то есс-но событий новый не произойдёт, что и так понятно.
--> Ну и кк это можно сделать? Дублировать проверку? Т.е. тоже самое, только как-то с другой стороны без транзакции писать и узнавать те же данные? Тогда зачем эот чудесный метод, если всё за него нужно перепроверять?
МТ-5 - это приложение Клиент- Сервер и т.к ответы сервера приходят ассинхронно, то какие-то проверки торгового окружения - неизбежны.
Сегодня думаю напишу. Возможно даже, в течение часа-двух.
Выходит действительно так получается. Только сейчас понял, что можно даже в OnTradeTransaction не анализировать чего там пришло, а просто на дурака вызывать функцию анализирующую историю, следуя логике "если что появилось, то оно появилось, а если нет - то его нет":))
И как это понимать? Ну если ничего там не анализировать, тогда можно и в таймере историю вызвать и потиково. Нафига нам тогда OnTradeTransaction() ?
Да и если не отлавливать событие, как Вы выразились, то OnTradeTransaction() можно выкинуть и лопатить историю без него. Странные у Вас мысли..