Java-Chartbibliotheken, die für Echtzeit-Aktiencharts geeignet sind?

Ich bin im Planungsprozess für eine Java-basierte Anwendung, die für Live-Streaming/Handel mit Aktien-/Forex-Charts usw. verwendet wird. Ich bin mir jedoch nicht sicher, welche Diagrammbibliothek die richtige für den Job ist.

Grundsätzlich sollte die Charting-Funktionalität die gleiche sein wie in jeder Handelssoftware, wie zum Beispiel:

  • Candlestick- und/oder OHLC-Balkendiagramme, Liniendiagramme
  • Überlagern dieser mit anderen Diagrammen (auch bekannt als Zeichnen eines gleitenden Durchschnitts oder ähnliches über dem Candlestick-Diagramm)
  • Der Benutzer sollte in der Lage sein, dem Diagramm Linien oder andere Objekte hinzuzufügen
  • Anzeige von 2 Diagrammen, um beispielsweise das Volumen unterhalb des Hauptdiagramms anzuzeigen
  • Vergrößern Sie das Diagramm**
  • Horizontales Scrollen/Verschieben**
  • Automatische Anpassung der Y-Achse beim Scrollen/Schwenken
  • Aktualisierung des Diagramms beim Eintreffen neuer Daten (erfolgt in zufälligen ms-Intervallen), was nicht nur das Hinzufügen eines neuen OHLC-Datenpunkts beinhaltet, sondern auch das Aktualisieren des letzten OHLC-Datenpunkts, wenn neue Daten eintreffen, bevor der Zeitrahmen neue Daten anzeigt Punkt**
  • Interaktion mit dem Diagramm, z. B. Hervorheben eines Objekts, auf das die Maus zeigt***
  • Rückgabe von Koordinaten, die verwendet werden können, um die Datenpunktinformationen zu erhalten, oder direkt ihre Informationen (OHLC-Daten, Zeitstempel) zu erhalten

** könnte auch durchgeführt werden, indem jedes Mal, wenn eine Benutzeraktion ausgeführt wird, ein neues Diagramm erstellt wird, anstatt die Diagrammbibliothek die Arbeit erledigen zu lassen - jedoch nur praktikabel, wenn es schnell ist, siehe Leistungsanforderungen.

*** Nett, aber nicht zwingend.

Um es klar zu sagen – ich suche nicht nach einer magischen Bibliothek, die alles für mich erledigt. Ich habe kein Problem damit, Code zu schreiben, um meinen vollen Funktionsumfang zu erhalten. Einige Funktionen können jedoch nur von der Bibliothek selbst zuverlässig implementiert werden (z. B. das Umwandeln von Diagrammkoordinaten von einem Mausklick in die richtigen Datenpunkte, da diese Koordinaten von der Größe der x- und y-Beschriftungen abhängig sind, was bedeutet, dass das Schätzen ein schlechter Ansatz wäre ), müssen andere Funktionen, wenn sie hinzugefügt werden, immer noch schnell genug sein. Je nach Bibliothek ist dies möglicherweise nicht möglich.

Leistung ist ein Schlüsselfaktor. Ich habe den größten Teil dieser Codierung bereits in Python mit Matplotlib durchgeführt. Je mehr Kerzen jedoch auf dem Diagramm stehen, desto langsamer wird es, bis zu einem Punkt, an dem die Verwendung mehrerer Diagramme mit genügend Daten auf jedem Diagramm trotz langer Bemühungen zur Optimierung des Codes Aktualisierungen in Millisekunden-Intervallen in Echtzeit unmöglich macht. Darüber hinaus ist dieser Code auf einen Kern beschränkt (dank Python GIL), egal wie viele Diagramme. Verständlich also, dass ich verzweifelt nach einer schnellen Lösung suche und auf Java umgestiegen bin. Nehmen wir also an, 10 Diagramme gleichzeitig geöffnet zu haben, mit ein paar hundert OHLC-Datenpunkten, alle Aktualisierungen auf einmal sollten keine großen Auswirkungen auf die Leistung haben, die für das menschliche Auge kaum wahrnehmbar sind. Dies ist etwas, das mit Java durchgeführt werden kann, wie verschiedene kommerzielle Projekte zeigen (z. B. Oanda- und Dukascopy-Java-Clients).

Die Frage ist, welche Bibliothek ist für diese Aufgabe geeignet? jFreeChart? JavaFX-Charting direkt? Andere Optionen?

Weiß jemand, welche Bibliotheken kommerzielle Projekte verwenden?

Antworten (2)

Vaadin-Diagramme

Wenn Sie eine Webanwendungslösung wünschen, die in reinem Java geschrieben, aber automatisch in einem Webbrowser mit HTML5 -Webstandardtechnologien gerendert wird, schlage ich vor, sich das Vaadin Framework (Open Source, kostenlos) plus das Vaadin Charts -Add-on ( kommerziell).

Das Vaadin Charts-Add-On ist ein Java-Wrapper (der serverseitig aufgerufen werden muss), der die in JavaScript integrierte HighCharts - Bibliothek umschließt (wird clientseitig beim Rendern des Diagramms verwendet, aber für den Java-Programmierer transparent). Also fast alles, was HighCharts über JavaScript tun kann, kann Vaadin Charts auch über Java-Aufrufe tun. Y

Mit Vaadin Charts erhalten Sie das Beste aus beiden Welten: (a) die gesamte Leistungsfähigkeit von Java und seinen vielen Bibliotheken, JDBC , statische Typisierung, Geschwindigkeit, Zuverlässigkeit und dergleichen, zusammen mit (b) leistungsstarkem Zeichnen des darin enthaltenen Diagramms den Browser lokal mit JavaScript.

Ich weiß nicht, ob Vaadin Charts alle Ihre Anforderungen erfüllt, aber es bietet Candlestick-Charts und OHLC-Charts .

Vaadin verfügt über eine integrierte Unterstützung für die Push-Technologie , sodass Ihre Diagramme automatisch im Webbrowser aktualisiert werden können, ohne dass der Benutzer aufgefordert wird.

Mit dem JavaScript-Ansatz können Sie LightningChart JS als Webinhalt in Ihrer Java-Anwendung hinzufügen . Es wurde mit WebGL erstellt und die Leistung ist im Vergleich zu Java- oder anderen JavaScript-Diagrammen um Größenordnungen höher. LightningChart kann bis zu 100 Millionen Datenpunkte in Echtzeit rendern.

Schnelles Zoomen, Scrollen, Schwenken etc. wird unterstützt, OHLC, Berge, Linienserien etc. natürlich.

Handelsbeispiel (statische Daten) Handelsdiagramm

Hier finden Sie viele interaktive Echtzeitbeispiele