Потоковая передача таймсерий в боке

Я хочу построить временную серию в реальном времени в боке. Я хочу отображать только новые точки данных при каждом обновлении. Как я могу это сделать ?

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


person Maxi    schedule 17.07.2014    source источник
comment
Можете ли вы описать разницу, которую вы хотите немного больше? Техника из примера заключается в обновлении данных в источнике данных, после чего график обновляется автоматически. Многие люди использовали технику из примера для потокового обновления временных рядов, я не совсем уверен, что вы хотите сделать по-другому? Если вы хотите обновить временной ряд, вы можете добавить новые точки в конец данных. Если вы хотите фиксированное окно, вы также можете удалить точки начала, когда это необходимо. Если вы используете массивы numpy, нарезка может помочь сделать это проще или эффективнее.   -  person bigreddot    schedule 17.07.2014
comment
В качестве альтернативы, если вы спрашиваете о поддержке областей повреждения и частичной перерисовки, в настоящее время ее нет. Обновление данных всегда вызывает полный повторный рендеринг.   -  person bigreddot    schedule 17.07.2014
comment
Да, я говорю о частичной перерисовке, такой как опция blitz в функции анимации matplotlib.   -  person Maxi    schedule 18.07.2014
comment
Сколько у вас очков? Вы уверены, что это проблема? Боке работает в десятках тысяч точек, а помимо этого вы часто сталкиваетесь с проблемами при построении графика и вынуждены прибегать к другим методам визуализации. Тем не менее, добавление поддержки областей повреждения было бы разумным шагом, но это не входит в нашу краткосрочную дорожную карту.   -  person bigreddot    schedule 28.07.2014


Ответы (1)


Что касается Bokeh 0.11.1, теперь существует потоковый интерфейс для источников данных столбцов в приложениях сервера Bokeh. Вы можете увидеть и легко запустить пример здесь:

https://github.com/bokeh/bokeh/tree/master/examples/app/ohlc

В этом примере показан обновляемый в режиме реального времени график OHLC с индикатором MACD (на основе синтетических тиковых данных), который обновляет график только самыми последними точками данных при каждом обновлении.

По сути, использование потокового интерфейса состоит из двух частей. Сначала создайте новый dict с той же «формой», что и ваш источник данных столбца:

new_data = dict(
    time=[t],
    open=[open],
    high=[high],
    low=[low],
    close=[close],
    average=[average],
    color=[color],
)

Затем передайте это методу .stream с необязательным аргументом rollover, который указывает, насколько большой буфер должен храниться в браузере (более ранние данные начинают отбрасываться):

source.stream(new_data, 300)

Тогда на график будет отправлено только небольшое количество данных в new_data, а не все.

person bigreddot    schedule 12.05.2016
comment
Запустите пример и увидите, как свечи OHLC текут по графику. Обычно последняя свеча OHLC на правом краю графика будет «развиваться» по мере поступления новых данных. Новая свеча формируется по прошествии временного интервала; его значение «O» фиксируется при создании, значения «HLC» будут меняться по мере поступления новых данных. Свеча на жестком правом краю должна ерзать вверх и вниз с входящими данными. Пользователь должен иметь возможность указать временной интервал с помощью интерактивных элементов управления. Любой, кто может обновить демоверсию; сделать его убедительным и реалистичным? - person GoFaster; 16.08.2016
comment
Я, конечно, не опытный финансовый человек. Я сделал демонстрацию простой автономной демонстрацией .stream, а не реальным инструментом финансирования производства. Если кто-то с нужным опытом захочет расширить или улучшить демонстрацию, это, безусловно, будет приветствоваться (до определенной степени --- демонстрация должна оставаться относительно простой, чтобы быть эффективной в качестве демонстрации определенной темы) Кроме того, новый метод .patch в CDS, вероятно, полезен для обновления частей последней свечи на месте. - person bigreddot; 16.08.2016
comment
Как я это вижу: 1) Дайте пользователю интерактивный контроль, чтобы указать временной интервал свечи. 2) Синтезировать данные нескольких сотен баров в массив с заданным интервалом времени (используйте дату и время; по оси X показаны последние даты и время). 3) Отображение нескольких сотен баров. 4) Генерируйте синтезированные обновления в реальном времени, непрерывно манипулируйте и визуализируйте значения HLC последней свечи на графике. 5) По прошествии указанного временного интервала добавить на график еще одну свечу. 6) Продолжайте 7) Делайте все это снова, когда пользователь меняет интервал. Вопрос в том; как заставить это работать в Боке, какие звонки и когда? - person GoFaster; 16.08.2016
comment
Это, вероятно, лучшее обсуждение для публичного списка рассылки. - person bigreddot; 17.08.2016