Отладка функций по событиям тестера.

 

  Подскажите, кто знает. Правильно ли я понимаю, что нет возможности вызвать пошаговую отладку для кода, написанного в функциях OnTesterOnTesterInitOnTesterPass и OnTesterDeinit ? В справке написано, что пошаговая отладка возможна по наступающим событиям, которые копятся в очереди. Обработку событий можно отладить в пошаговом режиме по мере "продвижения" по коду. Но ведь события тестера создаются для отдельной копии эксперта, которую никак не перевести в режим пошаговой отладки. (Насколько я понял)

 Вопросы следующие: 1. Можно-ли, все-таки, отлаживать код в функциях тестера в пошаговом режиме? Если можно, то как это сделать? 2. Если нельзя, то что, собственно, делать-то? Как отлаживать?

 

Вдогонку, сразу вопрос:

Пытался наладить ведение журнала из этих функций. Оказалось, что я не понимаю, как запускается OnTesterInit. Например, если скомпилировать такой код:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
bool OnTesterInit_Pass=false;
input int inp=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
   OnTesterInit_Pass=true;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(OnTesterInit_Pass==false)
      return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  }

void OnTick() {return;}
//+------------------------------------------------------------------+

 Если прикреплять к графику такого эксперта, он ожидаемо вылетает с ошибкой инициализации (код INIT_FAILED). Не понятно, почему при одиночном прогоне через тестер. В журнале появляется тестировщика появляется та же ошибка "tester stopped because OnInit failed". Ведь, как написано в справке, после запуска тестировщика выполняется функция OnTesterInit, а в ней должна поменяться глобальная переменная OnTesterInit_Pass.

 Либо я что-то не так делаю, либо функция OnTesterInit не запускается, как должна. Кто-нибудь может прокомментировать?

 

Полный лог тестировщика: 

2014.04.20 15:38:39.553 Core 1  connecting to 127.0.0.1:3000
2014.04.20 15:38:39.554 Core 1  connected
2014.04.20 15:38:39.559 Core 1  authorized (agent build 930)
2014.04.20 15:38:39.604 Tester  EURUSD,H1 (Alpari-Ltd-Demo): testing of Experts\OnTesterInit_Try.ex5 from 2014.01.01 00:00 to 2014.04.19 00:00
2014.04.20 15:38:39.652 Core 1  OpenCL device: CPU Intel(R) Corporation  Intel(R) Core(TM) i5-2415M CPU @ 2.30GHz with OpenCL 1.1 (4 units, 2300 MHz, 2047 Mb, version 1.1)
2014.04.20 15:38:39.652 Core 1  common synchronization completed
2014.04.20 15:38:39.665 Tester  quality of analyzed history is 100%
2014.04.20 15:38:39.706 Core 1  1478 bytes of tester parameters loaded
2014.04.20 15:38:39.706 Core 1  expert file added: Experts\OnTesterInit_Try.ex5. 4274 bytes loaded
2014.04.20 15:38:39.706 Core 1  initial deposit 10000.00 USD, leverage 1:100
2014.04.20 15:38:39.706 Core 1  successfully initialized
2014.04.20 15:38:39.706 Core 1  5919 bytes of total initialization data received
2014.04.20 15:38:39.706 Core 1  Intel Core i5-2415M  @ 2.30GHz, 2216 MB
2014.04.20 15:38:39.706 Core 1  EURUSD,H1: history cached from 2013.01.02 00:00
2014.04.20 15:38:39.706 Core 1  EURUSD,H1 (Alpari-Ltd-Demo): OHLC bar states generating. OnTick executed on the bar begin only
2014.04.20 15:38:39.706 Core 1  EURUSD,H1: testing of Experts\OnTesterInit_Try.ex5 from 2014.01.01 00:00 to 2014.04.19 00:00 started with inputs:
2014.04.20 15:38:39.706 Core 1    inp=0
2014.04.20 15:38:39.706 Core 1  tester stopped because OnInit failed
2014.04.20 15:38:39.706 Core 1  log file "C:\Users\Cright\Desktop\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000\logs\20140420.log" written
2014.04.20 15:38:39.727 Core 1  connection closed
 
Cright:

  Подскажите, кто знает. Правильно ли я понимаю, что нет возможности вызвать пошаговую отладку для кода, написанного в функциях OnTesterOnTesterInitOnTesterPass и OnTesterDeinit ? В справке написано, что пошаговая отладка возможна по наступающим событиям, которые копятся в очереди. Обработку событий можно отладить в пошаговом режиме по мере "продвижения" по коду. Но ведь события тестера создаются для отдельной копии эксперта, которую никак не перевести в режим пошаговой отладки. (Насколько я понял)

 Вопросы следующие: 1. Можно-ли, все-таки, отлаживать код в функциях тестера в пошаговом режиме? Если можно, то как это сделать? 2. Если нельзя, то что, собственно, делать-то? Как отлаживать?

Вот здесь пример посмотрите: Рецепты MQL5 - Сохраняем результаты оптимизации торгового эксперта по указанным критериям >>>
 

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

Все-таки, вы не ответили, по-крайней мере, на первый вопрос: можно ли запустить функции тестировщика в пошаговом режиме отладки?

 
Cright:

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

