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


Проблемы с масштабом графика при отрисовке свечей
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 (0) Candle2.mp4 1 MB (0)



Спасибо:




7 Ответов
Юрий Басангов

Фотография
Дата: 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 57 MB (0) SampleChart.zip 84 MB (0)
Автор топика
Спасибо:

sprite

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


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

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

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


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


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

sprite

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


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

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

Автор топика
Спасибо:


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

loading
clippy