Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так не проверял, но профилировщик не врёт.
Убрал эти две строки и всё затикало как положено.
Видимо разработчикам надо обратить на это внимание.
Что именно убрали, ObjectFind и ChartRedraw?
Какая именно тупила, или обе?
Поочерёдно убирал. И только убрав обе, индикатор стал работать. Но это-же не правильно. Пусть можно обойтись без принудительного обновления графика, а как можно создавать объект не проверив его наличие? Умышленно создавать ошибки???
Ноль вписать вместо ChartID() пробовал?
Пробовал. Эффект нулевой.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 1930: Плавающие окна графиков и .Net библиотеки в MQL5
fxsaber, 2019.01.09 16:08
Можно просто нажать на "Обновить", чтобы увидеть, что чарт с индикатором завис.Поочерёдно убирал. И только убрав обе, индикатор стал работать. Но это-же не правильно. Пусть можно обойтись без принудительного обновления графика, а как можно создавать объект не проверив его наличие? Умышленно создавать ошибки???
Спасибо за ответ!
Тогда действительно нужно призывать разработчиков оптимизировать.
"Примечание
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени."
Посмотрите, что еще вы делаете с графиком, в том числе асинхронного. Вызовом этой функции вы фактически принудительно все синхронизируете. Как и вызовом ChartRedraw
Т.е. если вас считаются какието сложные или многочисленные индикаторы - вызов это функции вероятно будет ждать, пока все досчитаются. А если внутри индикаторов тоже есть вызовы синхронных функций, то результат будет зависеть, от реализации перекрестных синхронизаций в MQL
Причина в этом
То, что ChartRedraw() убивает терминал с таймером в 1 секунду - писал уже давно, но ответ получен не был ни разу - видимо проблема для разработчиков нерешаема.
Причина в этом
Нет. Причина найдена. Профилировщик не врёт.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Неожиданная внутренняя ошибка
Alexey Viktorov, 2019.01.09 14:22
Профилировщик жалуется на строку
и на ChartRedraw();
"Примечание
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени."
Посмотрите, что еще вы делаете с графиком, в том числе асинхронного. Вызовом этой функции вы фактически принудительно все синхронизируете. Как и вызовом ChartRedraw
Но если ПОЛНОСТЬЮ процитировать примечание, то можно заметить и такую оговорку
Примечание
Функция использует синхронный вызов – это означает, что функция дожидается выполнения всех команд, которые были помещены в очередь графика перед её вызовом, и поэтому данная функция может быть затратной по времени. Нужно иметь это обстоятельство в виду, если ведется работа с большим количеством объектов на графике.
вы 8 (!!) раз на тик вызываете ChartRedraw, конечно оно тормозит. Я бы на месте терминала тоже матерился :-)
да и алгоритм тоже как-бы помягче сказать..не быстрый :-)
методы лечения:
- считать пооптимальнее (всё можно в один проход посчитать). Опционально
- создавать объекты заранее и не проверять их наличие на каждом чихе. Можно пересоздавать поймав CHARTOBJECT_DELETE
- сохранять прежние значения и лезть в объекты только если поменялись данные
- ChartRedraw вызывать только при крайней необходимости. Он вообще по большому счёту там ненужен. Вы же не анимацию какую делаете - он сам перерисует.