Я нахожусь в процессе планирования приложения на основе Java, которое используется для прямой трансляции/торговли графиками акций/форекс и т.д. Однако я не уверен, какая библиотека диаграмм подходит для этой работы.
В основном функциональные возможности построения графиков должны быть такими же, как и в любом торговом программном обеспечении, например:
** также можно сделать, создавая новую диаграмму каждый раз, когда выполняется действие пользователя, вместо того, чтобы позволить библиотеке диаграмм выполнять работу, однако это возможно только в том случае, если она быстрая, см. Требования к производительности.
*** Хорошо, но не обязательно.
Чтобы было понятно — я не ищу какую-то волшебную библиотеку, которая сделает все за меня. У меня нет проблем с написанием кода, чтобы получить полный набор функций. Но некоторые функции могут быть надежно реализованы только самой библиотекой (например, преобразование координат диаграммы из щелчка мыши в правильные точки данных, поскольку эти координаты зависят от размера меток x и y, а это означает, что угадывание было бы плохим подходом). ), другие функции при добавлении должны быть достаточно быстрыми. В зависимости от библиотеки это может быть невозможно.
Производительность является ключевым фактором. Я уже сделал большую часть этого кода на python, используя matplotlib. Однако чем больше свечей на графике, тем медленнее он становится, до такой степени, что использование нескольких графиков с достаточным количеством данных на каждом графике делает невозможным обновление с миллисекундными интервалами в реальном времени, несмотря на долгие усилия по оптимизации кода. Кроме того, этот код ограничен одним ядром (благодаря python GIL), независимо от того, сколько диаграмм. Поэтому понятно, что я отчаянно ищу быстрое решение и перешел на java. Итак, скажем, при одновременном открытии 10 графиков с несколькими сотнями точек данных OHLC все обновления сразу не должны оказывать серьезного влияния на производительность, едва заметного для человеческого глаза. Это то, что можно сделать с помощью java, как показывают различные коммерческие проекты (например, java-клиенты Oanda и Dukascopy).
Вопрос в том, какая библиотека подходит для этой задачи? jFreeChart? Диаграмма JavaFX напрямую? Другие опции?
Кто-нибудь знает, какие библиотеки используют коммерческие проекты?
Если вам нужно решение для веб-приложения, написанное на чистом 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, горы, серии линий и т. д., естественно.
Торговый пример (статические данные)
Здесь много интерактивных примеров в реальном времени