ChartGetInteger(), ChartTimePriceToXY() - серьезные проблемы вызывают зависание

 
Все функции Chart-Functions, такие как ChartGetInteger(), а также ChartTimePriceToXY() и ChartXYToTimePrice() все еще имеют серьезные проблемы. Иногда функции возвращают false, но без этого GetLastError() ничего не показывает. Иногда, особенно при интенсивном использовании в индикаторе и советнике на одном графике, время выполнения функций достигает 4-5 секунд. Излишне говорить, что использование 10 раз подряд просто замораживает все. В то же время, когда это происходит, ObjectGetInteger() показывает тот же эффект, но только при использовании версии 3-Params, а не при использовании версии 5-Params. Довольно странно, но верно и воспроизводимо по требованию. 

Забавный факт: я могу воспроизвести это только на VPS и виртуальных машинах, но не на обычных машинах или выделенных серверах, независимо от того, насколько сильно я нагружаю CPU и/или RAM, это не имеет никакого отношения к этому. На VPS это происходит сразу, но ТОЛЬКО когда оба, индикатор и советник, используют один и тот же график и одни и те же функции. Вообще-то можно было бы написать пример кода, но прежде я хочу убедиться, что MetaQuotes обратит на это внимание. 

Translated with DeepL

 
Doerk Hilger:
Все функции Chart-Functions, такие как ChartGetInteger(), а также ChartTimePriceToXY() и ChartXYToTimePrice() все еще имеют серьезные проблемы. Иногда функции возвращают false, но без этого GetLastError() ничего не показывает. Иногда, особенно при интенсивном использовании в индикаторе и советнике на одном графике, время выполнения функций достигает 4-5 секунд. Излишне говорить, что использование 10 раз подряд просто замораживает все. В то же время, когда это происходит, ObjectGetInteger() показывает тот же эффект, но только при использовании версии 3-Params, а не при использовании версии 5-Params. Довольно странно, но верно и воспроизводимо по требованию. 

Забавный факт: я могу воспроизвести это только на VPS и виртуальных машинах, но не на обычных машинах или выделенных серверах, независимо от того, насколько сильно я нагружаю CPU и/или RAM, это не имеет никакого отношения к этому. На VPS это происходит сразу, но ТОЛЬКО когда оба, индикатор и советник, используют один и тот же график и одни и те же функции. Вообще-то можно было бы написать пример кода, но прежде я хочу убедиться, что MetaQuotes обратит на это внимание. 

Translated with DeepL

Проблема старая, но не решенная до сих пор должным образом.

Можете здесь почитать:

наблюдаются некоторые противоречия
 

И снова Я также столкнулся с тормозами

Перечитал старые темы и ...

Ничего кардинально не поменялось

Рассуждения:  К сожалению, работа с графикой и обработкой событий в мт5 желает быть лучшей, хотя-бы на уровне мт4, который это обрабатывает в разы быстрее при одинаковых условиях.

Ответ:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

CHARTEVENT_CHART_CHANGE в MQL5

Slava, 2021.12.08 06:17

В экспертах MT4 всегда была копия графика и его свойств. Именно этим объясняется скорость доступа к свойствам графика, в том числе и к объектам.

Обработка событий всегда и везде асинхронна. И вы можете, например, отключить поступление событий от мыши, тогда другие события будут обрабатываться несколько быстрее. Вот события прихода тиков отключить никак нельзя. А вы когда нибудь сравнивали скорости тиковых потоков в четвёрке и пятёрке? А ещё стаканы цен и торговые события, которые в пятёрке гораздо сложнее, чем в четвёрке


 
Воз и ныне там? 
 
Vitaly Muzichenko #:
Воз и ныне там? 

вполне сносное решение давно(уже 6 лет) существует здесь

данная библа не использует эти функции, а координаты пиксели - время - цена расчитывает сама, обновляя таблицу параметров чарта каждый раз при наступлении события CHARTEVENT_CHART_CHANGE
графика в МТ5 работает быстрее, чем в МТ4. Но работала бы еще быстрее, если бы решили эту проблему. 

 
Nikolai Semko #:

вполне сносное решение давно(уже 6 лет) существует здесь

данная библа не использует эти функции, а координаты пиксели - время - цена расчитывает сама, обновляя таблицу параметров чарта каждый раз при наступлении события CHARTEVENT_CHART_CHANGE
графика в МТ5 работает быстрее, чем в МТ4. Но работала бы еще быстрее, если бы решили эту проблему. 

-- 5

-- 4



 

Не успевает делать расчёты, создаётся очередь, таких мест несколько


--

Где-то на форуме встречал кастом-функции "My_ChartTimePriceToXY(...) и  My_ChartXYToTimePrice, но не смог найти

Вроде даже Вы её автор, очень удобно было-бы заменить стандартные без переписывания кода. 

 
Vitaly Muzichenko #:

Не успевает делать расчёты, создаётся очередь, таких мест несколько


--

Где-то на форуме встречал кастом-функции "My_ChartTimePriceToXY(...) и  My_ChartXYToTimePrice, но не смог найти

Вроде даже Вы её автор, очень удобно было-бы заменить стандартные без переписывания кода. 

https://www.mql5.com/ru/forum/277867/page16#comment_52651544

Невозможно заменить просто своей функцией, т.к необходим целый комплекс мер, главный из которых, как уже писал, создание своей таблицы параметров чарта, которая обновляется при наступлении события CHARTEVENT_CHART_CHANGE
Библиотеки: Easy Canvas
Библиотеки: Easy Canvas
  • 2024.03.06
  • Edgar Akhmadeev
  • www.mql5.com
Easy Canvas: Автор: Nikolai Semko...
 
Nikolai Semko #:
https://www.mql5.com/ru/forum/277867/page16#comment_52651544

Невозможно заменить просто своей функцией, т.к необходим целый комплекс мер, главный из которых, как уже писал, создание своей таблицы параметров чарта, которая обновляется при наступлении события CHARTEVENT_CHART_CHANGE

Я видел это, спасибо!

Не хочется таскать везде библиотеку.

 
Vitaly Muzichenko #:

Не успевает делать расчёты, создаётся очередь, таких мест несколько


--

Где-то на форуме встречал кастом-функции "My_ChartTimePriceToXY(...) и  My_ChartXYToTimePrice, но не смог найти

Вроде даже Вы её автор, очень удобно было-бы заменить стандартные без переписывания кода. 

Виталий, просто сбрось здесь простой короткий пример с лагами. А я его исправлю с применением моей библиотеки. 

 
Vitaly Muzichenko #:

Я видел это, спасибо!

Не хочется таскать везде библиотеку.

Библиотеку все равно придется таскать. Иначе никак.

Если не используешь канвас, то все равно нужна библиотека. Если будет время, то сделаю и опубликую без канваса. Слишком много нюансов, чтобы объяснить коротко. А пока можно использовать библиотеку iCanvas_CB. Сбрось пример, покажу как это сделать с минимальными затратами.