Что не так с canvas в мт5?

 

Что не так с рисованием в мт5? Почему такое запаздывание возникает при перемещении графика? В мт4 идеально, там складывается впечатление, что отрисовка работает в разы лучше и быстрее.


2 одинаковых по коду и реализации индикатора, в мт4 классы CCanvas взят от МТ5.

Слева МТ4, справа МТ5. 

Код к сожалению клиентского продукта предоставить не могу, но могу отправить в поддержку.

 
Alexandr Gavrilin:

Что не так с рисованием в мт5? Почему такое запаздывание возникает при перемещении графика? В мт4 идеально, там складывается впечатление, что отрисовка работает в разы лучше и быстрее.


2 одинаковых по коду и реализации индикатора, в мт4 классы CCanvas взят от МТ5.

Слева МТ4, справа МТ5. 

Код к сожалению клиентского продукта предоставить не могу, но могу отправить в поддержку.

Причина давно известна (тормознутость chartget и XY функций ), но Ренат сказал, что менять ничего не будут.
Относительное решение в моем классе iChannel, в котором избегается использование этих функций.
 
Alexandr Gavrilin:

Что не так с рисованием в мт5? Почему такое запаздывание возникает при перемещении графика? В мт4 идеально, там складывается впечатление, что отрисовка работает в разы лучше и быстрее.


2 одинаковых по коду и реализации индикатора, в мт4 классы CCanvas взят от МТ5.

Слева МТ4, справа МТ5. 

Код к сожалению клиентского продукта предоставить не могу, но могу отправить в поддержку.

В MetaTrader 5 ChartRedraw Вам нужно делать самостоятельно. В МТ4 - он происходит постоянно без нашего ведома.

Для чего самостоятельно? А чтобы после изменения каждого объекта не перерисовывать чарт. Только после изменения последнего объекта нужно сделать единственный ChartRedraw

Просто для проверки - добавьте на график комментарий, меняющийся на каждом изменении графика в OnChartEvent, и сразу увидите как тормоза прекратятся.

 
подготовил для демонстрации некий вариант говнокода) но в мт4 все плавно и быстро, в мт5 ужас.
Файлы:
testcanvas.zip  113 kb
 
Artyom Trishkin #:
х

попробовал добавит, нет все равно запаздывание в отрисовке при перемещении графика.

 
Nikolai Semko #:
Причина давно известна (тормознутость chartget и XY функций ), но Ренат сказал, что менять ничего не будут.
Относительное решение в моем классе iChannel, в котором избегается использование этих функций.

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

 
Alexandr Gavrilin #:

попробовал добавит, нет все равно запаздывание в отрисовке при перемещении графика.

Ну чудес не бывает. Код Ваш глядеть некогда, но ChartRedraw необходим для отображения изменений граф.объектов в МТ5

 
Artyom Trishkin #:

Ну чудес не бывает. Код Ваш глядеть некогда, но ChartRedraw необходим для отображения изменений граф.объектов в МТ5

ChartRedraw не помогает, при движении графика все равно заметное запаздывание и возникает заметное мигание.

 
Alexandr Gavrilin #:

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

для этого этот класс и создавал. ChartGet функции работают только в момент CHARTEVENT_CHART_CHANGE. Когда они обрабатываются пачкой, то это происходит быстрее в сумме. Дальше все пересчеты цены и времени в координаты и обратно расчитываются на основе ранее полученных параметров чарта, что происходит примерно в 100000 раз быстрее (без преувеличения) в сравнении с XY и ChartGet функциями.

В результате по факту канвас в МТ5 намного быстрее МТ4, тем более в МТ4 есть большая проблема с заморозкой OnChartEvent в случае расчета из него более ~10 миллисекунд, что приходится решать через таймер.

 
Artyom Trishkin #:

В MetaTrader 5 ChartRedraw Вам нужно делать самостоятельно. В МТ4 - он происходит постоянно без нашего ведома.

Для чего самостоятельно? А чтобы после изменения каждого объекта не перерисовывать чарт. Только после изменения последнего объекта нужно сделать единственный ChartRedraw

Просто для проверки - добавьте на график комментарий, меняющийся на каждом изменении графика в OnChartEvent, и сразу увидите как тормоза прекратятся.

В канвасе в функции Update() уже есть  ChartRedraw(), в коде топикстартера Update()  есть, значит   ChartRedraw()  тоже задействован.

Причина в другом.

Где то лишние расчёты. Причём очень много лишних расчётов. 

 
Alexandr Gavrilin #:
подготовил для демонстрации некий вариант говнокода) но в мт4 все плавно и быстро, в мт5 ужас.
Вот тут примитив. Даже если рисовать одну линию то тот де эффект будет.