Systemaudit

Was es kann – und wie schnell.

Alles auf dieser Seite steckt in @tradecanvas/chart 1.30.0. Die Bildzeiten wurden in Chrome auf einem Laptop mit integrierter Grafik (Intel UHD) gemessen; node scripts/bench-render.mjs im Repository spielt dieselben Szenen auf Ihrem Rechner ab.

Architektur: Wie es auf einem gewöhnlichen Laptop schnell bleibt. →

In Zahlen

18
Charttypen
134
eingebaute Indikatoren
69
Zeichenwerkzeuge
30
Widget-Sprachen
101
Style-Schlüssel
114
Feature-Schalter des Widgets
0
Laufzeitabhängigkeiten von Drittanbietern
3.000+
Unit-Tests

Auf Ihrem Rechner messen

Die Zahlen oben stammen von unserem Laptop. Diese Tests spielen dieselben Szenen in Ihrem Browser ab, mit der Bibliothek, die Sie ausliefern würden. Nichts ist vorab aufgezeichnet.

1.000.000 Kerzen: Canvas 2D, dann WebGL

Eine Million 1-Minuten-Kerzen mit Bollinger-Bändern, EMA, RSI und MACD, ganz herausgezoomt und 150 Bilder lang verschoben, zuerst mit Canvas 2D und dann mit WebGL 2 gezeichnet.

Live-Ticks auf 100.000 Kerzen

In jedem Bild treffen zwanzig Ticks auf einem Chart mit 100.000 Kerzen und vier Indikatoren ein. Jeder Indikator rechnet ab der letzten Kerze weiter, statt die Serie neu zu berechnen.

Eine Kurstafel mit 1.000 Symbolen

bo-grid mit 1.000 Symbolen, 50-mal pro Sekunde aktualisiert. Jede geänderte Zelle blinkt, und nur diese Zellen werden neu gezeichnet.

WebGL 2, mit Canvas 2D darunter

  • renderer: 'webgl' zeichnet den Chartbereich auf der GPU: Kerzen, Volumen, Indikatorlinien und -flächen, die Tiefen-Heatmap. Text bleibt auf einer Canvas-2D-Ebene darüber. 'auto' wählt WebGL überall dort, wo WebGL 2 verfügbar ist.
  • Wo WebGL 2 fehlt oder sein Kontext verloren geht, zeichnet derselbe Chart mit Canvas 2D weiter. An Ihrem Code ändert sich nichts.
  • Bis zu 8 Charts pro Seite zeichnen gleichzeitig mit WebGL (setMaxWebGLCharts); die übrigen zeichnen mit Canvas 2D und wechseln zurück zu WebGL, sobald ein Kontext frei wird.
  • Kerzen landen in beiden Renderern auf denselben Gerätepixeln, daher sieht ein Chart gleich aus, egal welcher ihn zeichnet.

Bildzeit

Die Zeit für ein Bild beim Verschieben. 16,7 ms entsprechen 60 Bildern pro Sekunde.

ChartPixelverhältnisCanvas 2DWebGLCanvas 2D / WebGL
1600×900, 500 Kerzen + 4 Indikatoren2×27,4 ms19,6 ms
1600×900, herausgezoomt auf 200.000 Kerzen + 4 Indikatoren2×34,5 ms20,2 ms
1600×900, herausgezoomt auf 1.000.000 Kerzen + 4 Indikatoren2×34,5 ms16,7 ms
1600×900, Tiefen-Heatmap, 240 Schnappschüsse × 80 Stufen2×25,5 ms16,8 ms
Sechs Charts mit je 500 Kerzen und 2 Indikatoren2×23,5 ms17,2 ms
2560×1400, 2.000 Kerzen + 4 Indikatoren1×41,6 ms17,7 ms
2560×1400, 2.000 Kerzen + 4 Indikatoren1,5×70,8 ms17,6 ms
2560×1400, 2.000 Kerzen + 4 Indikatoren2×114,5 ms29,1 ms

Canvas 2D ist der Standard. renderer: 'webgl' (oder 'auto') zeichnet den Chartbereich mit WebGL 2 und fällt auf Canvas 2D zurück, wo WebGL 2 fehlt oder sein Kontext verloren geht.

Datenpfad

Ein Live-Tick mit Bollinger-Bändern, EMA, RSI und MACD auf 100.000 Kerzen
~0,001 ms
Dieselben vier Indikatoren vollständig neu berechnet auf 100.000 Kerzen
~27 ms
Eine Linie mit 1.000.000 sichtbaren Punkten, für ein Bild ausgedünnt
~2,6 ms
Ein Neuzeichnen beim Überfahren (Fadenkreuz, Legende)
~0,2 ms
Ein Symbol- oder Zeiteinheitenwechsel zeigt einen Ladeschleier erst nach
200 ms

Downloadgröße

Minifiziert und mit gzip komprimiert, inklusive allem, was importiert wird.

Chart, die Headless-API
176 KB
ChartWidget, die komplette Oberfläche
315 KB
Der WebGL-Renderer, beim ersten Einsatz geladen
18 KB

Wie geprüft wird

  • Mehr als 3.000 Unit-Tests in den sieben Paketen laufen bei jedem Pull Request in der CI.
  • Der WebGL-Renderer zeichnet Kerzen auf dieselben Gerätepixel wie Canvas 2D; Linien und Flächen weichen nur an wenigen geglätteten Kantenpixeln ab.
  • Der WebGL-Renderer wurde in Chromium, Firefox und WebKit geprüft. Ohne WebGL 2 oder wenn sein Kontext verloren geht, zeichnet der Chart mit Canvas 2D weiter.
  • Die Codebeispiele in der Doku und im Agent-Skill werden gegen die echte API typgeprüft.
  • Charts lassen sich per Screenreader vorlesen und mit der Tastatur bedienen; das Widget läuft auf Arabisch, Hebräisch und Persisch von rechts nach links.

Funktionen

Nach Bereich filtern oder nach Name oder API suchen.

FunktionBereichDetails und API
Kerzen, OHLC-Balken, Linie, Fläche, Basislinie, Heikin-Ashi, hohle KerzenCharttypencandlestick, bar, line, area, baseline, heikinAshi, hollowCandle
Renko, Line Break, Kagi, Point & Figure, Range-BalkenCharttypenBoxgröße oder ATR, Linien bis zum Durchbruch, Umkehr in Prozent oder Preis, Spanne pro Balken
Volumenkerzen, Equivolume, HLC-Fläche, Stufenlinie, Linie mit Markern, Hoch-TiefCharttypen18 Charttypen insgesamt
Hauptserie ausgeblendetCharttypenNur Indikatoren und Zeichnungen bleiben
Charts für DashboardsCharttypenBalken (gruppiert, gestapelt, waagerecht), Donut- und Kreisdiagramme, Streu- und Blasendiagramme, Histogramme, Kalender, Korrelationsmatrizen, Sektorkarten, Gegenuhrzeigerkurven, Sparklines, Tachos, Heatmaps und Treemaps, Wasserfälle, Orderbuchtiefe, Equity-Kurven
Canvas 2D oder WebGL 2Renderingrenderer: 'canvas' | 'webgl' | 'auto', setRenderer, das Event rendererChange
Ein Strich pro Pixelspalte beim HerauszoomenRenderingIndikatorlinien, Bänder und Histogramme unter einem Pixel pro Kerze
Eine Million Kerzen flüssig verschobenRenderingMit vier Indikatoren, bei einem Pixelverhältnis von 2
Tiefen-Heatmap, Volumenprofil und Marktprofil auf der GPURenderingpushDepthSnapshot(book, time)
Mehrere WebGL-Charts auf einer SeiteRenderingBis zu 8 (setMaxWebGLCharts); die übrigen zeichnen mit Canvas 2D; zurück zu WebGL, sobald der Kontext wiederkommt
Scharf bei jeder BildschirmskalierungRenderingKerzen, Volumen und Zeichnungen auf Gerätepixeln bei 100 %, 125 % und 200 %
Keine Laufzeitabhängigkeiten von DrittanbieternRenderingNichts weiter zu installieren oder zu prüfen
134 eingebaute IndikatorenIndikatorenPivot-Punkte in sechs Varianten, MA Cross, Korrelation mit einem anderen Symbol
PreisquelleIndikatorenopen, high, low, hl2, hlc3, ohlc4, hlcc4
Ein Indikator auf einem IndikatorIndikatorenEtwa ein gleitender Durchschnitt des RSI, bei jedem Tick aktualisiert
Mehrere Indikatoren in einem Bereich, zwischen Bereichen verschobenIndikatorenmoveIndicatorToPane
Derselbe Indikator mehrfachIndikatorenEMA 20 und EMA 50 nebeneinander
Niveaus und SchwellenIndikatorenRSI 30/70, CCI ±100, mit dem Layout gespeichert
Letzter Wert an der AchseIndikatorenAn der Preisachse und der Achse jedes Bereichs, in der Farbe der Linie
Bereiche eingeklappt, maximiert und umsortiertIndikatorenMit dem Layout gespeichert
IndikatorvorlagenIndikatorenEingaben, Stil, Niveaus und Bereich, zusammen gespeichert und angewendet
Stil und Sichtbarkeit jeder LinieIndikatorenEine ausgeblendete Linie dehnt die Skala nicht; setIndicatorDefaults
Volumen-Delta und CVDIndikatorenAus den Kerzen geschätzt
Export der IndikatorwerteIndikatorenCSV oder JSON, eine Spalte pro Linie
Inkrementelle Updates bei Live-TicksIndikatorenupdate() berechnet nur die entstehende Kerze neu
69 ZeichenwerkzeugeZeichenwerkzeugeLinien, Kanäle, Fibonacci, Gann, Pitchforks, Elliott-Wellen, Muster, Zyklen, Projektionen
Eigene Einstellungen je WerkzeugZeichenwerkzeugeStil, Eigenschaften und Koordinaten auf dem Preisraster des Marktes
Long- und Short-PositionenZeichenwerkzeugeChance-Risiko-Verhältnis, Menge aus dem Risiko in Prozent oder Geld
Alarme an einer ZeichnungZeichenwerkzeugeWenn der Kurs eine Trendlinie oder einen Kanal so kreuzt, wie gezeichnet, auch bei logarithmischer Skala
Reihenfolge, Gruppen und VorlagenZeichenwerkzeugeNach vorne, nach hinten, gruppieren, sperren, ausblenden
Notizen, Callouts, Pfeile, Flaggen, Pinsel, Pfad, KurveZeichenwerkzeugeFreihand- und Mehrpunktzeichnungen
Verankerter VWAP und Volumenprofil über einen festen BereichZeichenwerkzeugeLesen die Kerzen des Charts
Radierer, Zoom-Rahmen, starker Magnet, TastenkürzelZeichenwerkzeugeAlt+T, Alt+H, Alt+J, Alt+V, Alt+C, Alt+F
Zu einem Datum springen; Zeiträume von 1D bis AlleSkalen und ZeitKein Limit beim Herauszoomen
IANA-Zeitzonen mit SommerzeitSkalen und ZeitOder die eigene Zeitzone der Börse
Jede Zeiteinheit und Tick-KerzenSkalen und Zeit7m, 90m, 2d aus dem gebaut, was der Feed liefert; 100T aus seinen Trades
Linke und rechte Skala; logarithmisch, invertiert und prozentual je BereichSkalen und ZeitDie linke Skala für ein Overlay oder eine Kopie der Preisskala
Symbole vergleichen, Spread und VerhältnisSkalen und ZeitAuf eigener Skala oder in eigenem Bereich, zeitlich abgeglichen
Erweiterte HandelszeitenSkalen und ZeitAus den Sitzungszeiten des Symbols
Preis- und ZeitformateSkalen und ZeitpriceFormat als Funktion oder Brüche wie 1/32; timeFormatter
Die Skala in den Dezimalstellen und dem Preisschritt des SymbolsSkalen und ZeitpricePrecision, minTick: Eine Aktie, die sich in Zehnerschritten bewegt, zeigt nie 21.705
Hoch- und Tieflinien, Bid und AskSkalen und ZeitBid und Ask aus den Ticks des Feeds
Ereignismarken im ChartSkalen und ZeitsignalMarkerHover, signalMarkerClick
Fertige Feeds und eigeneDaten und EchtzeitBinance, Bybit, Coinbase, Kraken, mock; WebSocketAdapter, PollingAdapter
Ältere Historie beim Scrollen nach links nachgeladenDaten und EchtzeitfetchHistoryBefore
Symbolsuche mit DetailsDaten und EchtzeitsearchSymbols, resolveSymbol: Dezimalstellen, Preisschritt, Sitzungen, Zeitzone
Symboldetails, die erst nach dem Verbinden bekannt werdenDaten und EchtzeitDas Event symbolInfo des Adapters
Markttiefe-LeiterDaten und EchtzeitBid- und Ask-Größe je Preis; Klick zum Handeln
Live-Kurse für BeobachtungslistenDaten und EchtzeitsubscribeQuotes, setQuotes, getQuote
News und MarktstatusDaten und EchtzeitfetchNews; ein Countdown bis zur Eröffnung oder zum Handelsschluss
BörsenregelnDaten und EchtzeitsetMarket: Tick-Größen nach Preisband, tägliche Ober- und Untergrenze, Lots, Handelssitzungen; HOSE, HNX, UPCoM und VN30-Futures
Orders und Positionen im ChartTradingZum Ändern ziehen; über die Linie stornieren, schließen und umkehren
AusführungsmarkenTradingGrund und Gewinn oder Verlust in executionFill
OrdermaskeTradingMenge, Typ, Stop-Loss und Take-Profit, Gültigkeit, schon beim Tippen geprüft; Tick-Größe, Ober- und Untergrenze und Lots der Börse
KontopanelTradingPositionen mit Live-Gewinn und -Verlust, offene Orders, Ausführungen
Signale und Trade-ZonenTradingStyle-Schlüssel markers.*, tradeZones.*
Backtesting und RisikokennzahlenTrading@tradecanvas/analytics: Kommission, Slippage, Sharpe, Sortino, Calmar, Drawdown
Alarme über ein Preisniveau hinausAlarme und ReplayLinie kreuzt Linie, eine Bewegung von N % in N Kerzen, bei Kerzenschluss, mit Ablaufdatum
Bar-Replay in feineren SchrittenAlarme und ReplayEine größere Zeiteinheit, aus kleineren Kerzen abgespielt
Paper-Trading im ReplayAlarme und ReplayOrders werden zu den abgespielten Kursen ausgeführt
Replay über ein Raster von ChartsAlarme und ReplayIm Gleichschritt
Replay für AnwendungenAlarme und ReplaystartTime, hideHistory, duration, Marken, die beim Abspielen erscheinen, replayComplete
Ein Raster synchronisierter WidgetsArbeitsbereichBis zu 6, mit gemeinsamem Symbol, Zeiteinheit, Fadenkreuz, Zeit und Zeichnungen
Benannte Layouts in Ihrem eigenen SpeicherArbeitsbereichSpeichern, öffnen, umbenennen, automatisch speichern; LayoutStorage für einen Server
Rückgängig und Wiederholen für allesArbeitsbereichZeichnungen, Indikatoren, Einstellungen und Charttyp; recordUndo
Kontextmenüs je BereichArbeitsbereichZeichnungen, Chartbereich, Panes, Preisachse, Zeitachse
BeobachtungslistenArbeitsbereichMehrere Listen, per Ziehen umsortiert
Events für die Host-AnwendungArbeitsbereichsymbolChange, timeframeChange, ordersChange, executionFill, styleChange und mehr
Drei Erscheinungsbilder für das WidgetAnpassungStudio, Terminal, Capsule; ui und setUI; CSS-Variablen --tcw-*
Das Aussehen des Charts per SchlüsselAnpassungapplyOverrides über 101 typisierte Schlüssel, auf einer Host- und einer Nutzerebene
Einstellungen, die jeden Schlüssel erreichenAnpassungEin Stil-Tab für den gezeigten Charttyp, ein Trading-Tab
112 Feature-SchalterAnpassungfeatures, setFeatures, isFeatureOn; im laufenden Betrieb änderbar
Eigene Teile im WidgetAnpassungButtons und Dropdowns in der Werkzeugleiste, Buttons in der Seitenleiste, Statuseinträge, Slots, Menüeinträge
Eigene TastenkürzelAnpassungaddHotkey nach Tastaturbelegung
Das Widget in 30 SprachenSprachen und BarrierefreiheitArabisch, Hebräisch und Persisch von rechts nach links
Screenreader und TastaturSprachen und BarrierefreiheitEine Chart-Zusammenfassung, Kerzen einzeln vorgelesen, Dialoge per Tastatur
Diese Website in 14 Sprachen, ihre Doku in sechsSprachen und BarrierefreiheitEnglish, Tiếng Việt, 简体中文, 繁體中文, 日本語, 한국어, Español, Português, Français, Deutsch, Русский, Türkçe, Bahasa Indonesia, ไทย
Komponenten für React, Vue und SvelteEntwicklerReaktive Props: overrides, indicators, features
PluginsEntwicklerIndikatoren, Zeichenwerkzeuge, Charttypen und Overlays; overlayScale und getPriceStep, um auf dem Preisraster zu zeichnen
Doku für Coding-AgentenEntwicklerllms.txt, llms-full.txt und ein Agent-Skill

Bekannte Grenzen

  • Canvas 2D bleibt der Standard-Renderer, bis WebGL auf mehr Geräten erprobt ist; die Bildrate von WebGL unter Safari und auf 5K-Bildschirmen ist noch nicht gemessen.
  • Bei einem Pixelverhältnis von 2 auf einem 2560×1400-Chart braucht allein das Compositing des Browsers auf integrierter Grafik etwa 23 ms, daher liegen WebGL-Bilder dort im Schnitt bei 29 ms.
  • Tick-Zeiteinheiten werden aus den jüngsten Trades gebaut, die ein Feed liefert; ältere Tick-Historie lässt sich nicht laden.
  • Volumen-Delta und CVD werden aus den Kerzen geschätzt, nicht aus der Seite jedes einzelnen Trades.
  • Höchstens 8 Charts pro Seite zeichnen gleichzeitig mit WebGL; die übrigen zeichnen mit Canvas 2D.

Bauen Sie eine Trading-Oberfläche mit TradeCanvas?

Wir würden gern davon hören.