Audit hệ thống

Làm được gì, và nhanh tới đâu.

Mọi thứ trên trang này đều có trong @tradecanvas/chart 1.26.0. Thời gian vẽ được đo trên Chrome, trên một laptop dùng GPU tích hợp (Intel UHD); lệnh node scripts/bench-render.mjs trong repo chạy đúng các cảnh này trên máy của bạn.

Kiến trúc: Vì sao vẫn nhanh trên một chiếc laptop bình thường. →

Các con số

18
loại biểu đồ
134
chỉ báo có sẵn
69
công cụ vẽ
30
ngôn ngữ của widget
101
khoá style
114
công tắc tính năng của widget
0
thư viện bên thứ ba khi chạy
3.000+
unit test

Đo ngay trên máy của bạn

Các con số ở trên đo trên laptop của chúng tôi. Những bài đo dưới đây chạy cùng các cảnh đó trong trình duyệt của bạn, bằng đúng thư viện bạn sẽ dùng. Không có gì được ghi sẵn.

1.000.000 nến: Canvas 2D rồi WebGL

Một triệu nến một phút kèm Bollinger Bands, EMA, RSI và MACD, thu nhỏ hết cỡ rồi kéo qua lại 150 khung hình, vẽ bằng Canvas 2D trước rồi bằng WebGL 2.

Tick trực tiếp trên 100.000 nến

Mỗi khung hình nhận 20 tick trên biểu đồ 100.000 nến có bốn chỉ báo. Mỗi chỉ báo cập nhật từ nến cuối thay vì tính lại cả chuỗi.

Bảng giá 1.000 mã

bo-grid với 1.000 mã được cập nhật 50 lần mỗi giây. Ô nào đổi giá thì nháy màu, và chỉ những ô đó được vẽ lại.

WebGL 2, có Canvas 2D làm nền

  • renderer: 'webgl' vẽ phần biểu đồ bằng GPU: nến, khối lượng, đường và vùng tô của chỉ báo, heatmap độ sâu. Chữ vẫn nằm trên một lớp Canvas 2D phía trên. 'auto' tự chọn WebGL ở mọi nơi có WebGL 2.
  • Nơi không có WebGL 2, hoặc context bị mất, cùng biểu đồ đó tiếp tục chạy bằng Canvas 2D. Code của bạn không phải đổi gì.
  • Tối đa 8 biểu đồ trên một trang vẽ bằng WebGL cùng lúc (setMaxWebGLCharts); các biểu đồ còn lại vẽ bằng Canvas 2D và quay về WebGL khi có context trống.
  • Nến nằm trên cùng các điểm ảnh ở cả hai cách vẽ, nên biểu đồ trông như nhau dù cách nào đang vẽ.

Thời gian vẽ một khung hình

Thời gian vẽ một khung hình khi kéo biểu đồ. 16,7 ms là 60 khung hình mỗi giây.

Biểu đồTỉ lệ điểm ảnhCanvas 2DWebGLCanvas 2D / WebGL
1600×900, 500 nến + 4 chỉ báo2×27,4 ms19,6 ms
1600×900, thu nhỏ hết cỡ trên 200.000 nến + 4 chỉ báo2×34,5 ms20,2 ms
1600×900, thu nhỏ hết cỡ trên 1.000.000 nến + 4 chỉ báo2×34,5 ms16,7 ms
1600×900, heatmap độ sâu, 240 lần chụp × 80 mức giá2×25,5 ms16,8 ms
Sáu biểu đồ, mỗi biểu đồ 500 nến và 2 chỉ báo2×23,5 ms17,2 ms
2560×1400, 2.000 nến + 4 chỉ báo1×41,6 ms17,7 ms
2560×1400, 2.000 nến + 4 chỉ báo1,5×70,8 ms17,6 ms
2560×1400, 2.000 nến + 4 chỉ báo2×114,5 ms29,1 ms

Mặc định vẽ bằng Canvas 2D. renderer: 'webgl' (hoặc 'auto') vẽ vùng biểu đồ bằng WebGL 2, và tự quay về Canvas 2D khi trình duyệt không có WebGL 2 hoặc mất context.

Đường đi của dữ liệu

Một tick trực tiếp, có Bollinger Bands, EMA, RSI và MACD trên 100.000 nến
~0,001 ms
Tính lại toàn bộ bốn chỉ báo đó trên 100.000 nến
~27 ms
Một đường 1.000.000 điểm trên màn hình, rút gọn cho một khung hình
~2,6 ms
Vẽ lại khi rê chuột (crosshair, legend)
~0,2 ms
Đổi mã hay khung thời gian chỉ hiện lớp chờ sau
200 ms

