Ошибки, баги, вопросы - страница 1998
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Мне и, почти уверен, разработчикам.
Очень сомневаюсь что такая безделица может поставить вас в тупик. Либо причина в другом.
Очень сомневаюсь что такая безделица может поставить вас в тупик. Либо причина в другом.
Даже если бы я писал идеально (не делая ошибок - а это не так), то нормальна ситуация, когда берешь чью-ту библиотеку (иногда без исходного кода - в Маркете) и используешь, надеясь, что она написана грамотно. И ничто не страхует от того, что после этого сам нарвусь на различные результаты в тестере. И найти истинную причину будет ОЧЕНЬ сложно. Исправить же - иногда невозможно.
Цель - чтобы от запуска к запуску результат был воспроизводим - идентичен, даже с ошибкой.
Наверное, идеальным выходом была бы принудительная инициализация для всех программ по умолчанию + ключик компиляции для ее отключения (для тех, кто уверен в своих силах и хочет ускориться на пару процентов).
Инициализация и вправду много отнимает ресурсов. Выкинул кусок кода с принудительной инициализацией - ускорился в оптимизации почти в 2 раза)
И наткнулся на интересную штуку. Как так может получиться что просадка 120% и при этом результат в плюсе и в топе?
Тестирую стратегию - получаю просадку в 109% и нет маржинколла, а продолжается рост баланса - как так?Инициализация и вправду много отнимает ресурсов. Выкинул кусок кода с принудительной инициализацией - ускорился в оптимизации почти в 2 раза)
Что-то неправильно у Вас написано было.
Полная инициализация нужна не всегда. Например, для индикатора, который значение буфера для каждого бара заполняет в цикле (и делает это вне зависимости от того, инициализирован индикаторный буфер или нет).
В этом случае будет экономнее без принудительного обнуления.
А зачем выдумывать такие нереалистичные сценарии, по сути ошибки MQL программиста? Очевидно, что полная инициализация делается лишь однажды или в случае обнаружения докачки данных. В этом случае, её эффективнее сделало бы ядро.
Давайте возьмём к примеру массив буфер индикатора: При инициализации индикатора буфер имеет нулевую длину. Что там инициализировать нулями? При добавлении очередного индекса его принудительно обнулять и потом заполнять каким-то значением??? Для чего это обнуление или заполнение EMPTY_VALUE? А если есть необходимость назначить PLOT_EMPTY_VALUE и не 0 и не EMPTY_VALUE или принудительно одно, а надо другое... Как ни крути получается лишняя трата времени...
А пользовательский массив... Массив-то объявляется для каких-то данных отличных от нуля и EMPTY_VALUE. Так с какой целью его принудительно инициализировать чем-то?
Вот и получается, что на быстродействие в большинстве случаев сказывается.
Я видимо отстал от жизни. По мне так индикаторный буфер всегда имеет длину равную количеству баров. И отказ от его инициализации в МТ5 приводит к тому, что на экран выводится мусор. Получается, что явная инициализация обязательна. И зачем она просто напросто переложена с ядра (как было в МТ4) на программиста MQL - не понятно. Реальных доводов о том, что как-то можно ускориться не делая инициализации и при этом не получить отображения мусора, я не видел.
Про пользовательский динамический массив я ничего не говорю - там действительно действует правило: тот кто его аллоцировал, тот и ответственен за правильную чистку. ArrayInitialize во многих случаях полезен. Это не вопрос быстродействия, а корректности работы программы. Расставьте приоритеты: быстро и/или правильно. Обычно некоторые проверки на правильность и подготовка данных требуют дополнительных расходов по времени (хоть и минимальных), но без этого никуда - чудес не бывает.
Про пользовательский динамический массив я ничего не говорю - там действительно действует правило: тот кто его аллоцировал, тот и ответственен за правильную чистку.
Не надо массивы обижать.
В MT4 будет всегда возврат false, потому как без мусора - все нулями. В MT5 - true.
Поэтому один и тот же код в MT4-тестере будет всегда показывать идентичные результаты от запуска к запуску. В MT5-тестере - нет.
В MT4 будет всегда возврат false, потому как без мусора - все нулями. В MT5 - true.
Это тест на то, что МТ4 заполняет массив нулями? Тогда надо иметь в виду, что если ArrayResize использует третий параметр с резервом, то последующие реаллокации в пределах резерва ничего не инициализируют. Будет мусор. Рекомендую делать явную инициализацию, чтобы потом случайно не удивляться, как в примере с оптимизацией, которая послужила толчком данному обсуждению.
Для тех кто беспокоится о тормозах из-за инициализации, смею предположить, что обычно есть куча других мест и приемов на которых можно улучшить эффективность в гораздо большей степени.
Это тест на то, что МТ4 заполняет массив нулями? Тогда надо иметь в виду, что если ArrayResize использует третий параметр с резервом, то последующие реаллокации в пределах резерва ничего не инициализируют. Будет мусор.
Не будет мусора.
Рекомендую делать явную инициализацию, чтобы потом случайно не удивляться, как в примере с оптимизацией, которая послужила толчком данному обсуждению.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
fxsaber, 2017.09.12 11:18
Даже если бы я писал идеально (не делая ошибок - а это не так), то нормальна ситуация, когда берешь чью-ту библиотеку (иногда без исходного кода - в Маркете) и используешь, надеясь, что она написана грамотно. И ничто не страхует от того, что после этого сам нарвусь на различные результаты в тестере. И найти истинную причину будет ОЧЕНЬ сложно. Исправить же - иногда невозможно.
Цель - чтобы от запуска к запуску результат был воспроизводим - идентичен, даже с ошибкой.