用途:用 openalgo-charts 构建或扩展一个完整交易终端,按固定顺序逐层实现,每层可用后再进入下一层。资料给出两个参考实现:openalgo-charts 仓库 examples/yfinance/index.html 的原生 ESM 终端外壳;OpenAlgo 应用仓库 frontend/src/components/trading/ChartPane.tsx 与 frontend/src/lib/trading/terminal.ts 的生产级 React 终端,其核心经验是把图表编排放在纯 TypeScript 模块中,React 只负责 DOM 外壳。
主要能力按构建顺序:1)图表与数据,用 createChart 创建实例、addSeries 加 K 线与成交量,先加载历史再订阅,用 withBarCache 包装数据源,自建状态行显示缓存命中与耗时,并限制最新可用 bar。2)标的与周期切换属于整体数据重载,需先退订、setData 再订阅;非内置周期需 registerInterval 注册,日历周期用 bucketStartOf,时区用 setTimezone 配合 isValidTimezone 校验。3)历史分页通过 setHistoryLoader、prependData、historyLoadComplete 实现,并用请求归属守卫防止旧响应影响新图表。4)图表类型映射 SeriesType,部分渲染器需导入 openalgo-charts/transform。5)指标需导入 openalgo-charts/indicators,由 registeredIndicators() 生成菜单。6)画线用 DrawingController,headless,快捷键需自行在事件处理中调用 matchDrawingShortcut,复制剪切粘贴为异步。7)图上交易分两层:基础包的 chart.trading 负责绘制与拖拽,下单改单撤单用交易的 OrderEngine;图表不是事实来源,默认先做分析器/沙盒模式。8)市场深度用 DomLadder 与 subscribeDepth。9)布局持久化用 getState/restoreState,注意在导入对应层之后再恢复。10)设置对话框由 chartSettingsSchema 生成,需实现 colorPair 控件;价格轴右键菜单需读取 priceAxisState。11)回放与对比用 ReplayController 与 addComparison,均为 headless。12)分屏与联动用 createLinkGroup,不要自行同步逻辑范围,需在某成员首次加载时暂停视口同步。
使用方式与规则:终端生命周期内保持一个图表实例;图表编排放在 UI 框架之外;切换标的或卸载时清理订阅;API 密钥不得写入客户端源码;默认分析器模式;界面、代码与日志不使用 emoji 或图标。验证需先类型检查,再实际操作切换标的、周期、左移加载历史、加指标、画线、复制粘贴、刷新确认布局恢复与缓存命中;分屏需用不同周期验证联动十字线按同一时间而非同一条 bar 编号定位。具体价格、收费、平台支持等资料未提供。