Dung lượng tải

Đã minify và gzip, gồm mọi thứ nó import.

Chart, phần API không giao diện
176 KB
ChartWidget, giao diện đầy đủ
315 KB
Bộ vẽ WebGL, chỉ tải khi dùng lần đầu
18 KB

Cách kiểm tra

  • Hơn 3.000 unit test trên bảy gói chạy trên CI với mọi pull request.
  • Bộ vẽ WebGL vẽ nến trên đúng các điểm ảnh thiết bị như Canvas 2D; đường và vùng tô chỉ khác ở vài điểm ảnh khử răng cưa ở mép.
  • Bộ vẽ WebGL đã được kiểm trên Chromium, Firefox và WebKit. Không có WebGL 2, hoặc khi mất context, biểu đồ vẽ tiếp bằng Canvas 2D.
  • Các đoạn code mẫu trong tài liệu và trong agent skill được kiểm kiểu với API thật.
  • Biểu đồ đọc được bằng trình đọc màn hình và dùng được bằng bàn phím; widget hiển thị phải sang trái với tiếng Ả Rập, Do Thái và Ba Tư.

Tính năng

Lọc theo nhóm, hoặc tìm theo tên hay API.

Tính năngNhómChi tiết và API
Nến, thanh OHLC, đường, vùng, baseline, Heikin-Ashi, nến rỗngLoại biểu đồcandlestick, bar, line, area, baseline, heikinAshi, hollowCandle
Renko, line break, Kagi, point & figure, range barsLoại biểu đồCỡ ô hoặc ATR, số đường để đảo chiều, đảo chiều theo % hoặc theo giá, biên độ mỗi thanh
Volume candles, Equivolume, HLC area, step line, đường có điểm, high-lowLoại biểu đồ18 loại biểu đồ tất cả
Ẩn chuỗi giá chínhLoại biểu đồChỉ giữ lại chỉ báo và hình vẽ
Biểu đồ cho dashboardLoại biểu đồCột (nhóm, chồng, nằm ngang), donut và tròn, scatter và bong bóng, histogram, lịch, ma trận tương quan, bản đồ theo ngành, đường ngược chiều kim đồng hồ, sparkline, đồng hồ đo, bản đồ nhiệt và treemap, thác nước, độ sâu, đường cong vốn
Canvas 2D hoặc WebGL 2Hiển thịrenderer: 'canvas' | 'webgl' | 'auto', setRenderer, sự kiện rendererChange
Mỗi cột điểm ảnh một nét khi thu nhỏHiển thịĐường, dải và histogram của chỉ báo khi mỗi nến hẹp hơn một điểm ảnh
Một triệu nến kéo vẫn mượtHiển thịKèm bốn chỉ báo, ở tỉ lệ điểm ảnh 2
Heatmap độ sâu, volume profile và market profile trên GPUHiển thịpushDepthSnapshot(book, time)
Nhiều biểu đồ WebGL trên một trangHiển thịTối đa 8 (setMaxWebGLCharts); phần còn lại vẽ bằng Canvas 2D; trở lại WebGL khi context quay về
Sắc nét ở mọi tỉ lệ màn hìnhHiển thịNến, volume và hình vẽ nằm đúng điểm ảnh thiết bị ở 100%, 125% và 200%
Không phụ thuộc thư viện bên thứ ba khi chạyHiển thịKhông có gì khác phải cài hay rà soát
134 chỉ báo có sẵnChỉ báoPivot points 6 kiểu, MA Cross, tương quan với mã khác
Chọn nguồn giáChỉ báoopen, high, low, hl2, hlc3, ohlc4, hlcc4
Chỉ báo chồng lên chỉ báoChỉ báoNhư đường trung bình của RSI, cập nhật theo từng tick
Nhiều chỉ báo trong một pane, chuyển giữa các paneChỉ báomoveIndicatorToPane
Nhiều bản của cùng một chỉ báoChỉ báoEMA 20 và EMA 50 cạnh nhau
Mức và ngưỡngChỉ báoRSI 30/70, CCI ±100, lưu cùng layout
Giá trị cuối trên trụcChỉ báoTrên trục giá và trục của từng pane, theo màu của đường
Thu gọn, phóng to, sắp xếp paneChỉ báoLưu cùng layout
Template chỉ báoChỉ báoThông số, kiểu, mức và pane, lưu và áp dụng cùng lúc
Kiểu và ẩn/hiện từng đườngChỉ báoĐường bị ẩn không kéo giãn thang; setIndicatorDefaults
Volume delta và CVDChỉ báoƯớc tính từ nến
Xuất giá trị chỉ báoChỉ báoCSV hoặc JSON, mỗi đường một cột
Cập nhật tăng dần theo tickChỉ báoupdate() chỉ tính lại nến đang hình thành
69 công cụ vẽCông cụ vẽĐường, kênh, Fibonacci, Gann, pitchfork, sóng Elliott, mô hình giá, chu kỳ, dự phóng
Cài đặt riêng cho từng công cụCông cụ vẽKiểu, thuộc tính và toạ độ theo lưới giá của mã
Vị thế mua và bánCông cụ vẽTỉ lệ lời:lỗ, khối lượng tính từ rủi ro theo % hoặc theo tiền
Cảnh báo theo hình vẽCông cụ vẽKhi giá cắt đường xu hướng hay kênh đúng như đã vẽ, cả trên thang log
Thứ tự lớp, nhóm và templateCông cụ vẽĐưa lên, đưa xuống, gom nhóm, khoá, ẩn
Ghi chú, chú thích, mũi tên, cờ, bút vẽ, path, đường congCông cụ vẽVẽ tay và vẽ nhiều điểm
Anchored VWAP và volume profile theo khoảngCông cụ vẽĐọc nến của biểu đồ
Tẩy, zoom vùng, nam châm mạnh, phím tắtCông cụ vẽAlt+T, Alt+H, Alt+J, Alt+V, Alt+C, Alt+F
Đi tới ngày; khoảng 1D tới AllThang và thời gianKhông giới hạn thu nhỏ
Múi giờ IANA có giờ mùa hèThang và thời gianHoặc múi giờ của chính sàn
Khung thời gian bất kỳ, và nến tickThang và thời gian7m, 90m, 2d dựng từ khung nguồn có; 100T từ các giao dịch
Thang trái và phải; log, đảo ngược và % theo từng paneThang và thời gianThang trái cho overlay hoặc lặp lại thang giá
So sánh mã, spread và ratioThang và thời gianTrên thang hoặc pane riêng, khớp theo thời gian
Giờ giao dịch mở rộngThang và thời gianTheo giờ phiên của mã
Định dạng giá và thời gianThang và thời gianpriceFormat dạng hàm hoặc phân số như 1/32; timeFormatter
Thang giá theo số lẻ và bước giá của mãThang và thời gianpricePrecision, minTick: cổ phiếu có bước giá 10 không bao giờ hiện 21.705
Đường cao và thấp, giá mua và giá bánThang và thời gianGiá mua và giá bán lấy từ tick của nguồn dữ liệu
Mốc sự kiện trên biểu đồThang và thời giansignalMarkerHover, signalMarkerClick
Nguồn dữ liệu có sẵn và nguồn của bạnDữ liệu và trực tiếpBinance, Bybit, Coinbase, Kraken, mock; WebSocketAdapter, PollingAdapter
Tải thêm lịch sử khi kéo sang tráiDữ liệu và trực tiếpfetchHistoryBefore
Tìm mã kèm thông tinDữ liệu và trực tiếpsearchSymbols, resolveSymbol: số lẻ, bước giá, phiên, múi giờ
Thông tin mã biết được sau khi kết nốiDữ liệu và trực tiếpSự kiện symbolInfo của adapter
Sổ lệnh dạng thangDữ liệu và trực tiếpKhối lượng mua và bán theo mức giá; bấm để đặt lệnh
Giá trực tiếp cho watchlistDữ liệu và trực tiếpsubscribeQuotes, setQuotes, getQuote
Tin tức và trạng thái thị trườngDữ liệu và trực tiếpfetchNews; đếm ngược tới giờ mở hay đóng cửa
Quy định của sànDữ liệu và trực tiếpsetMarket: bước giá theo vùng giá, giá trần và giá sàn trong ngày, lô, phiên giao dịch; HOSE, HNX, UPCoM và hợp đồng tương lai VN30
Lệnh và vị thế trên biểu đồGiao dịchKéo để sửa; huỷ, đóng và đảo vị thế ngay trên đường
Dấu khớp lệnhGiao dịchLý do và lãi/lỗ trong executionFill
Phiếu đặt lệnhGiao dịchKhối lượng, loại lệnh, cắt lỗ và chốt lời, hiệu lực, kiểm tra ngay khi nhập; bước giá, giá trần, giá sàn và lô của sàn
Bảng tài khoảnGiao dịchVị thế có lãi/lỗ trực tiếp, lệnh chờ, lịch sử khớp
Tín hiệu và vùng lệnhGiao dịchKhoá style markers.*, tradeZones.*
Backtest và chỉ số rủi roGiao dịch@tradecanvas/analytics: phí, trượt giá, Sharpe, Sortino, Calmar, sụt giảm
Cảnh báo không chỉ theo mức giáCảnh báo và replayĐường cắt đường, biến động N% trong N nến, khi đóng nến, có hạn dùng
Replay theo bước nhỏ hơnCảnh báo và replayKhung lớn được phát lại từ nến nhỏ
Giao dịch giấy khi replayCảnh báo và replayLệnh khớp theo giá đang phát lại
Replay trên lưới nhiều biểu đồCảnh báo và replayChạy đồng bộ
Replay cho ứng dụngCảnh báo và replaystartTime, hideHistory, duration, mốc hiện dần theo replay, replayComplete
Lưới widget đồng bộKhông gian làm việcTối đa 6, chung mã, khung thời gian, crosshair, thời gian và hình vẽ
Layout có tên, lưu ở nơi của bạnKhông gian làm việcLưu, mở, đổi tên, tự lưu; LayoutStorage cho máy chủ
Hoàn tác và làm lại cho mọi thứKhông gian làm việcHình vẽ, chỉ báo, cài đặt và loại biểu đồ; recordUndo
Menu chuột phải theo vùngKhông gian làm việcHình vẽ, vùng giá, pane, trục giá, trục thời gian
WatchlistKhông gian làm việcNhiều danh sách, kéo để sắp xếp
Sự kiện cho ứng dụngKhông gian làm việcsymbolChange, timeframeChange, ordersChange, executionFill, styleChange và nhiều hơn
Ba kiểu giao diện cho widgetTuỳ biếnStudio, Terminal, Capsule; ui và setUI; biến CSS --tcw-*
Giao diện biểu đồ theo khoáTuỳ biếnapplyOverrides trên 101 khoá có kiểu, ở lớp ứng dụng và lớp người dùng
Settings chỉnh được mọi khoáTuỳ biếnTab style theo loại biểu đồ đang xem, tab giao dịch
112 công tắc tính năngTuỳ biếnfeatures, setFeatures, isFeatureOn; đổi được khi đang chạy
Thành phần của riêng bạn trong widgetTuỳ biếnNút và dropdown trên toolbar, nút sidebar, mục thanh trạng thái, slot, mục menu
Phím tắt của riêng bạnTuỳ biếnaddHotkey theo bố cục bàn phím
Widget bằng 30 ngôn ngữNgôn ngữ và trợ năngTiếng Ả Rập, Do Thái và Ba Tư hiển thị phải sang trái
Trình đọc màn hình và bàn phímNgôn ngữ và trợ năngTóm tắt biểu đồ, đọc từng nến, hộp thoại dùng bằng bàn phím
Trang web và tài liệu bằng bốn ngôn ngữNgôn ngữ và trợ năngEnglish, Tiếng Việt, 한국어, 日本語
Component cho React, Vue và SvelteNhà phát triểnProps phản ứng: overrides, indicators, features
PluginNhà phát triểnChỉ báo, công cụ vẽ, loại biểu đồ và overlay; overlayScale và getPriceStep để vẽ theo lưới giá
Tài liệu cho coding agentNhà phát triểnllms.txt, llms-full.txt và một agent skill

Giới hạn đã biết

  • Canvas 2D vẫn là bộ vẽ mặc định cho tới khi WebGL được thử trên nhiều thiết bị hơn; tốc độ khung hình trên Safari và màn hình 5K chưa được đo.
  • Ở tỉ lệ điểm ảnh 2 với biểu đồ 2560×1400, riêng việc trình duyệt ghép các lớp đã mất khoảng 23 ms trên GPU tích hợp, nên khung hình WebGL ở đó trung bình 29 ms.
  • Khung tick được dựng từ các giao dịch gần đây mà nguồn dữ liệu trả về; không tải được lịch sử tick cũ hơn.
  • Volume delta và CVD được ước tính từ nến, không theo chiều của từng giao dịch.
  • Tối đa 8 biểu đồ trên một trang vẽ bằng WebGL cùng lúc; các biểu đồ còn lại vẽ bằng Canvas 2D.

Bạn đang làm màn hình giao dịch với TradeCanvas?

Chúng tôi rất muốn nghe về nó.