Все-таки, вы не ответили, по-крайней мере, на первый вопрос: можно ли запустить функции тестировщика в пошаговом режиме отладки?

Не пробовал, отладчиком не пользуюсь. 
 

Прочитал внимательно. Про сам процесс отладки кода ни слова в статье нет.

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

Может быть тут сможете что-нибудь подсказать? 

 

Cright:

не запускается функция OnTesterInit (см. второе сообщение в треде). 

Может быть тут сможете что-нибудь подсказать? 

Эти функции работают только когда включена Оптимизация в тестере. В остальных случаях они не вызываются.
 
Roffild:
Эти функции работают только когда включена Оптимизация в тестере. В остальных случаях они не вызываются.

Переделал код, теперь выглядит так: 

bool OnTesterInit_Pass=true;
input int inp=0;

void OnTesterInit()
  {
   Print(__FUNCTION__,"(): Start Optimization \n-----------");
   OnTesterInit_Pass=false;
  }

int OnInit()
  {
   if(OnTesterInit_Pass==false)
      return(INIT_FAILED);
   return(INIT_SUCCEEDED);
  }

 

Запустил Оптимизацию, 5 "прогонов" (optimization finished, total passes 5). Функция OnTesterInit по-прежнему не вызвалась - в логах нет: выполнения команды Print, и первый проход должен был "зафейлиться" (Или не должен? Или все должны были "зафейлиться"?).

 Значит не в Оптимизации дело?

 Полный лог:

2014.04.20 17:46:03     Tester  4 records written to file cache C:\Users\Cright\Desktop\Alpari Limited MT5\tester\cache\OnTesterInit_Try.EURUSD.H1.2.xml
2014.04.20 17:46:03     Core 4  connection closed
2014.04.20 17:46:03     Core 3  connection closed
2014.04.20 17:46:03     Core 2  connection closed
2014.04.20 17:46:03     Core 1  connection closed
2014.04.20 17:46:03     Statistics      locals 5 tasks (100%), remote 0 tasks (0%), cloud 0 tasks (0%)
2014.04.20 17:46:03     Statistics      optimization passed in 0 minutes 08 seconds
2014.04.20 17:46:03     Tester  optimization finished, total passes 5
2014.04.20 17:46:01     Core 3  common synchronization completed
2014.04.20 17:46:01     Core 4  common synchronization completed
2014.04.20 17:46:01     Core 1  common synchronization completed
2014.04.20 17:46:01     Core 2  common synchronization completed
2014.04.20 17:46:01     Core 2  OpenCL device: CPU Intel(R) Corporation  Intel(R) Core(TM) i5-2415M CPU @ 2.30GHz with OpenCL 1.1 (4 units, 2300 MHz, 2047 Mb, version 1.1)
2014.04.20 17:46:01     Core 3  authorized (agent build 930)
2014.04.20 17:46:01     Core 1  authorized (agent build 930)
2014.04.20 17:46:01     Core 4  authorized (agent build 930)
2014.04.20 17:46:00     Core 2  authorized (agent build 930)
2014.04.20 17:46:00     Core 3  connected
2014.04.20 17:45:59     Core 4  connected
2014.04.20 17:45:58     Core 1  connected
2014.04.20 17:45:58     Core 2  connected
2014.04.20 17:45:58     Core 4  connecting to 127.0.0.1:3003
2014.04.20 17:45:58     Core 4  agent process started
2014.04.20 17:45:58     Core 3  connecting to 127.0.0.1:3002
2014.04.20 17:45:57     Core 3  agent process started
2014.04.20 17:45:57     Core 2  connecting to 127.0.0.1:3001
2014.04.20 17:45:57     Core 2  agent process started
2014.04.20 17:45:56     Core 1  connecting to 127.0.0.1:3000
2014.04.20 17:45:55     Core 1  agent process started
2014.04.20 17:45:55     Tester  size of initial task pack is 1
2014.04.20 17:45:55     Tester  complete optimization started
2014.04.20 17:45:55     Tester  Experts\OnTesterInit_Try.ex5 on EURUSD,H1 from 2014.01.01 00:00 to 2014.04.19 00:00

 


 
Cright:

Переделал код, теперь выглядит так: 

Запустил Оптимизацию, 5 "прогонов" (optimization finished, total passes 5). Функция OnTesterInit по-прежнему не вызвалась - в логах нет: выполнения команды Print, и первый проход должен был "зафейлиться" (Или не должен? Или все должны были "зафейлиться"?).

Значит не в Оптимизации дело?

Полный лог:

В каком журнале смотрите лог ?

... Сообщения из функций, которые показаны в коде выше, будут выводиться в журнал терминала, а не в журнал тестера. ...

 
tol64:

В каком журнале смотрите лог ?

... Сообщения из функций, которые показаны в коде выше, будут выводиться в журнал терминала, а не в журнал тестера. ...

В журнале терминала (прошу прощения за неточное описание). Как раз там я и ищу сообщения и не нахожу.

Терминал 

 
Cright:

В журнале терминала (прошу прощения за неточное описание). Как раз там я и ищу сообщения и не нахожу.

Смотреть нужно в журнале окна Инструменты на вкладке Эксперты