Проблемы с масштабом графика при отрисовке свечей


Проблемы с масштабом графика при отрисовке свечей
Atom
01.07.2021


Добрый день!

Давно мучаюсь, решил оформить в пост:

Если для осей графика убрать галочку "Автоматический диапазон", то при отрисовке каждой свечи график дергается, а затем масштабирование, которое было на графике сбивается и показывается ровно то количество свечей, которое указано в свойстве ChartPanel.MinimumRange (по умолчанию 50).
Таким образом становится невозможным смотреть на крупный или мелкий масштабы графика, так как при каждой новой свечке график "прыгает" и растягивается ровно на определенное количество свечей.
Например если поставить ChartPanel.MinimumRange = 1 при каждой новой свечке вы будете видеть только одну свечку, как бы вы график не растягивали/сжимали.

Прикрепляю видео того, как это выглядит.

Дополнительная информация, которая возможно будет полезна:
1. За "Автоматический диапазон" осей отвечает свойство ChartAxis.AutoRange в объектах ChartArea.XAxises и ChartArea.YAxises. Т.е. я ставлю в коде для всех осей AutoRange = false
2. У меня несколько осей Y в одной ChartPanel.ChartArea, на которых рисуются данные индикаторов, в том числе дополнительные свечи. В видео это не показано, но возможно это на что-то влияет.

Насколько я понимаю такое поведение ненормально и хотелось бы чтобы график не "прыгал", а оставался в том масштабе, на который он растянут мышкой.

Candle1.mp4 570 KB (291) Candle2.mp4 1 MB (284)



Спасибо:


1 2  >
Юрий Басангов

Фотография
Дата: 03.07.2021
Ответить


Добрый день, благодарю за подробное описание проблемы.
Чтобы ее решить, попрошу вас подготовить короткий пример, воспроизводящий данную ошибку, что позволит нам быстрее приступить к ее решению.
Лучше всего будет, если вы возьмете наш SampleCharts и на его основе сделаете версию графика, иллюстрирующую "прыжки" масштаба.
Спасибо:

Sprite

Фотография
Дата: 03.07.2021
Ответить


Юрий Басангов Перейти
Добрый день, благодарю за подробное описание проблемы.
Чтобы ее решить, попрошу вас подготовить короткий пример, воспроизводящий данную ошибку, что позволит нам быстрее приступить к ее решению.
Лучше всего будет, если вы возьмете наш SampleCharts и на его основе сделаете версию графика, иллюстрирующую "прыжки" масштаба.


Добрый день!
Я попробую сделать тестовый проект к концу следующей недели.
Хотелось бы уточнить, вы предлагаете взять за основу SampleCharts, однако там построение свечей идет в цикле по истории, а эффект дергания происходит именно при онлайн соединении.
Соответственно у меня вопросы:
1. Давайте я возьму за основу тестового проекта SampleConnection, где попробую воссоздать ошибку?
2. У меня на истории тоже не происходит эффекта дергания, вы можете пояснить каким образом это возможно? Т.е. получается что ChartPanel каким-то образом знает в каком статусе (online или downloading) находится серия свечей и использует разную логику рендеринга?


Спасибо:

Юрий Басангов

Фотография
Дата: 04.07.2021
Ответить


sprite Перейти
Юрий Басангов Перейти
Добрый день, благодарю за подробное описание проблемы.
Чтобы ее решить, попрошу вас подготовить короткий пример, воспроизводящий данную ошибку, что позволит нам быстрее приступить к ее решению.
Лучше всего будет, если вы возьмете наш SampleCharts и на его основе сделаете версию графика, иллюстрирующую "прыжки" масштаба.


Добрый день!
Я попробую сделать тестовый проект к концу следующей недели.
Хотелось бы уточнить, вы предлагаете взять за основу SampleCharts, однако там построение свечей идет в цикле по истории, а эффект дергания происходит именно при онлайн соединении.
Соответственно у меня вопросы:
1. Давайте я возьму за основу тестового проекта SampleConnection, где попробую воссоздать ошибку?
2. У меня на истории тоже не происходит эффекта дергания, вы можете пояснить каким образом это возможно? Т.е. получается что ChartPanel каким-то образом знает в каком статусе (online или downloading) находится серия свечей и использует разную логику рендеринга?




Добрый день, давайте начнем с тестового проекта где будет воссоздана ошибка. Мы изучим этот вопрос и заодно проверим п.2
Спасибо:

Sprite

Фотография
Дата: 04.07.2021
Ответить


Юрий, добрый день!

Тестовый проект на базе вашего SampleCharts прилагается, как и новое видео, снятое при работе тестового проекта.
Что изменено в вашем тестовом проекте:
1. Добавлена вторая серия свечей
2. Добавлена еще одна ось Y, на которой отображается вторая серия свечей
3. По всем осям сделано AutoRange = false
4. Добавлена задержка между тиками при рисовании в пол секунды
5. Виды свечек изменены на боксовый и профильный

