Provider API
统一行情 Provider 使用示例
This page is only available in Chinese. It is shown in its original language.
统一行情模型由前端定义。Provider 负责把数据源私有协议转换为标准品种、K 线和分时结果,图表与 UI 不解析 providerRef。
图表运行时只通过 MarketDataProvider 与 SourceRouter 取数。自定义数据仍可用 setData / applyCustomData 注入。
定义品种
import type { InstrumentDescriptor } from '@363045841yyt/klinechart-core/market-data'
const instrument = {
id: 'gotdx:stock:0:000001',
sourceId: 'gotdx',
symbol: '000001',
name: '平安银行',
assetClass: 'stock',
exchange: 'SZ',
sessionId: 'CN',
currency: 'CNY',
lotSize: 100,
providerRef: {
market: 0,
kind: 'stock',
},
capabilities: {
bars: {
periods: ['1min', '5min', 'daily', 'weekly'],
adjustments: ['qfq', 'hfq', 'none'],
},
timeShare: true,
},
} as const satisfies InstrumentDescriptorid 是品种身份的唯一依据。providerRef 只交给创建它的 Provider,搜索、UI、图表和比较功能不得读取其中字段。
实现 Provider
Provider 按能力组合模块,不支持的能力不挂载对应属性。
import type { MarketDataProvider } from '@363045841yyt/klinechart-core/market-data'
const provider = {
source: {
id: 'gotdx',
displayName: 'GOTDX',
},
async probe() {
return {
status: 'online',
checkedAt: Date.now(),
}
},
catalog: {
async search(query) {
// Adapter 在这里把 GOTDX 搜索结果转换为 InstrumentDescriptor。
return query.keyword ? [instrument] : []
},
},
bars: {
async fetch(query) {
// Adapter 在这里使用 query.instrument.providerRef 请求 GOTDX。
return {
instrumentId: query.instrument.id,
period: query.period,
adjustment: query.adjustment,
timezone: 'Asia/Shanghai',
volumeUnit: 'share',
data: [],
}
},
},
} satisfies MarketDataProvider注册与配置
默认注册表只保存当前会话配置,应用层负责 localStorage 等持久化。
import { marketDataProviderRegistry } from '@363045841yyt/klinechart-core/market-data'
marketDataProviderRegistry.register(provider, {
enabled: true,
baseUrl: 'http://127.0.0.1:8080',
})
marketDataProviderRegistry.setConfig('gotdx', {
enabled: false,
})
const enabledProviders = marketDataProviderRegistry.getEnabled()前端消费规则
- 周期和复权选项读取
instrument.capabilities.bars。 - 只有
timeShare === true且sessionId已注册时才允许进入分时模式。 - K 线和分时请求使用完整的
InstrumentDescriptor,不重新拼装数据源参数。 - 成交量展示读取序列的
volumeUnit,不默认所有市场都使用“手”。 - Provider 的可选模块是能力事实来源,不再使用任意字符串组成的 capability 列表。
完整设计与迁移范围见 GitHub Issue #116。