"Old tick" при тестировании на реальных тиках

 

Здравствуйте,

заметил такую особенность нарушающую результаты тестов.

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


Вот как нарушаются результаты тестирования и оптимизации (оптимизация или тест с 2016-09-01 по 2016-10-31):

После последнего пятничного тика 2016-10-28 пошли старые тики, на рисунке это видно в конце как ровную линию баланса и прыгающий эквити. И в конце при завершении расчета происходит закрытие открытой позиции по цене случайного старого тика и убыточный результат теста становится прибыльным. (При последней пятничной сделке был убыток в $100, а старые тики подняли эквити на $200) В результате оптимизация получается неправильной.

Концовка лог файла из терминала (начала не могу увидеть, т.к. файл раздут до 2,3 Гг сообщениями о старых тиках, текстовые редакторы отказываются открывать такой файл)

2016.11.07 23:53:54    Core 1    old tick EURUSD 2016.10.04 23:59:59 (2016.10.28 23:59:59)
2016.11.07 23:53:54    Core 1    old tick EURUSD 2016.10.04 23:59:59 (2016.10.28 23:59:59)
2016.11.07 23:53:54    Core 1    2016.10.04 23:59:59   position closed due end of test at 1.12025 [#320 buy 0.08 EURUSD 1.09107947]
2016.11.07 23:53:54    Core 1    2016.10.04 23:59:59   deal #536 sell 0.08 EURUSD at 1.12025 done (based on order #536)
2016.11.07 23:53:54    Core 1    2016.10.04 23:59:59   deal performed [#536 sell 0.08 EURUSD at 1.12025]
2016.11.07 23:53:54    Core 1    2016.10.04 23:59:59   order performed sell 0.08 at 1.12025 [#536 sell 0.08 EURUSD at 1.12025]
....
2016.11.07 23:53:54    Core 1    final balance 1130.55 USD

Пишет, что последняя сделка была по цене от 2016.10.04 23:59:59 Close= 1.12025, но должно быть по цене от 2016.10.28 23:59:59 Close = 1,09822 . Отсюда и появились лишние $200.


Проблема решается установкой конца тестирования на любые кроме воскресенья или понедельника даты (чтобы не было прохода по субботе или воскресенью). Тест с 2016-09-01 по 2016-10-29 завершился нормально, без старых тиков.


2016.11.08 00:24:24.346    Core 1    2016.10.28 23:46:53   market sell 0.01 EURUSD (1.09864 / 1.09867 / 1.09864)
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:46:53   deal #535 sell 0.01 EURUSD at 1.09864 done (based on order #535)
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:46:53   deal performed [#535 sell 0.01 EURUSD at 1.09864]
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:46:53   order performed sell 0.01 at 1.09864 [#535 sell 0.01 EURUSD at 1.09864]
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:59:56   position closed due end of test at 1.09816 [#320 buy 0.08 EURUSD 1.09107947]
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:59:56   deal #536 sell 0.08 EURUSD at 1.09816 done (based on order #536)
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:59:56   deal performed [#536 sell 0.08 EURUSD at 1.09816]
2016.11.08 00:24:24.346    Core 1    2016.10.28 23:59:56   order performed sell 0.08 at 1.09816 [#536 sell 0.08 EURUSD at 1.09816]

2016.11.08 00:24:24.346    Core 1    final balance 953.83 USD

В общем - надо следить за конечной датой теста... .И за датой конца бектеста и начала форварда, если тест с форвардом.
 

На огромном файле начало появления старых тиков не смог посмотреть. Вот для примера начало появления старых тиков на коротком тесте с 2016-09-30 по 2016-01-02 (с пятницы до воскресенья):

23:10:00.896    Core 1    2016.09.30 20:55:32   order performed sell 0.01 at 1.12317 [#16 sell 0.01 EURUSD at 1.12317]  - последняя пятничная сделка
23:10:00.896    Core 1    EURUSD : real ticks begin from 2016.09.01 00:00:00
23:10:00.896    Core 1    old tick EURUSD 2016.09.30 00:00:13 (2016.09.30 23:59:59)  - системное сообщение о старом тике 2016.09.30 00:00:13
23:10:00.896    Core 1    old tick EURUSD 2016.09.30 00:00:31 (2016.09.30 23:59:59)
23:10:00.896    Core 1    old tick EURUSD 2016.09.30 00:00:32 (2016.09.30 23:59:59)
23:10:00.896    Core 1    old tick EURUSD 2016.09.30 00:00:32 (2016.09.30 23:59:59)
23:10:00.896    Core 1    old tick EURUSD 2016.09.30 00:00:33 (2016.09.30 23:59:59)
...................

23:10:09.757    Core 1    old tick EURUSD 2016.09.30 23:59:56 (2016.09.30 23:59:59)
23:10:09.757    Core 1    old tick EURUSD 2016.09.30 23:59:56 (2016.09.30 23:59:59)
23:10:09.757    Core 1    2016.09.30 23:59:59   position closed due end of test at 1.12434 [#12 sell 0.03 EURUSD 1.12156111]
23:10:09.757    Core 1    2016.09.30 23:59:59   deal #17 buy 0.03 EURUSD at 1.12434 done (based on order #17)
23:10:09.757    Core 1    2016.09.30 23:59:59   deal performed [#17 buy 0.03 EURUSD at 1.12434]
23:10:09.757    Core 1    2016.09.30 23:59:59   order performed buy 0.03 at 1.12434 [#17 buy 0.03 EURUSD at 1.12434]

Старых тиков приходит огромное количество, не исключено, что приходят абсолютно все тики второй раз, т.к. начинаются с  2016.09.30 00:00:13, т.е. с начала тестирования.

Для отлавливания старых тиков добавил такой код:

datetime last_tick_time=0;
void OnTick()
  {
  if(last_tick_time>TimeCurrent()){return;}//old tick - старый тик

   last_tick_time=TimeCurrent();

.....

}

Надеялся, что if(last_tick_time>TimeCurrent()){return;} исправит ситуацию, но это не помогло, т.к. старые тики меняют цену в тестере, и завершающим трейдом становится закрытие позиции по неверной цене.

 

Система - Win7. MT5 - 1455. Ситуация наблюдалась и на др билдах и др. советнике. Но только сейчас разобрался и понял, что старые тики меняют результат тестирования и оптимизации.

У меня одного такое или у кого-то еще бывает?

 
elibrarius:

Система - Win7. MT5 - 1455. Ситуация наблюдалась и на др билдах и др. советнике. Но только сейчас разобрался и понял, что старые тики меняют результат тестирования и оптимизации.

У меня одного такое или у кого-то еще бывает?

А если тестировать больше недели, на выходные реагирует? Я такого не замечал, правда и не ставил дату окончания на выходные. Напишите в сервисдек со скриншотами, логом и номером билда.
 
У меня то же самое. Причем появилось недавно, на прошлой неделе. Оптимизирую постоянно на реальных тиках, с различными конечными датами и раньше никогда такого не было. Варианта два. Либо это что-то с базой тиков у Робофорекса, либо баг МТ5.
 
elibrarius:

Система - Win7. MT5 - 1455. Ситуация наблюдалась и на др билдах и др. советнике. Но только сейчас разобрался и понял, что старые тики меняют результат тестирования и оптимизации.

У меня одного такое или у кого-то еще бывает?

У этого бага с Old tick есть ещё один интересный эффект - тестер работает в режиме "машины времени", то есть искажается "прошлое". Например, если запустить тестирование с финалом в выходной день, то меняется результат не только последнего предшествующего ошибке трейда, но и на всю глубину истории (возможно и какой-то ограниченный временной промежуток, но тиковая история небольшая, поэтому затрагивает всю, по крайней мере у меня так).
Yury Golyakov:
У меня то же самое. Причем появилось недавно, на прошлой неделе. Оптимизирую постоянно на реальных тиках, с различными конечными датами и раньше никогда такого не было. Варианта два. Либо это что-то с базой тиков у Робофорекса, либо баг МТ5.
Я такой глюк заметил ещё пару месяцев назад, может даже чуть больше.
 
Alexey Volchanskiy:
А если тестировать больше недели, на выходные реагирует? Я такого не замечал, правда и не ставил дату окончания на выходные. Напишите в сервисдек со скриншотами, логом и номером билда.

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

 
Yury Golyakov:
У меня то же самое. Причем появилось недавно, на прошлой неделе. Оптимизирую постоянно на реальных тиках, с различными конечными датами и раньше никогда такого не было. Варианта два. Либо это что-то с базой тиков у Робофорекса, либо баг МТ5.
тоже встречал такое. тестил на альпари,так что вряд ли котиры дц виноваты. тест при этом бесконечно долго тестируется,я конца не дожидался.отключал
 
Alexey Volchanskiy:
А если тестировать больше недели, на выходные реагирует?

Да. В первом примере тест за 2 месяца. Во втором за 2 дня. В обоих этот глюк.

Ситуацию наблюдаю с самого появления реальной тиковой истории в МТ5. Так что это не что-то новое... я тестирую на Ал...ри, итого по 2-м разным брокерам наблюдается - значит проблема в МТ5.

 

1. На каком торговом сервере наблюдается описанная проблема? Какой символ? Кроме EURUSD на каком-либо символе воспроизводится?

2. Битность тестера? x86/x64 или без разницы

3. Будут ли ошибки old tick, если тестировать "пустого" эксперта (не производящего торговых операций)?

4. Попробуйте стереть подпапку bases в папке тестера. Запустить тестирование.

5. Попробуйте стереть подпапку bases в папке тестера и подпапку bases\<имя торгового сервера>\ticks. Запустить терминал, запустить тестирование

 
Спасибо за предоставленный код. Он помог нам найти ошибку с олд тиками.
Причина обращения: