Обсуждение статьи "Горизонтальные диаграммы на графиках MеtaTrader 5" - страница 5

 

Задержки это как раз следствие оптимизации. Первая задержка при инициализации. Если индикатор (в ролике для МТ4) устанавливается на некий таймфрейм символа, для которого нет истории, или она не полна, то диаграммы на истории могут не строиться, или будут строиться с ошибками. И я это явление наблюдал. Обращаю Ваше внимание, что индикатор может устанавливаться на одном таймфрейме, брать исходные данные с другого, а показывать для третьего. Что бы отрисовывать диаграммы на истории только один раз и сразу без ошибок в OnCalculate добавлен кусочек кода, который проверяет готовность исходных данных, а потом еще пропускает пять вызовов OnCalculate для гарантии того, что теперь уж точно все исходные данные готовы. Что бы пользователь не думал, что индикатор висит, в лог выводятся сообщения pass 1 ... pas 2 и т.д. Как видите, никакого пересчета, нагрузка на терминал минимальна. В конечном итоге, пересчитывается только последняя диаграмма. Происходит это раз в минуту. Плохой способ? Возможно. Но ничего более крутого мне в голову не пришло.

Во второй раз задержка происходит при режиме, когда графическими примитивами управляет индикатор, а не терминал. Это сделано для обработки появления множества событий CHARTEVENT_CHART_CHANGE. Т.е. когда пользователь ни с того, ни  с сего начнет дергать график туда сюда. Если пытаться такие события обрабатывать по мере поступления, то индикатор не справится с построениями и получится каша. Поэтому  индикатор просто ничего не делает и при наступлении события возвращает управление. А вот когда пользователь прекращает генерировать событие, индикатор ждет три секунды, что бы убедиться, что новых событий уже точно не будет и только тогда перерисовывает диаграммы на новом месте. Только один раз! Да, получаем задержку. Но мы о ней честно предупреждаем, лишние ресурсы не потребляем, а когда возникают вопросы, объясняем свою позиции. Как это происходит сейчас )

И первый, и второй случай не обязательны к проявлению. И для себя я бы этих проверок не делал. Но для остальных приходится. Если найду, или кто то подскажет лучший путь, я тут же примусь за исправления.

 
попробуйте реализовать через CCanvas, один объект на чарте, нужна будет помощь пишите в ЛС, а лучше в контакты которые я вам давал ранее, а то сейчас редко тут бываю )) на Python в основном пишу
 
Да, я помню Вашу мысль. Я планирую использовать этот способ и примерно представляю, как встроить такую диаграмму в разработанную архитектуру.