Что в итоге получилось (видео наверное стоит посмотреть медленно):
1. Результат прыгания свечек виден, но не так сильно как в моем рабочем проекте. У меня график вообще прыгает так, что непонятно где мы находимся, а затем возвращается к нормальному виду. Учитывая что я провожу много расчетов после завершения свечи, то когда график прыгнул и идут расчеты я могу несколько секунд видеть пустую область.
2. В начале видео боксовая серия выдает какой-то прыжок вправо а затем влево
3. По моему эффект прыгания возникает из-за того что вы сначала рисуете новую свечку, а затем, уже с ней, сдвигаете график влево, чтобы он уместился в масштабе. Возникает эффект дергания, т.е. сначала что-то нарисовалось справа, а затем съехало влево. Наверное это и есть суть проблемы. А когда у вас ренджевые свечки и происходит всплеск волатильности в несколько раз превышающий размер ренджа, то эта карусель подвешивает приложение.
4. Если таскать график мышкой то иногда новые свечки графика уезжают за границу вправо и рисуются уже там в невидимой области, а иногда этого не происходит и график смещается влево как и надо. От какого положения графика это зависит - непонятно. Этот эффект есть на видео на 01:30 - 01:40.

PS В дополнение (не связано с дерганием): попробуйте нарисовать на графике штук 100 серий боксовых или профильных свечей, допустим минутки за неделю. Вы увидите как всё безбожно тормозит при отрисовке каждой новой свечки. Т.е. создается ощущения что процесс рендеринга каждой новой свечки как-то влияет на перерисовку всего графика от начала до конца и чем больше данных тем всё медленнее работает.

UPDATE:
1. Еще ошибка - если в списке индикаторов на работающем графике менять тип свечи (например с японских на бары и обратно), то у вас будут показываться разные линии осей несмотря на то, что вы задавали в коде или меняли в выпадающем меню приложения нажав правой кнопкой мышки на ось.
2. По поводу того что на истории у меня не дергается был не прав, дергается.

Candles3.mp4 0 B (138) SampleChart.zip 0 B (154)
Спасибо:

Sprite

Фотография
Дата: 05.07.2021
Ответить


Записал видео с подробными комментариями ко всем видам "прыжков" графика, которые происходят у меня в проекте.
CustomCandles1.mp4 38 MB (347)
Спасибо:

Юрий Басангов

Фотография
Дата: 05.07.2021
Ответить


sprite Перейти
Записал видео с подробными комментариями ко всем видам "прыжков" графика, которые происходят у меня в проекте.


Ок, спасибо, принято.
В ближайшие дни постараюсь дать обратную связь.
Спасибо:

Sprite

Фотография
Дата: 20.07.2021
Ответить


Юрий Басангов Перейти
Ок, спасибо, принято.
В ближайшие дни постараюсь дать обратную связь.

Добрый день! Есть прогресс?

Спасибо:

Sprite

Фотография
Дата: 09.08.2021
Ответить


Прошел месяц. Up (последний раз).
Спасибо:

Юрий Басангов

Фотография
Дата: 11.08.2021
Ответить


Добрый день, задача принята. К сожалению подсказать сроки решения я сейчас не могу. Могу только обозначить, что на текущий момент она пока не в приоритете.
Спасибо: Sprite

Support

Фотография
Дата: 24.12.2021
Ответить


- Причина того что чарт дергается -- свойство ChartPanel.MinimumRange, по умолчанию выставленное в 50 свечей и из-за которого график автоматически менял отображаемый диапазон если свечей было недостаточно.
В следующем релизе поведение будет слегка изменено, теперь заданный диапазон будет использоваться единожды в начале отрисовки. Это должно исправить проблему.
- "если в списке индикаторов на работающем графике менять тип свечи (например с японских на бары и обратно), то у вас будут показываться разные линии осей"
Будет исправлено в следующем релизе.
- Автоматическое скроллирование чарта зависит от свойства ChartPanel.IsAutoScroll. При этом автоскроллирование специально временно выключается если вы перетаскиваете график таким образом, что крайняя правая свеча находится за пределами отображения. Если вы опять перетащите график так что крайняя правая свеча окажется видимой, то автоскроллирование снова включится.
"иногда новые свечки графика уезжают за границу вправо и рисуются уже там в невидимой области, а иногда этого не происходит и график смещается влево как и надо. От какого положения графика это зависит - непонятно"
С автоскроллированием был небольшой баг, он будет исправлен в следующем релизе, теперь при включенном флаге IsAutoScroll автоскроллирование должно работать как описано выше.
- "попробуйте нарисовать на графике штук 100 серий боксовых или профильных свечей, допустим минутки за неделю. Вы увидите как всё безбожно тормозит при отрисовке каждой новой свечки. Т.е. создается ощущения что процесс рендеринга каждой новой свечки как-то влияет на перерисовку всего графика от начала до конца"
График рендерит всю видимую часть при каждом изменении любого элемента. Поэтому да, чем больше видимых элементов, тем медленнее отрисовка. Если вы отрисовываете 100 серий данных на одном графике, то возможно будет тормозить.
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy