Оптимизатор и графические объекты

 

Столкнулся с такой проблемой. Пишу эксперта, который использует линии тренда и каналы для расчета уровней входа/выхода из рынка.

При тестовых прогонах все работает отлично. А при попытках оптимизации получаются нулевые результаты. После детального изучения документации к МТ4 и нескольких экспериментов с ужасом обнаружил, что в режиме оптимизации перестают работать все функции, связанные с граф. объектами!!!

Нет, я конечно понимаю, что режим оптимизации подразумевает полное отсутствие вывода данных из эксперта, как текстовых так и графических. Это вполне разумно, т.к. ускоряет процес, но. .. зачем же совсем ломать алгоритмы? Разве сложно просто не отображать графические объекты, продолжая в тоже время корректно отрабатывать вызовы ObjectSet/Get( name, OBJPROP_TIMEx/PRICEx ), а также ObjectGetValueByShift(), ObjectGetShiftByValue() и т.п.?

Не думаю, что это сложно. Можно ли надеяться на скорейшее исправление этой оплошности?

 

Эта особенность явно описана в статье "Особенности и ограничения тестирования"

 
stringo писал (а):

Эта особенность явно описана в статье "Особенности и ограничения тестирования"


В статье "явно" написано следующее: "Графические объекты реально не выставляются". Ну и пусть не выставляются, т.е. не рисуются для ускорения. Но разве отключение функций ObjectSet/Get() и ObjectGetValueByShift() дает хоть какой-то прирост скорости? Я не думаю.
 

Даёт. И значительный.

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

В вашем случае можно написать пользовательские индикаторы, рисующие тренды и каналы. Это будет работать быстрее, чем доступ к объектам. Ещё быстрее будет, если такую функциональность Вы реализуете внутри Вашего эксперта (объекты ведь сам эксперт расставляет?)

 
Не совсем понял вашу мысль... Эта функциональность итак внутри моего эксперта. Просто он рассчитывает на работоспособность функций ObjectSet/Get() с параметрами OBJPROP_TIMEx и OBJPROP_PRICEx, а также на ф-ю ObjectGetValueByShift(). Эти функции при оптимизации просто напросто не работают, хотя визуализация для них как таковая не требуется. Почему бы просто при оптимизации не отключить вывод граф. объектов, но поддерживать работу этих функций?
 
bstone:
Не совсем понял вашу мысль... Эта функциональность итак внутри моего эксперта. Просто он рассчитывает на работоспособность функций ObjectSet/Get() с параметрами OBJPROP_TIMEx и OBJPROP_PRICEx...
Ты не рисуй реальный объект, а просчитывай его в эксперте. Линии - это ж самые простые объекты, любые их параметры легко просчитываются - Пифагор-рулез! Функции ObjectSet/Get() вообще не нужны для автоматеческого трейдинга. Если ты тренд рисуешь ручками, тогда - да, тогда нужно объяснить эксперту чего ты от него хочешь, а если его рисует сам эксперт, ему это нафиг не нужно.
 
timbo:
bstone писал (а):
Не совсем понял вашу мысль... Эта функциональность итак внутри моего эксперта. Просто он рассчитывает на работоспособность функций ObjectSet/Get() с параметрами OBJPROP_TIMEx и OBJPROP_PRICEx...
Ты не рисуй реальный объект, а просчитывай его в эксперте. Линии - это ж самые простые объекты, любые их параметры легко просчитываются - Пифагор-рулез! Функции ObjectSet/Get() вообще не нужны для автоматеческого трейдинга. Если ты тренд рисуешь ручками, тогда - да, тогда нужно объяснить эксперту чего ты от него хочешь, а если его рисует сам эксперт, ему это нафиг не нужно.

Ну я согласен, да. Просто когда я писал эксперта, то я, прочитав статьи и документацию, сделал вывод, что граф. объекты при оптимизации просто не рисуются, что вполне логично. А использовал я их в эксперте потому, что работать с ObjectGet/Set() в MQL4 заметно проще и удобней, чем с массивами. Я уже давно, еще до первого своего поста на эту тему, переписал код эксперта, чтобы он не зависил от ObjectGet/Set() (оптимизировать то как-то надо), но выглядит это очень криво. Просто зачем извращаться, если МТ может поддерживать ObjectGet/Set() и в режиме оптимизации без потери производительности? :)
Причина обращения: