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:
** 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?
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)
Hier finden Sie viele interaktive Echtzeitbeispiele