feat: 重构 TradingView 数据源实现,更新数据源类名为 RWADatafeed;优化 TradingViewChart 组件的使用方式

This commit is contained in:
2025-12-30 02:03:45 +07:00
parent 4a313f2af0
commit bdd2812ae9
3 changed files with 62 additions and 29 deletions

View File

@@ -13,16 +13,19 @@ import type {
SubscribeBarsCallback,
} from "#/datafeed-api";
const { VITE_TRADINGVIEW_DATA_API_URL } = useEnv();
/**
* 自定义 TradingView Datafeed 实现
* 用于从后端 API 获取 K 线数据
*/
export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
private apiUrl: string;
export class RWADatafeed extends Datafeeds.UDFCompatibleDatafeed {
private apiUrl: string = VITE_TRADINGVIEW_DATA_API_URL;
private updateInterval: number;
private subscribers: Map<string, { callback: SubscribeBarsCallback; resolution: ResolutionString }> = new Map();
constructor(apiUrl: string, updateInterval = 1000) {
super(apiUrl);
this.apiUrl = apiUrl;
this.updateInterval = updateInterval;
}
@@ -31,7 +34,7 @@ export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
* 初始化配置
*/
onReady(callback: OnReadyCallback): void {
console.log("[CustomDatafeed]: onReady called");
console.log("[RWADatafeed]: onReady called");
const config: DatafeedConfiguration = {
// 支持的交易所
@@ -73,7 +76,7 @@ export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
symbolType: string,
onResult: SearchSymbolsCallback,
): void {
console.log("[CustomDatafeed]: searchSymbols", userInput, exchange, symbolType);
console.log("[RWADatafeed]: searchSymbols", userInput, exchange, symbolType);
// TODO: 调用后端 API 搜索品种
// const results = await client.api.market.search.get({ query: { keyword: userInput, exchange, type: symbolType } })
@@ -101,7 +104,7 @@ export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
onResolve: ResolveCallback,
onError: (reason: string) => void,
): void {
console.log("[CustomDatafeed]: resolveSymbol", symbolName);
console.log("[RWADatafeed]: resolveSymbol", symbolName);
// TODO: 调用后端 API 获取品种信息
// const symbolInfo = await client.api.market.symbol[symbolName].get()
@@ -152,7 +155,7 @@ export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
onError: (reason: string) => void,
): void {
const { from, to, firstDataRequest } = periodParams;
console.log("[CustomDatafeed]: getBars", {
console.log("[RWADatafeed]: getBars", {
symbol: symbolInfo.name,
resolution,
from: new Date(from * 1000).toISOString(),
@@ -203,7 +206,7 @@ export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
listenerGuid: string,
onResetCacheNeededCallback: () => void,
): void {
console.log("[CustomDatafeed]: subscribeBars", {
console.log("[RWADatafeed]: subscribeBars", {
symbol: symbolInfo.name,
resolution,
listenerGuid,
@@ -231,7 +234,7 @@ export class CustomDatafeed implements IDatafeedChartApi, IExternalDatafeed {
* 取消订阅实时数据
*/
unsubscribeBars(listenerGuid: string): void {
console.log("[CustomDatafeed]: unsubscribeBars", listenerGuid);
console.log("[RWADatafeed]: unsubscribeBars", listenerGuid);
this.subscribers.delete(listenerGuid);
// TODO: 关闭 WebSocket 连接