TradingView Advanced Chart 开发入门

| 1 min read

本文介绍的是在 Web 项目中接入 TradingView Advanced Chart 。

申请

TradingView Advanced Chart 是免费使用的,代码文件需要通过官网进行申请,申请的时候需要使用公司邮箱,申请后一周内会收到邮件回复,按照邮件内容填写并签署协议文件后回复即可,注意协议文件中邮箱要与申请邮箱保持一致。

使用

使用 TradingView widget 分三步。 第一步: 下载 https://github.com/tradingview/charting_library/tree/master/charting_library ,并放到项目公开目录,一般是 public 。 第二步: 在 DOM 中插入 <div id="tv_chart_container"></div> 第三步: 初始化 tvWidget

window.tvWidget = new TradingView.widget({
library_path: "path_to_charting_library",
locale: 'en',
container: 'tv-chart-container',
autosize: true,
interval: '1', // 1 minute
favorites: {
intervals: ['1', '15', '1D'],
},
allow_symbol_change: false,
theme: 'light',
symbol: `EXCHANGE:BTC/USDT`, // default pair
timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
disabled_features: [...],
enabled_features: [...],
custom_themes: {
light: [...],
dark: [...]
},
datafeed: ...,
});

autosize 设置为 true , 可以让 widget 始终占满父容器大小,这样只需要定义父容器样式就可以了。 timiezone 设置 Intl.DateTimeFormat().resolvedOptions().timeZone , 可以在界面上按用户时区显示时间。 disabled_featuresenabled_features 用于选择功能,当你需要隐藏某些功能时,就需要在这里配置,功能列表具体可参考 https://www.tradingview.com/charting-library-docs/latest/customization/Featuresets 。我自己的配置如下:

disabled_features: [
'symbol_search_hot_key',
'header_quick_search',
'header_symbol_search',
'header_compare',
'header_settings',
'header_undo_redo',
'header_saveload',
'items_favoriting',
'symbol_search_hot_key',
'symbol_info',
'edit_buttons_in_legend',
'delete_button_in_legend',
'use_localstorage_for_settings',
'create_volume_indicator_by_default',
'popup_hints',
],
enabled_features: ['show_interval_dialog_on_key_press', 'items_favoriting'],

可以参考下图获取 UI 关键字:

custom_themes 用于设置主题,一般需要定义 lightdark 主题。 主题包括 color1 color2 color3 color4 color5 color6 color7 white black 九个颜色,其中 color1 是主题色,color3 是红色,color4 是绿色。 你可以在这里 https://codepen.io/tradingview/pen/abgzyBW 设置好主题,然后复制到项目中。

剩余一个配置就是 datafeed ,这个也是最主要的配置,datafeed 主要提供以下方法。文档链接 https://www.tradingview.com/charting-library-docs/latest/connecting_data/datafeed-api/required-methods/#onready 。

interface Datafeed {
onReady(callback: OnReadyCallback) => void;
searchSymbol(
userInput: string,
exchange: string,
symbolType: string,
onResult: SearchSymbolsCallback,
) => Promise<void>;
resolveSymbol(
symbolName: string,
onResolve: ResolveCallback,
onError: DatafeedErrorCallback,
extension?: SymbolResolveExtension,
) => Promise<void>;
getBars(
symbolInfo: LibrarySymbolInfo,
resolution: ResolutionString,
periodParams: PeriodParams,
onResult: HistoryCallback,
onError: DatafeedErrorCallback,
) => Promise<void>;
subscribeBars(
symbolInfo: LibrarySymbolInfo,
resolution: ResolutionString,
onTick: SubscribeBarsCallback,
listenerGuid: string,
onResetCacheNeededCallback: () => void,
) => Promise<void>;
unsubscribeBars(subscriberUID: string) => void
}

onReady 图表初始化完成时会调用此方法。callback 可以调用一些基础配置。 searchSymbol 用于按用户输入搜索代币。 resolveSymboll 用户获取代币信息。

const symbolInfo = {
ticker: 'BTCUSD',
name: 'BTCUSD',
description: 'Bitcoin/USD',
type: symbolItem.type,
session: '24x7',
timezone: 'Etc/UTC',
exchange: 'Example Exchange',
minmov: 1,
pricescale: 100,
has_intraday: false,
visible_plots_set: 'ohlcv',
has_weekly_and_monthly: false,
supported_resolutions: ['1', '5', '30', '60', '1D', '1W'],
volume_precision: 2,
data_status: 'streaming',
};

getBars 用于获取历史数据。 subscribeBars 用于更新最新数据。 unsubscribeBars 图表切换代币时会调用此方法。