Потеря тиковых данных на срочном рынке Московской биржи. - страница 4

 
madpower2000:

Справедливое замечание, но вы можете понять, что текущая транзакция окончилась, только если уже пришел следующий тик и вы сравнили  их  timestamp. Т.е. Вам нужно ждать следущий тик и возможно этот тик тоже часть уже другой транзакции.  Иначе получается что вы запускаете торговую логику в середине атомарной транзакции, бэктестер эмулирует исполнение вашего ордера по ценам не имеющего никого отношения к реальности. Так что получается, что  OnTick() логично чтобы вызывался по окончании транзакции. Мне кажется это FX - наследие, т.к. MT5 изначально под него разрабатывался, а микроструктура у LOB/Биржевого рынка и FX все-таки различна, от этого все вышеперечисленные проблемы и вопросы.

P.S. Хотелось чтобы уже кто-то из разработчиков MetaQuotes уже вернулся с Лимассольского пляжа и уже прокомментировал свое видение ситуации :)

Не говорю, что можно верить тестеру в плане совпадения с реалом прихода торговых тиков. Нет. Тики в терминал и тестер приходят по-разному.

 
madpower2000:

Я просто хотел обратить внимание разработчиков, что поведение одного и того же кода в бэктестрее и реальных торгах коде отличается, что по моему скромному мнению не есть хорошо.

Не получится добиться одинакового поведения в тестере и онлайн, в первую очередь — из-за особенностей исполнения ордеров.

А ОнТик с буферизацией вы можете реализовать самостоятельно, используя CopyTicksRange. И да, для 99% пользователей МТ5 он был бы губителен.

 
Andrey Khatimlianskii:

Не получится добиться одинакового поведения в тестере и онлайн, в первую очередь — из-за особенностей исполнения ордеров.

А ОнТик с буферизацией вы можете реализовать самостоятельно, используя CopyTicksRange. И да, для 99% пользователей МТ5 он был бы губителен.

Буду благодарен, ели вы более детально поясните свою мысль про особенности исполнения ордеров, при чем здесь она в данном контексте?

И бог с ней с буферизацией, let it be! Но пусть вызов OnTick(), будет консистентным во время бэктеста и реальных торгов.

 
madpower2000:

Буду благодарен, ели вы более детально поясните свою мысль про особенности исполнения ордеров, при чем здесь она в данном контексте?

Моментальное исполнение ордеров в тестере невозможно в реале. За время исполнения будут пропущены тики.


madpower2000:

И бог с ней с буферизацией, let it be! Но пусть вызов OnTick(), будет консистентным во время бэктеста и реальных торгов.

Говорю же, при желании вы можете "проигрывать" все пропущенные тики, используя CopyTicksRange. Только что это даст?

 
Andrey Khatimlianskii:

Моментальное исполнение ордеров в тестере невозможно в реале. За время исполнения будут пропущены тики.


Говорю же, при желании вы можете "проигрывать" все пропущенные тики, используя CopyTicksRange. Только что это даст?

"Тестер стратегий позволяет эмулировать сетевые задержки при исполнении торговых операций советником, чтобы приблизить процесс тестирования к реальным торговым условиям. Т.е. между выставлением торгового приказа экспертом и его исполнением тестером стратегий вставляется определенная временная задержка. С момента отсылки приказа и до его исполнения цена может измениться. Таким образом, пользователь может оценить, каким образом влияет скорость обработки торговых операций на результативность торговли."

В данный момент если Вы запустите Ваш код в бэктестере,  OnTick() будет вызвана в зависимости от данных 10 000 раз, если бы Вы запустили тот же код на реальных данных то OnTick() будет вызвана, скажем, 5 000 раз. На одних и тех же данных!

CopyTicksRange() как говориться в помощь, но при бэктесте и реальный торговле вы будите вызывать эту функцию в разные моменты и получать разные результаты, соотвественно торговая логика будет срабатывать по разному...

 
Alexey Kozitsyn:

Не говорю, что можно верить тестеру в плане совпадения с реалом прихода торговых тиков. Нет. Тики в терминал и тестер приходят по-разному.

"Каждый тик на основе реальных тиков — максимально приближенный к реальным условиям режим. Используются реальные тики, накопленные брокером по финансовым инструментам. Моделирование не осуществляется. Тиковые данные имеют большой размер, при первом запуске тестирования их скачивание с сервера брокера может занять продолжительное время."

Ну раз разработчики сделали реальные тики, осталось немножечко "подкрутить" бэктестр, чтобы он их правильно интерпретировал...
 
madpower2000:

"Каждый тик на основе реальных тиков — максимально приближенный к реальным условиям режим. Используются реальные тики, накопленные брокером по финансовым инструментам. Моделирование не осуществляется. Тиковые данные имеют большой размер, при первом запуске тестирования их скачивание с сервера брокера может занять продолжительное время."

Ну раз разработчики сделали реальные тики, осталось немножечко "подкрутить" бэктестр, чтобы он их правильно интерпретировал...

Тики одинаковые, но они транслируются строго по одному (в тестере).

 
madpower2000:

"Тестер стратегий позволяет эмулировать сетевые задержки при исполнении торговых операций советником, чтобы приблизить процесс тестирования к реальным торговым условиям. Т.е. между выставлением торгового приказа экспертом и его исполнением тестером стратегий вставляется определенная временная задержка. С момента отсылки приказа и до его исполнения цена может измениться. Таким образом, пользователь может оценить, каким образом влияет скорость обработки торговых операций на результативность торговли."

В данный момент если Вы запустите Ваш код в бэктестере,  OnTick() будет вызвана в зависимости от данных 10 000 раз, если бы Вы запустили тот же код на реальных данных то OnTick() будет вызвана, скажем, 5 000 раз. На одних и тех же данных!

CopyTicksRange() как говориться в помощь, но при бэктесте и реальный торговле вы будите вызывать эту функцию в разные моменты и получать разные результаты, соотвественно торговая логика будет срабатывать по разному...

С помощью "произвольной задержки" в тестере вы можете и там получить 5 000 вызовов ОнТик вместо 10 000, тогда и CopyTicksRange будет работать так же, как в реале.

Вопрос прежний: зачем это вам?


Если алгоритм требует 100% данных для анализа, то без CopyTicksRange не обойтись, полагаться на отсутствие пропусков не нужно.

@fxsaber, например, вообще торгует "виртуально", анализируя все тики, а потом синхронизирует виртуальное окружение с реальным. Это дает 100% воспроизводимость сигналов при повторном тесте и некоторые удобства при частичном исполнении и реджектах.

Но нужно ли это на самом деле — я не знаю.