Всех приветствую.
Такая проблема - чел оптимизирует эксперта в режиме OHLC 1M. Конечно, в тестере получается дичайшая прибыль, он очень рад.
Однако, когда запускает одиночный лучший проход - прибыль получается аж на треть меньше.
Почему так происходит? Вроде режим OHLC 1M - должен быть стабильным. Да и эксперт - не скальпер, сделки держатся по нескольку дней (а таймфрейм М15).
Разве может проход в момент оптимизации отличаться от прохода потом, после неё? У меня вроде такого не было - всегда, когда запускал после оптимизации - всегда результат одиночного прохода был тем же.
Это баг или фича? Где лыжи смазать?
Частая проблема. И она в коде эксперта. Не все понимают, что при одиночном проходе все переменные инициализируются, а при проходе в оптимизаторе - нет. Так что для начала нужно инициализировать все переменные, которые не присваиваешь явно в OnInit.
Получается, при разнице одиночный проход верен, а проход в оптимизаторе - нет.Частая проблема. И она в коде эксперта. Не все понимают, что при одиночном проходе все переменные инициализируются, а при проходе в оптимизаторе - нет. Так что для начала нужно инициализировать все переменные, которые не присваиваешь явно в OnInit.
Нет, у меня нет неинициализированных переменных. Это, действительно, весьма неприятный баг, но, я врядли его допустил. По крайней мере, в этом случае одиночный проход из результатов тестера и одиночный проход, когда все переменные устанавливаешь вручную - должны бы тоже различаться. А они - совпадают. Такое ощущение, что именно в момент оптимизации какие-то результаты странные получились.
Но, посмотрю внимательно, конечно, инициализацию.
Всех приветствую.
Такая проблема - чел оптимизирует эксперта в режиме OHLC 1M. Конечно, в тестере получается дичайшая прибыль, он очень рад.
Однако, когда запускает одиночный лучший проход - прибыль получается аж на треть меньше.
Почему так происходит? Вроде режим OHLC 1M - должен быть стабильным. Да и эксперт - не скальпер, сделки держатся по нескольку дней (а таймфрейм М15).
Разве может проход в момент оптимизации отличаться от прохода потом, после неё? У меня вроде такого не было - всегда, когда запускал после оптимизации - всегда результат одиночного прохода был тем же.
Это баг или фича? Где лыжи смазать?
Очень элементарно сделать тестерный грааль на OHLC M1. Ведь в таком случае у вас есть лучшая цена в течении одной минуты для продажи или покупки ( High или Low). В реальной жизни, понятное дело, вы не знаете какая цена будет минимальной или максимальной в данный момент времени за текущую минуту. Поэтому внимание стоит обращать на тест на реальных типах. Или хотя-бы на ценах открытия для убыстрения теста.
Да понятно, что грааль легко сделать, но в данном случае вход привязан к таймфрейму M15, и сделки длятся по нескольку дней (бывает и недель), так что режим OHLC 1M в данном случае - разумный компромисс между скоростью и точностью.
Меня другое волнует, мне казалось, что в этом режиме проход во время оптимизации и в дальнейшем его запуск - должен давать одно и то же. А он почему-то дал сильно разные результаты (на треть по общей прибыли). Мне это непонятно.
Да понятно, что грааль легко сделать, но в данном случае вход привязан к таймфрейму M15, и сделки длятся по нескольку дней (бывает и недель), так что режим OHLC 1M в данном случае - разумный компромисс между скоростью и точностью.
Меня другое волнует, мне казалось, что в этом режиме проход во время оптимизации и в дальнейшем его запуск - должен давать одно и то же. А он почему-то дал сильно разные результаты (на треть по общей прибыли). Мне это непонятно.
В одном и том же режиме при равенстве параметров результаты проходов должны совпадать, и при тестировании, и при оптимизации.
99.99% - ошибка в коде эксперта. Было много обсуждений и откровений на англоязычном форуме и на русском, русском. 0.01% - МТ5 может резать некоторые входные параметры, в частности слишком длинные строковые, и с перечислениями бывали в прежних билдах проблемы.
В одном и том же режиме при равенстве параметров результаты проходов должны совпадать, и при тестировании, и при оптимизации.
99.99% - ошибка в коде эксперта. Было много обсуждений и откровений на англоязычном форуме и на русском. 0.01% - МТ5 может резать некоторые входные параметры, в частности слишком длинные строковые, и с перечислениями бывали в прежних билдах проблемы.
Ну, поглядим по остальным проходам. Клиент только лучший проход запускал. Попросил его позапускать и остальные проходы. Посмотрим, проявится ли разница.
По идее, действительно, неинициализированные переменные - могут давать такие результаты. Но, вроде я достаточно внимателен в этом плане... Входные параметры - достаточно просты, там грааль на основе ЗигЗага... Однако, даже если ошибка в эксперте - непонятно, как могут быть различны проходы внутри оптимизации и при единичном проходе - если ошибка в эксперте - она должна одинаково проявлять себя. Неинициализированная переменная - должна давать "плавающий" результат.
А тут получается, что во время оптимизации проход был один, а после - его воспроизвести не получается, с найденными параметрами результат другой, но при этом - постоянный. То есть и на неинициализированную пременную как-то не похоже...
Ну, поглядим по остальным проходам. Клиент только лучший проход запускал. Попросил его позапускать и остальные проходы. Посмотрим, проявится ли разница.
По идее, действительно, неинициализированные переменные - могут давать такие результаты. Но, вроде я достаточно внимателен в этом плане... Входные параметры - достаточно просты, там грааль на основе ЗигЗага... Однако, даже если ошибка в эксперте - непонятно, как могут быть различны проходы внутри оптимизации и при единичном проходе - если ошибка в эксперте - она должна одинаково проявлять себя. Неинициализированная переменная - должна давать "плавающий" результат.
А тут получается, что во время оптимизации проход был один, а после - его воспроизвести не получается, с найденными параметрами результат другой, но при этом - постоянный. То есть и на неинициализированную пременную как-то не похоже...
Форум по трейдингу, автоматизированным торговым системам и тестированию торговых стратегий
Результат оптимизации стратегии не соответствует результату одиночного теста
Станислав Короткий , 2024.08.10 17:08
Неинициализированная переменная так же плоха, как и неинициализированная структура. Моя формулировка, вероятно, была немного вольна, но предполагается, что все неинициализированное (что должно быть) может непредсказуемо исказить результаты. Классы также могут быть несовершенными — и я бы не стал принимать как должное, что коды MQL Easy надежны как скала. Вы проверили все материалы и абсолютно уверены, что они везде «правильные»?
Случайно инициализированная переменная НЕ является неинициализированной переменной! ;-)
Любая переменная выделяется где-то в памяти. Это место обычно одно и то же для текущей сессии/программы, пока среда одна и та же (как при запуске одного и того же пула агентов тестировщика с одной и той же тестируемой программой MQL). Независимо от того, сколько раз вы перезапускаете процесс - если среда существенно не меняется (например, вы отключили часть пула или, вероятно, запустили другой экземпляр MT5 - сложно сказать, какие факторы могут существенно изменить среду) - весь сектор данных программы MQL будет выделен в одном и том же месте. Так что если переменная не инициализирована, она всегда будет получать один и тот же "мусор". Следовательно, вы всегда будете получать один и тот же неверный результат.
Ну, поглядим по остальным проходам. Клиент только лучший проход запускал. Попросил его позапускать и остальные проходы. Посмотрим, проявится ли разница.
По идее, действительно, неинициализированные переменные - могут давать такие результаты. Но, вроде я достаточно внимателен в этом плане... Входные параметры - достаточно просты, там грааль на основе ЗигЗага... Однако, даже если ошибка в эксперте - непонятно, как могут быть различны проходы внутри оптимизации и при единичном проходе - если ошибка в эксперте - она должна одинаково проявлять себя. Неинициализированная переменная - должна давать "плавающий" результат.
А тут получается, что во время оптимизации проход был один, а после - его воспроизвести не получается, с найденными параметрами результат другой, но при этом - постоянный. То есть и на неинициализированную пременную как-то не похоже...
Вы не совсем поняли. Неинициализированные переменные при одиночном проходе не имеют случайного значения, они в большинстве типов обнулены. Поэтому результат постоянный. А при оптимизации переменные не обнуляются, и содержат значения предыдущего прохода. Не для всех типов, подчеркну. Точнее не скажу.
Вы не совсем поняли. Неинициализированные переменные при одиночном проходе не имеют случайного значения, они в большинстве типов обнулены. Поэтому результат постоянный. А при оптимизации переменные не обнуляются, и содержат значения предыдущего прохода. Не для всех типов, подчеркну. Точнее не скажу.
Это какая-то неправда, ИМХО. Требуется демонстрация.
Да-да, всё верно, я нарывался на ошибки неинициализированных переменных. И знаю, какие "подводные камни" эта ошибка вызывает.
Именно поэтому я стараюсь всегда инициализировать переменные сразу при создании невалидным значением.
Но, за сложные структуры - я поручиться не могу (а там они тоже кое-где используются). Обидно будет, если выяснится такая неприятная ошибка (тем более, что я, когда пишу код, всегда её имею ввиду, а тут... как-то умудрился пропустить? )
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всех приветствую.
Такая проблема - чел (хороший знакомый, для которого я экспертов пишу) оптимизирует эксперта в режиме OHLC 1M. Конечно, в тестере получается дичайшая прибыль, он очень рад.
Однако, когда запускает одиночный лучший проход - прибыль получается аж на треть меньше.
Почему так происходит? Вроде режим OHLC 1M - должен быть стабильным. Да и эксперт - не скальпер, сделки держатся по нескольку дней (а таймфрейм М15).
Разве может проход в момент оптимизации отличаться от прохода потом, после неё? У меня вроде такого не было - всегда, когда запускал после оптимизации - всегда результат одиночного прохода был тем же.
Это баг или фича? Где лыжи смазать?