它能做什么,又做得多快。
本页所列的一切都包含在 @tradecanvas/chart 1.31.0 中。帧时间是在一台集成显卡(Intel UHD)的笔记本电脑上用 Chrome 测得的;在仓库中运行 node scripts/bench-render.mjs,即可在你自己的机器上跑同样的场景。
数字一览
- 图表类型
- 18
- 内置指标
- 111
- 画线工具
- 69
- 组件语言
- 30
- 样式键
- 101
- 组件功能开关
- 112
- 第三方运行时依赖
- 0
- 单元测试
- 3,000+
帧时间
平移时绘制一帧所需的时间。16.7 ms 即每秒 60 帧。
| 图表 | 像素比 | Canvas 2D | WebGL | Canvas 2D / WebGL |
|---|---|---|---|---|
| 1600×900,500 根K线 + 4 个指标 · 2× | 2 | 27.4 ms | 19.6 ms | |
| 1600×900,缩小显示 200,000 根K线 + 4 个指标 · 2× | 2 | 34.5 ms | 20.2 ms | |
| 1600×900,缩小显示 1,000,000 根K线 + 4 个指标 · 2× | 2 | 34.5 ms | 16.7 ms | |
| 1600×900,深度热力图,240 个快照 × 80 档 · 2× | 2 | 25.5 ms | 16.8 ms | |
| 六个图表,各有 500 根K线和 2 个指标 · 2× | 2 | 23.5 ms | 17.2 ms | |
| 2560×1400,2,000 根K线 + 4 个指标 · 1× | 1 | 41.6 ms | 17.7 ms | |
| 2560×1400,2,000 根K线 + 4 个指标 · 1.5× | 1.5 | 70.8 ms | 17.6 ms | |
| 2560×1400,2,000 根K线 + 4 个指标 · 2× | 2 | 114.5 ms | 29.1 ms |
默认使用 Canvas 2D。renderer: 'webgl'(或 'auto')用 WebGL 2 绘制绘图区;没有 WebGL 2 或其上下文丢失时,回退到 Canvas 2D。
数据路径
- 在 100,000 根K线上带布林带、EMA、RSI 和 MACD 时处理一个实时 tick
- ~0.001 ms
- 在 100,000 根K线上完整重算这四个指标
- ~27 ms
- 一条 1,000,000 个可见点的折线,为一帧降采样
- ~2.6 ms
- 一次悬停重绘(十字光标、图例)
- ~0.2 ms
- 切换代码或周期时,超过此时长才显示加载遮罩
- 200 ms
下载体积
压缩并经 gzip 后的大小,包含其导入的全部内容。
- Chart,无界面 API
- 176 KB
- ChartWidget,完整界面
- 315 KB
- WebGL 渲染器,首次使用时加载
- 18 KB
如何检验
- 七个包共 3,000 多个单元测试,每个拉取请求都会在 CI 中运行。
- WebGL 渲染器把K线画在与 Canvas 2D 相同的设备像素上;线条和填充只在少数抗锯齿边缘像素上有差异。
- WebGL 渲染器已在 Chromium、Firefox 和 WebKit 中检验。没有 WebGL 2 或其上下文丢失时,图表会继续用 Canvas 2D 绘制。
- 文档和智能体技能中的代码示例都会对照真实 API 进行类型检查。
- 图表可由屏幕阅读器朗读,也能完全用键盘操作;组件在阿拉伯语、希伯来语和波斯语下从右到左显示。
功能
按领域筛选,或按名称或 API 搜索。
| 功能 | 领域 | 详情与 API |
|---|---|---|
| 蜡烛图、美国线、折线、面积图、基准线、平均K线、空心蜡烛图 | 图表类型 | candlestick, bar, line, area, baseline, heikinAshi, hollowCandle |
| Renko、新价线、Kagi、点数图、区间K线 | 图表类型 | 砖块大小或 ATR、突破所需的线数、按百分比或价格的反转幅度、每根K线的区间 |
| 成交量蜡烛图、等量图、HLC 面积图、阶梯线、带标记的折线、高低图 | 图表类型 | 共 18 种图表类型 |
| 隐藏主序列 | 图表类型 | 只保留指标和画线 |
| 仪表盘图表 | 图表类型 | 柱状图(分组、堆叠、横向)、环形图和饼图、散点图和气泡图、直方图、日历图、相关矩阵、板块地图、逆时钟曲线、迷你走势图、仪表图、热力图和矩形树图、瀑布图、深度图、权益曲线 |
| Canvas 2D 或 WebGL 2 | 渲染 | renderer: 'canvas' | 'webgl' | 'auto'、setRenderer、rendererChange 事件 |
| 缩小时每个像素列只画一段 | 渲染 | 每根K线不足一个像素时的指标线、通道带和柱状图 |
| 流畅平移一百万根K线 | 渲染 | 带四个指标,像素比为 2 |
| 在 GPU 上绘制深度热力图、成交量分布和市场轮廓 | 渲染 | pushDepthSnapshot(book, time) |
| 一个页面上的多个 WebGL 图表 | 渲染 | 最多 8 个(setMaxWebGLCharts);其余用 Canvas 2D 绘制;上下文恢复后切回 WebGL |
| 任何屏幕缩放比例下都清晰 | 渲染 | 在 100%、125% 和 200% 下,K线、成交量和画线都对齐设备像素 |
| 无第三方运行时依赖 | 渲染 | 无需额外安装或审计任何东西 |
| 134 个内置指标 | 指标 | 六种枢轴点、MA Cross、与另一品种的相关性 |
| 价格来源 | 指标 | open, high, low, hl2, hlc3, ohlc4, hlcc4 |
| 基于指标的指标 | 指标 | 例如 RSI 的移动平均,每个 tick 都会更新 |
| 一个副图中放多个指标,并可在副图间移动 | 指标 | moveIndicatorToPane |
| 同一指标添加多次 | 指标 | EMA 20 和 EMA 50 并排显示 |
| 水平线与阈值 | 指标 | RSI 30/70、CCI ±100,随布局一起保存 |
| 坐标轴上的最新值 | 指标 | 显示在价格轴和各副图的坐标轴上,颜色与线条一致 |
| 副图的折叠、最大化与重新排序 | 指标 | 随布局一起保存 |
| 指标模板 | 指标 | 输入参数、样式、水平线和副图一并保存、一并应用 |
| 每条线的样式与可见性 | 指标 | 隐藏的线不会拉伸坐标;setIndicatorDefaults |
| 成交量差与 CVD | 指标 | 根据K线估算 |
| 导出指标数值 | 指标 | CSV 或 JSON,每条线一列 |
| 实时 tick 的增量更新 | 指标 | update() 只重新计算正在形成的K线 |
| 69 种画线工具 | 画线工具 | 直线、通道、斐波那契、江恩、叉形线、艾略特波浪、形态、周期、投影 |
| 每种工具各自的设置 | 画线工具 | 样式、属性,以及落在市场价格网格上的坐标 |
| 多头与空头仓位 | 画线工具 | 风险回报比,按风险百分比或金额计算数量 |
| 画线上的提醒 | 画线工具 | 价格穿越所画的趋势线或通道时触发,对数坐标同样适用 |
| 层级、分组与模板 | 画线工具 | 上移、下移、分组、锁定、隐藏 |
| 注释、标注、箭头、旗标、画笔、路径、曲线 | 画线工具 | 手绘与多点绘制 |
| 锚定 VWAP 与固定区间成交量分布 | 画线工具 | 读取图表自身的K线 |
| 橡皮擦、缩放框、强磁吸、键盘快捷键 | 画线工具 | Alt+T, Alt+H, Alt+J, Alt+V, Alt+C, Alt+F |
| 跳转到日期;从 1D 到 All 的时间范围 | 坐标与时间 | 缩小不设上限 |
| 支持夏令时的 IANA 时区 | 坐标与时间 | 或使用交易所自己的时区 |
| 任意周期,以及 tick K线 | 坐标与时间 | 7m、90m、2d 由行情源提供的数据合成;100T 由其成交合成 |
| 左右两侧坐标;每个副图可设对数、反转和百分比 | 坐标与时间 | 左侧坐标可用于叠加层,或作为价格坐标的副本 |
| 品种对比、价差与比值 | 坐标与时间 | 使用独立的坐标或副图,按时间对齐 |
| 延长交易时段 | 坐标与时间 | 依据品种的交易时段 |
| 价格与时间格式 | 坐标与时间 | priceFormat 可以是函数,或 1/32 这样的分数;timeFormatter |
| 按品种的小数位和最小变动价位显示坐标 | 坐标与时间 | pricePrecision、minTick:以 10 为单位变动的股票绝不会显示 21,705 |
| 最高价与最低价线、买价与卖价 | 坐标与时间 | 买卖价来自行情源的 tick |
| 图表上的事件标记 | 坐标与时间 | signalMarkerHover, signalMarkerClick |
| 现成的行情源,也可接入你自己的 | 数据与实时行情 | Binance、Bybit、Coinbase、Kraken、mock;WebSocketAdapter、PollingAdapter |
| 向左滚动时加载更早的历史 | 数据与实时行情 | fetchHistoryBefore |
| 带详细信息的品种搜索 | 数据与实时行情 | searchSymbols、resolveSymbol:小数位、最小变动价位、交易时段、时区 |
| 连接后才获知的品种详情 | 数据与实时行情 | 适配器的 symbolInfo 事件 |
| 深度报价阶梯 | 数据与实时行情 | 按价格显示买卖挂单量;点击即可交易 |
| 自选列表的实时报价 | 数据与实时行情 | subscribeQuotes, setQuotes, getQuote |
| 新闻与市场状态 | 数据与实时行情 | fetchNews;距离开盘或收盘的倒计时 |
| 交易所规则 | 数据与实时行情 | setMarket:按价格区间的最小变动价位、每日涨跌停价、每手股数、交易时段;HOSE、HNX、UPCoM 和 VN30 期货 |
| 图表上的订单与持仓 | 交易 | 拖动即可修改;直接在线上撤单、平仓和反手 |
| 成交标记 | 交易 | executionFill 中带有原因和盈亏 |
| 下单面板 | 交易 | 数量、类型、止损与止盈、有效期,输入时即时校验;以及交易所的最小变动价位、涨停价、跌停价和每手股数 |
| 账户面板 | 交易 | 带实时盈亏的持仓、挂单、成交记录 |
| 信号与交易区域 | 交易 | markers.*、tradeZones.* 样式键 |
| 回测与风险指标 | 交易 | @tradecanvas/analytics:手续费、滑点、Sharpe、Sortino、Calmar、回撤 |
| 不止于价格水平的提醒 | 提醒与回放 | 线与线交叉、N 根K线内涨跌 N%、K线收盘时触发、可设到期时间 |
| 更细步长的K线回放 | 提醒与回放 | 用更小周期的K线回放更大的周期 |
| 在回放中模拟交易 | 提醒与回放 | 订单按回放的价格成交 |
| 在图表网格中同步回放 | 提醒与回放 | 各图表保持同步 |
| 面向应用的回放 | 提醒与回放 | startTime、hideHistory、duration,随播放逐步显示的标记,replayComplete |
| 同步联动的组件网格 | 工作区 | 最多 6 个,共享代码、周期、十字光标、时间和画线 |
| 保存在你自己存储中的命名布局 | 工作区 | 保存、打开、重命名、自动保存;用 LayoutStorage 接入服务器 |
| 一切皆可撤销与重做 | 工作区 | 画线、指标、设置和图表类型;recordUndo |
| 按区域划分的右键菜单 | 工作区 | 画线、绘图区、副图、价格轴、时间轴 |
| 自选列表 | 工作区 | 可建多个列表,拖动即可排序 |
| 供宿主应用使用的事件 | 工作区 | symbolChange、timeframeChange、ordersChange、executionFill、styleChange 等 |
| 组件的三种外观 | 自定义 | Studio、Terminal、Capsule;ui 与 setUI;--tcw-* CSS 变量 |
| 按键定制图表外观 | 自定义 | applyOverrides 覆盖 101 个带类型的键,分为宿主层和用户层 |
| 覆盖每个键的设置 | 自定义 | 当前图表类型的样式选项卡,以及交易选项卡 |
| 112 个功能开关 | 自定义 | features、setFeatures、isFeatureOn;运行时可更改 |
| 在组件中加入你自己的部件 | 自定义 | 工具栏按钮和下拉菜单、侧边栏按钮、状态栏项、插槽、菜单项 |
| 自定义快捷键 | 自定义 | addHotkey,按键盘布局识别 |
| 组件支持 30 种语言 | 语言与无障碍 | 阿拉伯语、希伯来语和波斯语从右到左显示 |
| 屏幕阅读器与键盘 | 语言与无障碍 | 图表摘要、逐根朗读K线、对话框可用键盘操作 |
| 文档提供六种语言,本站提供十四种 | 语言与无障碍 | English, Tiếng Việt, 简体中文, 日本語, 한국어, Español |
| React、Vue 和 Svelte 组件 | 开发者 | 响应式 props:overrides、indicators、features |
| 插件 | 开发者 | 指标、画线工具、图表类型和叠加层;用 overlayScale 和 getPriceStep 在价格网格上绘制 |
| 面向编程智能体的文档 | 开发者 | llms.txt、llms-full.txt,以及一个智能体技能 |
已知限制
- 在 WebGL 经过更多设备试用之前,Canvas 2D 仍是默认渲染器;WebGL 在 Safari 和 5K 屏幕上的帧率尚未测量。
- 在 2560×1400 的图表上、像素比为 2 时,仅浏览器的合成在集成显卡上就要约 23 ms,因此那里的 WebGL 帧平均为 29 ms。
- tick 周期由行情源返回的近期成交合成;无法加载更早的 tick 历史。
- 成交量差和 CVD 根据K线估算,而非依据每笔成交的买卖方向。
- 一个页面上最多 8 个图表同时用 WebGL 绘制;其余用 Canvas 2D 绘制。