JavaScript 交易控件
StockSharp JavaScript 交易控件 是一套面向交易终端的浏览器面板。该包以 @stocksharp/trading-controls 的名称发布在 npm 上,可在在线演示中查看所有控件。

截图中还显示了来自独立 @stocksharp/chart 包的K线图。@stocksharp/trading-controls 包含七个独立控件:
| 控件 | 类 | 标识符 |
|---|---|---|
| 活动订单 | ActiveOrdersWidget |
activeOrders |
| 持仓 | PositionsWidget |
positions |
| 成交历史 | TradeHistoryWidget |
tradeHistory |
| 自选交易品种列表 | WatchlistWidget |
watchlist |
| 订单输入 | OrderEntryWidget |
orderEntry |
| 订单簿 | OrderBookWidget |
orderbook |
| 成交明细 | TradeFeedWidget |
tradefeed |
这些标识符的值可通过导出的 ControlTypes 对象获取。
安装
npm install @stocksharp/trading-controls
必须引入基础样式。也可以额外引入现成的浅色和深色配色方案,或者用自己的 --t-* CSS 变量进行替换:
import '@stocksharp/trading-controls/styles.css';
import '@stocksharp/trading-controls/theme.css'; // 可选:现成主题。
这些控件使用 Bootstrap Icons 类,但不自带字体和 SVG。宿主页面必须单独引入图标。
不使用打包工具的页面可使用 dist/sstradingcontrols.js 文件,它会创建全局对象 window.SSTradingControls。
通用创建方式
每个控件都通过静态 create 方法创建。该方法会检查宿主、构建自己的 DOM,并将根元素添加到传入的容器中:
import {
PositionsWidget,
type TradingHost,
} from '@stocksharp/trading-controls';
declare const host: TradingHost;
const positions = PositionsWidget.create(
document.querySelector<HTMLElement>('#positions')!,
{},
{
host,
closePosition: (portfolioId, instrumentId, symbol) =>
console.log('平仓', portfolioId, instrumentId, symbol),
reversePosition: (portfolioId, instrumentId, symbol) =>
console.log('反向开仓', portfolioId, instrumentId, symbol),
refreshPositions: () => console.log('刷新'),
},
);
positions.update([]);
第二个参数是实例保存的状态。第三个参数中的依赖项因控件而异:例如,持仓面板接收平仓和反向开仓处理程序,订单簿则接收价格选择和执行处理程序。
TradingHost 契约
控件不会直接访问全局翻译器、设置存储、交易连接或窗口管理器。所有外部交互都通过一个 TradingHost 对象完成。
| 宿主成员 | 用途 |
|---|---|
isPrimary |
指示页面上的主要控件实例。 |
t(key, ...args) |
翻译可见文本并代入参数。 |
presentation |
格式化方向、订单类型和状态、盈亏类以及 canvas 配色。 |
preferences, cache |
保存长期设置和临时数据。 |
trading.api |
搜索交易品种并加载成交记录。 |
trading.marketData |
管理订阅并提供活动订单。 |
trading.portfolioId() |
返回当前投资组合。 |
trading.pickInstrument(...) |
打开交易品种选择器。 |
ticker |
接收可见交易品种及其行情。 |
allow(action) |
检查某项操作的权限。 |
close, spawn, persistState, saveLayout |
管理面板的生命周期和状态。 |
register, unregister, broadcast |
注册实例,并在实例之间广播变更。 |
log(message) |
接收诊断消息。 |
所有成员均为必需项。assertHost 会在渲染控件前检查嵌套函数,并准确指出缺失的路径。如果应用程序不需要某些功能,可以为必需命令传入有意义的占位实现,例如 log: console.warn 或空的 saveLayout。
本地化和外观
控件的所有可见文本都通过 host.t 获取。@stocksharp/trading-controls/translation-keys.json 中包含当前完整的 153 个键。未知键会原样显示给用户,因此宿主应为整个列表提供翻译。
styles.css 文件包含样式规则,但颜色、字体和尺寸取自 --t-* CSS 变量。如果不使用现成的 theme.css,应用程序需要自行定义这些变量。订单簿和气泡成交明细的 canvas 颜色由 host.presentation.canvasPalette() 返回。
释放资源
移除面板时请调用 dispose()。该方法会移除事件处理程序,在适用时断开具体控件的观察器和订阅,最后调用 host.unregister。
positions.dispose();
从源代码构建
git clone https://github.com/StockSharp/JS-TradingControls.git
cd JS-TradingControls
npm install
npm test
npm run build