Автоматическое тестирование советника перед добавлением в Маркет

 

При добавлении версии в Маркете советник не проходит автоматическую проверку. Причина: "tester takes too long time". Профилирование показало, что большую часть времени занимает вывод визуальной информации на экран, с помощью CCanvas. Более подробно на скриншоте:

Таким образом 81% времени занимает стандартная функция ChartRedraw(). Как происходит автоматическое тестирование и как в данном случае можно оптимизировать код, чтобы советник мог его пройти?

 
Mihail Matkovskij:

При добавлении версии в Маркете советник не проходит автоматическую проверку. Причина: "tester takes too long time". Профилирование показало, что большую часть времени занимает вывод визуальной информации на экран, с помощью CCanvas. Более подробно на скриншоте:

Таким образом 81% времени занимает стандартная функция ChartRedraw(). Как происходит автоматическое тестирование и как в данном случае можно оптимизировать код, чтобы советник мог его пройти?

Отключать эти функции в тестере, как же еще. Кстати, спасибо за инфу, надо у себя профилировщик запустить. Для ускорения можно IsRunOnTester запускать в OnInit и запоминать значение.

// Возвращает true, если работает под тестером
bool IsRunOnTester()
{
    if(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_OPTIMIZATION))
        return true;
    return false;    
}

....
   if(!IsRunOnTester())
      ChartRedraw();

**
 

 
Alexey Volchanskiy:

Отключать эти функции в тестере, как же еще. Кстати, спасибо за инфу, надо у себя профилировщик запустить. Для ускорения можно IsRunOnTester запускать в OnInit и запоминать значение.

// Возвращает true, если работает под тестером
bool IsRunOnTester()
{
    if(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_OPTIMIZATION))
        return true;
    return false;    
}

....
   if(!IsRunOnTester())
      ChartRedraw();

**
 

MQLInfoInteger(MQL_FRAME_MODE) ?
 
Alexey Volchanskiy:

Отключать эти функции в тестере, как же еще. Кстати, спасибо за инфу, надо у себя профилировщик запустить. Для ускорения можно IsRunOnTester запускать в OnInit и запоминать значение.

// Возвращает true, если работает под тестером
bool IsRunOnTester()
{
    if(MQLInfoInteger(MQL_TESTER) || MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_OPTIMIZATION))
        return true;
    return false;    
}

....
   if(!IsRunOnTester())
      ChartRedraw();

**
 

Большое спасибо, Алексей! Буду пробовать.


Получается автоматическое тестирование работает в режиме тестера советников, на сколько я понял?


fxsaber:
MQLInfoInteger(MQL_FRAME_MODE) ?
А это обязательно?
 
В общем, ерунда всё это. Убрал все функции, где вызывается ChartRedraw() и остальные функции, связанные с визуальным отображением в тестере, но результат не изменился, советник по прежнему не проходит валидацию. В результате, что можно сделать я вообще без понятия. Обычное профилирование проходит на графике, а валидация в тестере, судя по всему... В общем, не знаю что и делать.
 
Mihail Matkovskij:
В общем, ерунда всё это. Убрал все функции, где вызывается ChartRedraw() и остальные функции, связанные с визуальным отображением в тестере, но результат не изменился, советник по прежнему не проходит валидацию. В результате, что можно сделать я вообще без понятия. Обычное профилирование проходит на графике, а валидация в тестере, судя по всему... В общем, не знаю что и делать.

Еще раз прогоните профилировщик с оптимизированным кодом - увидите новые узкие места.

 
Stanislav Korotky:

Еще раз прогоните профилировщик с оптимизированным кодом - увидите новые узкие места.

Уже прогонял, но никаких изменений, к сожалению, не увидел. Дело в том, что профилирование производится на графике, а валидация в тестере, по всей видимости. Если убрать вызов ChartRedraw() и ей подобные функции, на графике (не только в тестере), то это, конечно, улучшит результат профилирования, но советник останется без графического интерфейса, чего мне бы мне очень не хотелось. Да и без графической канвы он работал не на много быстрее... Нужно точно знать, как работает валидация и затем уже от этого отталкиваться. Есть ли где нибудь информация об этом?
 
Запускаете советник в визуальном режиме, смотрите как оно работает.
Потом по очереди, отключаете все функции, пока скорость не увеличится. Дальше копаете ту функцию...
Тестер может тормозить из-за документированной mql-команды.
 
Mihail Matkovskij:

При добавлении версии в Маркете советник не проходит автоматическую проверку. Причина: "tester takes too long time".

Я один из тех, кто натолкнулся на то, что сообщение автовалидатора совершенно не отражает причину проблемы. В моем случае автовалидатор показывал, что получается слишком длинный файл лога. После дискуссии с сервисдеском выяснилось, что проблема в ошибке при установке ордеров. Даже код ошибки подсказали. Подробнее обсуждалось на другой ветке этого форума Проблема с валидацией советника на маркете.

Отсюда вывод: пока не доработают систему отчетов автоматического валидатора, чтобы он показывал всю объективную информацию о тестировании - обращайтесь в сервисдеск.

 
Vadim Zotov:

Я один из тех, кто натолкнулся на то, что сообщение автовалидатора совершенно не отражает причину проблемы. В моем случае автовалидатор показывал, что получается слишком длинный файл лога. После дискуссии с сервисдеском выяснилось, что проблема в ошибке при установке ордеров. Даже код ошибки подсказали. Подробнее обсуждалось на другой ветке этого форума Проблема с валидацией советника на маркете.

Отсюда вывод: пока не доработают систему отчетов автоматического валидатора, чтобы он показывал всю объективную информацию о тестировании - обращайтесь в сервисдеск.

 

слишком длинный лог может быть только из-за ошибки, ну или принтов ))

сталкивался  с проблемой, когда советник не мог модифицировать позицию 130 ошибки. Хотя все роцедуры проверки ОРДЕР проходил. но.....  

 
Mihail Matkovskij:
Уже прогонял, но никаких изменений, к сожалению, не увидел. Дело в том, что профилирование производится на графике, а валидация в тестере, по всей видимости. Если убрать вызов ChartRedraw() и ей подобные функции, на графике (не только в тестере), то это, конечно, улучшит результат профилирования, но советник останется без графического интерфейса, чего мне бы мне очень не хотелось. Да и без графической канвы он работал не на много быстрее... Нужно точно знать, как работает валидация и затем уже от этого отталкиваться. Есть ли где нибудь информация об этом?

Автоматическая валидация делается тестером без визуализации. Так что любые объекты и канвасы - совершенно ни к чему (их можно отключать условно - без всякого ущерба для последующей работы программы на полноценном графике). Вы написали, что уже их отключали. Вот в этой конфигурации и посмотрите результаты профилировщика - не важно что он будет на живом графике (хотя было бы желательно профилировать в тестере, но увы такой возможности нет, лично я писал класс для собственной профилировки в тестере). Вы показали в первом посте результаты с графикой и рефрешами. По идее теперь нужна такая же картинка без этой интерактивной лабуды. Там будет видно, что дает тормоза второго порядка (т.е. все, что не связано с интерактивом).

Причина обращения: