Пропуски расчетов при тестировании (оптимизации) на многоядерной сети. Кто встречал? Как бороться? - страница 5
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Как искать причину проблемы - непонятно. :-(
Без воспроизведения - никак.
В настоящий момент проблема более не проявлялась.
Для облегчения анализа подобной проблемы в будущем сделано следующее.
1. Оптимизация проводится "по максимуму пользовательского критерия" (уже использовалось на момент обнаружения проблемы).
2. В качастве пользовательского критерия выбрано "прибыльность" - "profit factor" (уже использовалось на момент обнаружения проблемы).
3. Плановые прерывания тестирования выполняются со специальным кодом деинициализации 782.
Который обрабатывается в OnDeinit():
Сигнальная переменная TestRes устанавливается в 1.0 при инициализации советника и сбрасывается в 0.0 при деинициализации по плановому прерыванию работы.
Переменная TestRes используется при расчете результата тестирования:
Теперь имеем следующие возможные значения оптимизируемого параметра:
0 .. 999999 - нормальное завершение прогона с расчетом результата.
0 - нормальное прерывание работы, результат не рассчитан.
-1 - что-то пошло не так, внеплановое прерывание работы (ожидается при повторении проблемы).
3. Плановые прерывания тестирования выполняются со специальным кодом деинициализации 782.
Который обрабатывается в OnDeinit():
Это самообман - OnDeinit будет вызван дважды. Вызвать OnDeinit можно сколько угодно раз самому. А вот создать Deinit-событие, по которому сработает OnDeinit - это только ExpertRemove в Тестере. И он свой Reason сгенерирует, а не кастомный.
Это самообман - OnDeinit будет вызван дважды. Вызвать OnDeinit можно сколько угодно раз самому. А вот создать Deinit-событие, по которому сработает OnDeinit - это только ExpertRemove в Тестере. И он свой Reason сгенерирует, а не кастомный.
Да, второй раз будет вызван по ExpertRemove(), но в реальной программе OnDeinit() использован как завершающая функция, выполняющая различные наборы действий в зависимости от причины деинициализации.
Принудительный вызов используется в пользовательских целях в частности для обработки пользовательского завершения программы, а автоматический (например по ExpertRemove()) - в системных.