Тестовый прогон мультивалютника на разных парах

 
Друзья! Вопрос следующий: при прогоне мультивалютника на разных парах - разный результат. Если разбить на части (по каждой паре) и каждую часть прогнать на соответствующей ей паре - один результат. Собираю в кучу и прогоняю, например на евре, - другой, на йене - третий. Основной итог примерно похож во всех случаях, но должен ли он быть одинаковым и не зависеть от того на какой паре тестируется мультивалютник
 
Forex_Noob:
Друзья! Вопрос следующий: при прогоне мультивалютника на разных парах - разный результат. Если разбить на части (по каждой паре) и каждую часть прогнать на соответствующей ей паре - один результат. Собираю в кучу и прогоняю, например на евре, - другой, на йене - третий. Основной итог примерно похож во всех случаях, но должен ли он быть одинаковым и не зависеть от того на какой паре тестируется мультивалютник? 
Вы используете OnTick() или OnTimer()?
 
paladin800:
Вы используете OnTick() или OnTimer()?
OnTick()
 
Forex_Noob:
OnTick()

Поэтому рассчёт советника зависит от прихода тика по торгуемому символу. Лучше OnTimer():

int OnInit()
{
 EventSetTimer(1); // вызов рассчёта советника каждую 1 сек независимо от прихода тиков
 //...
}
void OnTimer() // вместо OnTick
{
 // тело советника
}
void OnDeinit(const int reason)
{
 //...
 EventKillTimer():
}
 
paladin800:

Поэтому рассчёт советника зависит от прихода тика по торгуемому символу. Лучше OnTimer():

Т.е. если советкни тестируется на йене, то и евра и фунт ждут когда придет тик по йене? И пока его нет, нет тиков для советника и по евре и прочим?
 
Forex_Noob:
Т.е. если советкни тестируется на йене, то и евра и фунт ждут когда придет тик по йене? И пока его нет, нет тиков для советника и по евре и прочим?
Да. Для рассчёта любого советника/индикатора нужно "событие", которое провоцирует вызов рассчёта. В OnTick это происходит с приходом тика то тому символу, на котором торгует/тестируется программа. При OnTimer событие происходит по установленному пользователем отрезку времени, в моём примере выше каждую 1 сек.
 
paladin800:
Да. Для рассчёта любого советника/индикатора нужно "событие", которое провоцирует вызов рассчёта. В OnTick это происходит с приходом тика то тому символу, на котором торгует/тестируется программа. При OnTimer событие происходит по установленному пользователем отрезку времени, в моём примере выше каждую 1 сек.
Попробовал. Выставил секунду. Срок теста увеличился в десятки раз?:( Если в цифрах, то тест вместо 40 минут увеличился до 20 часов... Думаю, может на каждую пару свой кусок кода выставить (в виде автономного советника)и не заморачиваться с общей сборкой в виде мультивалютника?
 
Forex_Noob:
Попробовал. Выставил секунду. Срок теста увеличился в десятки раз?:(

В тестере "по тику" этот тик и так генерируется на баре М1, попробуйте менее 60 сек, напр. 58 сек. И еще почитайте статью Рецепты MQL5 - Мультивалютный эксперт: пример простой, точной и быстрой схемы , там в начале показано как можно вызывать событие рассчёта советника. Да и вообще вся статья полезна.

P.S.: 1 секунда - для реальной торговли. В любом случае OnTick для мультиков однозначно не подходит.

 
paladin800:
В тестере "по тику" этот тик и так генерируется на баре М1, попробуйте менее 60 сек, напр. 58 сек. И еще почитайте статью Рецепты MQL5 - Мультивалютный эксперт: пример простой, точной и быстрой схемы , там в начале показано как можно вызывать событие рассчёта советника. Да и вообще вся статья полезна.
ок. спасибо.
 
С OnTick() интересная ситуация: если новый тик приходит, а код еще не отработан по предыдущему тику, то новый тик игноритсЯ, а что происходит в случае OnTimer() если вызов кода по нему происходит раньше окончания работы кода по предыдущему вызову? Что приоритетной- новый вызов или окончание предыдущего?
 
Forex_Noob:
С OnTick() интересная ситуация: если новый тик приходит, а код еще не отработан по предыдущему тику, то новый тик игноритсЯ, а что происходит в случае OnTimer() если вызов кода по нему происходит раньше окончания работы кода по предыдущему вызову? Что приоритетной- новый вызов или окончание предыдущего?
Окончание предыдущего. Новое событие вызова рассчёта игнорируется если программа ещё обрабатывает предыдущий. Кстати, только что быстро прооптимизировал свой советник и обнаружил что результаты по 1 сек и 58 сек не идентичны.