TradingView Advanced Chart 开发入门
本文介绍的是在 Web 项目中接入 TradingView Advanced Chart 。
申请
TradingView Advanced Chart 是免费使用的,代码文件需要通过 官网 进行申请,申请的时候需要使用公司邮箱,申请后一周内会收到邮件回复,按照邮件内容填写并签署协议文件后回复即可,注意协议文件中邮箱要与申请邮箱保持一致。
使用
使用 TradingView widget 分三步。
- 第一步:
从项目仓库 下载 ,并放到项目公开目录,一般是
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_features 和 enabled_features 用于选择功能,当你需要隐藏某些功能时,就需要在这里配置,功能列表具体可参考 文档链接 。我自己的配置如下:
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 用于设置主题,一般需要定义 light 和 dark 主题。
主题包括 color1 color2 color3 color4 color5 color6 color7 white black 九个颜色,其中 color1 是主题色,color3 是红色,color4 是绿色。 你可以在 这里 设置好主题,然后复制到项目中。

剩余一个配置就是 datafeed ,这个也是最主要的配置,datafeed 主要提供以下方法。文档链接 .
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 图表切换代币时会调用此方法。