Что не так с canvas в мт5? - страница 2

 

Кстати далеко не всегда одним листом быстрее иногда куча маленьких канвасиков тормозит меньше.

На гифке, индикатор который с прозрачными флажками сделан одним листом канваса, а тот который без прозрачности каждый флажёк отдельный объект.


И да, Nikolai Semko вам верно говорит, использовать функцию ChartTimePriceToXY можно, только если она вызывать один раз в тик, а у вас она вызываются очень часто.

Эта функция очень медленная. Скорее всего тормоза из за неё.

 

Вы в функции OnDraw() перерисовываете линии столько раз, сколько баров в одном дне.

Вам нужно здесь  for(int i = ileft; i > MathMax(0, iright); i--)  перебирать не бары, а дни.


P.S. В два часа ночи, могу и ошибаться. Если не прав, сильно не пинайте.

 
Aleksandr Slavskii #:

Вы в функции OnDraw() перерисовываете линии столько раз, сколько баров в одном дне.

Вам нужно здесь  for(int i = ileft; i > MathMax(0, iright); i--)  перебирать не бары, а дни.

P.S. В два часа ночи, могу и ошибаться. Если не прав, сильно не пинайте.

Перебираю только видимые бары в окне.
 
Aleksandr Slavskii #:

 использовать функцию ChartTimePriceToXY можно, только если она вызывать один раз в тик, а у вас она вызываются очень часто.

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

 
Nikolai Semko #:

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

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

 
Nikolai Semko #:

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

В мт5 смещение графика не вызывает это событие!
 
Aleksandr Slavskii #:

Кстати далеко не всегда одним листом быстрее иногда куча маленьких канвасиков тормозит меньше.

На гифке, индикатор который с прозрачными флажками сделан одним листом канваса, а тот который без прозрачности каждый флажёк отдельный объект.


И да, Nikolai Semko вам верно говорит, использовать функцию ChartTimePriceToXY можно, только если она вызывать один раз в тик, а у вас она вызываются очень часто.

Эта функция очень медленная. Скорее всего тормоза из за неё.

Ок попробуем заменить на другое решение. 
 
Alexandr Gavrilin #:
В мт5 смещение графика не вызывает это событие!
Ошибаетесь.
Не судьба проверить?
 
Alexander Voronkov #:

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

значит не доделали.
у меня то все летает. 
сами можете попробовать, например протестить в тестере мой Native Channels, скачав демо версию. Там тысячи линий привязанных к цене и времени. Особенно если отключите режим сглаживания линий (Anti-Aliasing)

 
Nikolai Semko #:

значит не доделали.
у меня то все летает. 
сами можете попробовать, например протестить в тестере мой Native Channels, скачав демо версию. Там тысячи линий привязанных к цене и времени. Особенно если отключите режим сглаживания линий (Anti-Aliasing)

Возможно вы правы)