Всем доброго времени суток.
Появилась необходимость протестировать торговый алгоритм на реальных тиках брокера "Открытие".
Так вот, алгоритм показывает различные результаты в режиме онлайн и в тестере в режиме реальных тиков.
Исходя из этого следующим шагом был произведен сбор тиков в реальном времени (реальные тики) и их сравнение с тиковой историей (исторические тики), получаемой через функцию CopyTicksRange() .
Тики собирались на фьючерсе SBRF за 21.01.2020.
Получились интересные результаты и появились некоторые вопросы.
1. Количество реальных тиков и исторических тиков существенно отличается, но тики в начале и конце торгового дня одинаковые.
Возможно на это влияет особенность обработчика OnTick(), который может пропускать обработку тиков.
2. Больше половины исторических тиков, помимо стандартных флагов (TICK_FLAG_BID ... и т.д.) имеет дополнительный включенный флаг 9 бита.
На реальных тиках такого не наблюдается - нет ни одного тика с включенным флагом 9 бита.
3. Какой либо системности в отличии реальных и исторических тиков, как и включение 9 бита в исторических тиках обнаружить не удалось.
Исторические тики могут полностью соответствовать реальным, при этом 9 бит в флаге у них может быть включен или отключен.
Реальные и исторические тики могут не соответствовать даже в период низкой активности в торговле, когда поступление тиков в терминал не такое интенсивное.
И соответственно вопросы:
К разработчикам - что означает 9 бит в флаге тика?
И к сообществу - кто нибудь сталкивался с подобной коллизией?
Как проводите тестирование алгоритмов на реальных тиках? Только онлайн?
В приложении файлы со сборщиком и анализатором тиков.
И реальные тики по SBRF-3.20 за 21.01.2020.
Насмешили Вы своим сборщиком тиков :)
Возьмите за основу "Лента всех сделок"
https://www.mql5.com/ru/code/16210
Доюавлено
И забудьте о тестере для Биржевых инструментов
- www.mql5.com
Насмешили Вы своим сборщиком тиков :)
Возьмите за основу "Лента всех сделок"
https://www.mql5.com/ru/code/16210
Доюавлено
И забудьте о тестере для Биржевых инструментов
Приведенный пример всего лишь один из способов агрегирования ленты сделок, и опять же обращение идет к истории.
Чего не хотелось бы делать, так как это тормозит алгоритм. В первую очередь интересуют те тики, которые обрабатываются событием OnTick().
Забыть о тестере для Биржевых инструментов в принципе или о тестере в МТ5?
Приведенный пример всего лишь один из способов агрегирования ленты сделок, и опять же обращение идет к истории.
1. Чего не хотелось бы делать, так как это тормозит алгоритм. В первую очередь интересуют те тики, которые обрабатываются событием OnTick().
2. Забыть о тестере для Биржевых инструментов в принципе или о тестере в МТ5?
1. Ничего не тормозит и тормозить не будет.
Вам дали готовое решение, которое просто нужно подправить для своих нужд.
Событие OnTick() не отображает все изменения в стакане, т.е учитывает не все тики!
Вот Вам простой пример для проверки
//+------------------------------------------------------------------+ //| Ticks_test.mq5 | //| Copyright 2019 prostotrader | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019 prostotrader" #property link "https://www.mql5.com" #property version "1.00" //--- bool is_book; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { is_book = MarketBookAdd(Symbol()); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- if(is_book == true) MarketBookRelease(Symbol()); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { Print(__FUNCTION__ + " Tick is done!"); } //+------------------------------------------------------------------+ //| BookEvent function | //+------------------------------------------------------------------+ void OnBookEvent(const string &symbol) { if(Symbol() == symbol) { Print(__FUNCTION__ + " Tick is done!"); } } //+------------------------------------------------------------------+
2020.01.23 16:56:53.226 Ticks_test (GOLD-3.20,M1) OnTick Tick is done! 2020.01.23 16:56:53.226 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done! 2020.01.23 16:56:53.712 Ticks_test (GOLD-3.20,M1) OnTick Tick is done! 2020.01.23 16:56:53.712 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done! 2020.01.23 16:56:53.930 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done! 2020.01.23 16:56:53.996 Ticks_test (GOLD-3.20,M1) OnTick Tick is done! 2020.01.23 16:56:53.996 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done! 2020.01.23 16:56:54.016 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done! 2020.01.23 16:56:54.280 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done! 2020.01.23 16:56:54.392 Ticks_test (GOLD-3.20,M1) OnBookEvent Tick is done!
2. Для Биржевых инструментов (уже писал что для Биржевых)
Добавлено
Если Вы решили "переползти" с ФОРЕКСа на Биржу, то рекомендую найти топик в этом
разделе "В помощь начинающим" и детально ознакомится с ним.
На Бирже Стакан, а не OnTick() всему "голова".1. Ничего не тормозит и тормозить не будет.
Вам дали готовое решение, которое просто нужно подправить для своих нужд.
Событие OnTick() не отображает все изменения в стакане, т.е учитывает не все тики!
Вот Вам простой пример для проверки
2. Для Биржевых инструментов (уже писал что для Биржевых)
Добавлено
Если Вы решили "переползти" с ФОРЕКСа на Биржу, то рекомендую найти топик в этом
разделе "В помощь начинающим" и детально ознакомится с ним.
На Бирже Стакан, а не OnTick() всему "голова".1. Вы правы. Событие OnTick() не совсем связано с событием OnBookEvent().
Первое событие обрабатывает приход новых тиков - изменение котировок, биржевые сделки.
Второе - изменение стакана, что не всегда приводит к биржевой сделке.
Как и биржевая сделка не обязательно должна пройти через стакан.
Т.е. можно сказать, что первое событие относится к ленте сделок, а второе к стакану.
2. Что использовать для анализа и принятия решения - ленту сделок или стакан или оба варианта, зависит от торгового алгоритма.
Похоже придется для анализа ленты сделок использовать событие OnTimer() с миллисекундным периодом.
Буду дальше экспериментировать.
1. Вы правы. Событие OnTick() не совсем связано с событием OnBookEvent().
Первое событие обрабатывает приход новых тиков - изменение котировок, биржевые сделки.
Второе - изменение стакана, что не всегда приводит к биржевой сделке.
Как и биржевая сделка не обязательно должна пройти через стакан.
Т.е. можно сказать, что первое событие относится к ленте сделок, а второе к стакану.
2. Что использовать для анализа и принятия решения - ленту сделок или стакан или оба варианта, зависит от торгового алгоритма.
Похоже придется для анализа ленты сделок использовать событие OnTimer() с миллисекундным периодом.
Буду дальше экспериментировать.
Плохая идея использовать таймер.
Вы уж определитесь, что Вы хотите - работать в реальном времени или по таймеру...
У Вас в голове "каша".
Любое изменение стакана и есть тик, включающий в себя и "ленту сделок".
Сработал OnBookEvent(), это значит, что:
1. Произошла сделка или
2. Появился новый ASK или
3. Появился новый Bid, или
4. Кто-то снял свой отложенный ордер или
5. Изменился объем ASK или
6 Изменился объем Bid
Все это отражается в OnBookEvent() ....
Удачи!
Добавлено
В отличии от ФОРЕКСа, где Вы торгуете с компьютером ДЦ,
на Бирже у Вас реальные аппоненты (Физ. лица и Юрики)!
Биржа только "сводит" Ваши ордера (не бесплатно, конечно :) ).
- www.mql5.com
В отличии от ФОРЕКСа, где Вы торгуете с компьютером ДЦ,
на Бирже у Вас реальные аппоненты (Физ. лица и Юрики)!
Биржа только "сводит" Ваши ордера (не бесплатно, конечно :) ).
Про ECN не слыхали?
- 2019.07.25
- www.mql5.com
Зачем Вы пришли сюда?
Продолжайте искать Грааль на ФОРЕКСе...
А что тут ваша частная территория?
И невежливо указывать малознакомым людям что им делать. Это показывает низковатый уровень вашего развития.
К разработчикам - что означает 9 бит в флаге тика?
Про 9-й бит не знаю, спрашивали про недокументированный 7-й:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
Slava, 2018.12.04 11:09
Alain Verleyen:
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 2 tick: 2018.12.03 00: 52: 27.743 1.13335 / 1.13348 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 3 tick: 2018.12.03 00: 52: 27.821 1.13327 / 1.13343 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 4 tick: 2018.12.03 00: 52: 27.888 1.13326 / 1.13343 / 0.00000 0 флаги: 226
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 5 tick: 2018.12.03 00: 52: 27.965 1.13327 / 1.13345 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 6 tick: 2018.12.03 00: 52: 28.194 1.13328 / 1.13346 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 7 tick: 2018.12.03 00: 52: 28.265 1.13328 / 1.13346 / 0.00000 0 флаги: 96
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 8 tick: 2018.12.03 00: 52: 28.327 1.13326 / 1.13344 / 0.00000 0 флаги: 230
2018.12.03 09: 58: 06.898 TicksInfo (EURUSD, M5) EURUSD: 9 tick: 2018.12.03 00: 52: 28.405 1.13326 / 1.13344 / 0.00000 0 флаги: 96
2018.12.03 09: 58: 06.899 TicksInfo (EURUSD, M5) EURUSD: 10 tick: 2018.12.03 00: 52: 28.809 1.13326 / 1.13344 / 0.00000 0 флаги: 96
2018.12.03 09: 58: 06.899 TicksInfo (EURUSD, M5) EURUSD: 11 tick: 2018.12.03 00: 52: 29.289 1.13326 / 1.13344 / 0.00000 0 флаги: 96
Очевидно, что флаг бит на бит 7 (значение 128, недокументированный ), возможно ли знать значение?
Это - служебный флаг, который выставляет датафид, если у тика по какой-либо причине не был выставлен флаг TICK_FLAG_BID, при том что тик должен быть применён к бару.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем доброго времени суток.
Появилась необходимость протестировать торговый алгоритм на реальных тиках брокера "Открытие".
Так вот, алгоритм показывает различные результаты в режиме онлайн и в тестере в режиме реальных тиков.
Исходя из этого следующим шагом был произведен сбор тиков в реальном времени (реальные тики) и их сравнение с тиковой историей (исторические тики), получаемой через функцию CopyTicksRange() .
Тики собирались на фьючерсе SBRF за 21.01.2020.
Получились интересные результаты и появились некоторые вопросы.
1. Количество реальных тиков и исторических тиков существенно отличается, но тики в начале и конце торгового дня одинаковые.
Возможно на это влияет особенность обработчика OnTick(), который может пропускать обработку тиков.
2. Больше половины исторических тиков, помимо стандартных флагов (TICK_FLAG_BID ... и т.д.) имеет дополнительный включенный флаг 9 бита.
На реальных тиках такого не наблюдается - нет ни одного тика с включенным флагом 9 бита.
3. Какой либо системности в отличии реальных и исторических тиков, как и включение 9 бита в исторических тиках обнаружить не удалось.
Исторические тики могут полностью соответствовать реальным, при этом 9 бит в флаге у них может быть включен или отключен.
Реальные и исторические тики могут не соответствовать даже в период низкой активности в торговле, когда поступление тиков в терминал не такое интенсивное.
И соответственно вопросы:
К разработчикам - что означает 9 бит в флаге тика?
И к сообществу - кто нибудь сталкивался с подобной коллизией?
Как проводите тестирование алгоритмов на реальных тиках? Только онлайн?
В приложении файлы со сборщиком и анализатором тиков.
И реальные тики по SBRF-3.20 за 21.01.2020.