Вдогонку, сразу вопрос:
Пытался наладить ведение журнала из этих функций. Оказалось, что я не понимаю, как запускается 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
Подскажите, кто знает. Правильно ли я понимаю, что нет возможности вызвать пошаговую отладку для кода, написанного в функциях OnTester, OnTesterInit, OnTesterPass и OnTesterDeinit ? В справке написано, что пошаговая отладка возможна по наступающим событиям, которые копятся в очереди. Обработку событий можно отладить в пошаговом режиме по мере "продвижения" по коду. Но ведь события тестера создаются для отдельной копии эксперта, которую никак не перевести в режим пошаговой отладки. (Насколько я понял)
Вопросы следующие: 1. Можно-ли, все-таки, отлаживать код в функциях тестера в пошаговом режиме? Если можно, то как это сделать? 2. Если нельзя, то что, собственно, делать-то? Как отлаживать?
Вот здесь пример посмотрите: Рецепты MQL5 - Сохраняем результаты оптимизации торгового эксперта по указанным критериям >>>
Благодарю. Статью эту я уже мельком пробегал, когда искал ответ на свои вопросы. Я изучу ее повнимательней.
Все-таки, вы не ответили, по-крайней мере, на первый вопрос: можно ли запустить функции тестировщика в пошаговом режиме отладки?
Благодарю. Статью эту я уже мельком пробегал, когда искал ответ на свои вопросы. Я изучу ее повнимательней.
Все-таки, вы не ответили, по-крайней мере, на первый вопрос: можно ли запустить функции тестировщика в пошаговом режиме отладки?
Вот здесь пример посмотрите: Рецепты MQL5 - Сохраняем результаты оптимизации торгового эксперта по указанным критериям >>>
Прочитал внимательно. Про сам процесс отладки кода ни слова в статье нет.
Понятно, что если все-таки, пошагово отлаживать код нельзя, то приходится тщательно журналировать события. Я уже и пошел по этому пути, но встретился с проблемой - не запускается функция OnTesterInit (см. второе сообщение в треде).
Может быть тут сможете что-нибудь подсказать?
Cright:
не запускается функция OnTesterInit (см. второе сообщение в треде).
Может быть тут сможете что-нибудь подсказать?
Эти функции работают только когда включена Оптимизация в тестере. В остальных случаях они не вызываются.
Переделал код, теперь выглядит так:
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
Переделал код, теперь выглядит так:
Запустил Оптимизацию, 5 "прогонов" (optimization finished, total passes 5). Функция OnTesterInit по-прежнему не вызвалась - в логах нет: выполнения команды Print, и первый проход должен был "зафейлиться" (Или не должен? Или все должны были "зафейлиться"?).
Значит не в Оптимизации дело?
Полный лог:
В каком журнале смотрите лог ?
... Сообщения из функций, которые показаны в коде выше, будут выводиться в журнал терминала, а не в журнал тестера. ...
В журнале терминала (прошу прощения за неточное описание). Как раз там я и ищу сообщения и не нахожу.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Подскажите, кто знает. Правильно ли я понимаю, что нет возможности вызвать пошаговую отладку для кода, написанного в функциях OnTester, OnTesterInit, OnTesterPass и OnTesterDeinit ? В справке написано, что пошаговая отладка возможна по наступающим событиям, которые копятся в очереди. Обработку событий можно отладить в пошаговом режиме по мере "продвижения" по коду. Но ведь события тестера создаются для отдельной копии эксперта, которую никак не перевести в режим пошаговой отладки. (Насколько я понял)
Вопросы следующие: 1. Можно-ли, все-таки, отлаживать код в функциях тестера в пошаговом режиме? Если можно, то как это сделать? 2. Если нельзя, то что, собственно, делать-то? Как отлаживать?