Библиотеки диаграмм Java, подходящие для биржевых диаграмм в реальном времени?

Я нахожусь в процессе планирования приложения на основе Java, которое используется для прямой трансляции/торговли графиками акций/форекс и т.д. Однако я не уверен, какая библиотека диаграмм подходит для этой работы.

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

  • Свечи и/или гистограммы OHLC, линейные графики
  • Наложение их на другие графики (также известное как построение скользящей средней или аналогичной на графике свечи)
  • Пользователь должен иметь возможность добавлять линии или другие объекты на график.
  • Отображение 2 графиков, например, чтобы показать объем ниже основного графика
  • Увеличить диаграмму**
  • Горизонтальная прокрутка/панорамирование**
  • Автоматическая настройка оси Y при прокрутке/панорамировании
  • Обновление графика при поступлении новых данных (происходит со случайными интервалами в миллисекундах), что включает не только добавление новой точки данных OHLC, но и обновление последней точки данных OHLC, если новые данные поступают до того, как временной интервал указывает на новые данные. точка**
  • взаимодействие с диаграммой, например выделение объекта, на который указывает мышь***
  • выдача координат, которые можно использовать для получения информации о точках данных или непосредственного получения информации (данные OHLC, метка времени)

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

*** Хорошо, но не обязательно.

Чтобы было понятно — я не ищу какую-то волшебную библиотеку, которая сделает все за меня. У меня нет проблем с написанием кода, чтобы получить полный набор функций. Но некоторые функции могут быть надежно реализованы только самой библиотекой (например, преобразование координат диаграммы из щелчка мыши в правильные точки данных, поскольку эти координаты зависят от размера меток x и y, а это означает, что угадывание было бы плохим подходом). ), другие функции при добавлении должны быть достаточно быстрыми. В зависимости от библиотеки это может быть невозможно.

Производительность является ключевым фактором. Я уже сделал большую часть этого кода на python, используя matplotlib. Однако чем больше свечей на графике, тем медленнее он становится, до такой степени, что использование нескольких графиков с достаточным количеством данных на каждом графике делает невозможным обновление с миллисекундными интервалами в реальном времени, несмотря на долгие усилия по оптимизации кода. Кроме того, этот код ограничен одним ядром (благодаря python GIL), независимо от того, сколько диаграмм. Поэтому понятно, что я отчаянно ищу быстрое решение и перешел на java. Итак, скажем, при одновременном открытии 10 графиков с несколькими сотнями точек данных OHLC все обновления сразу не должны оказывать серьезного влияния на производительность, едва заметного для человеческого глаза. Это то, что можно сделать с помощью java, как показывают различные коммерческие проекты (например, java-клиенты Oanda и Dukascopy).

Вопрос в том, какая библиотека подходит для этой задачи? jFreeChart? Диаграмма JavaFX напрямую? Другие опции?

Кто-нибудь знает, какие библиотеки используют коммерческие проекты?

Ответы (2)

Графики Ваадин

Если вам нужно решение для веб-приложения, написанное на чистом Java, но автоматически отображаемое в веб-браузере с использованием технологий веб-стандартов HTML5 , я предлагаю обратить внимание на Vaadin Framework (с открытым исходным кодом, бесплатно) и надстройку Vaadin Charts ( коммерческий).

Надстройка Vaadin Charts представляет собой оболочку Java (вызываемую на стороне сервера), обертывающую библиотеку HighCharts , встроенную в JavaScript (используется на стороне клиента при отображении диаграммы, но прозрачно для программиста Java). Таким образом, все, что HighCharts может сделать через JavaScript, может сделать Vaadin Charts через вызовы Java. Д

С Vaadin Charts вы получаете лучшее из обоих миров: (а) всю мощь Java и его многочисленных библиотек, JDBC , статическую типизацию, скорость, надежность и т. д., а также (б) высокопроизводительное рисование диаграммы в браузер локально с помощью JavaScript.

Я не знаю, удовлетворяют ли Vaadin Charts все ваши потребности, но они предоставляют графики Candlestick и OHLC .

Vaadin имеет встроенную поддержку технологии Push , поэтому ваши графики могут автоматически обновляться в веб-браузере без продвижения пользователя.

При использовании JavaScript в качестве веб-контента в вашем Java-приложении вы можете добавить LightningChart JS . Это было сделано с помощью WebGL, и производительность на порядок выше по сравнению с Java или другими диаграммами JavaScript. LightningChart может отображать до 100 миллионов точек данных в режиме реального времени.

Поддерживается быстрое масштабирование, прокрутка, панорамирование и т. д., а также OHLC, горы, серии линий и т. д., естественно.

Торговый пример (статические данные) Торговый график

Здесь много интерактивных примеров в реальном времени