# TradingView 数据 (/zh/features/data/tradingview-data)

如何将 TradingView 数据导入 Python？`vbt.TVData` 使用 TradingView 自身的标的表示法，无需账户即可拉取股票、期货、加密货币、外汇和指数 K
线，并将其作为可直接用于指标和回测的数据对象返回。

```python title="Pull daily bars for six markets in one call and compare 2024"
>>> symbols = [
...     "NASDAQ:AAPL", "CME_MINI:ES1!", "BINANCE:BTCUSDT",
...     "TVC:DXY", "FX:EURUSD", "TVC:GOLD",
... ]
>>> data = vbt.TVData.pull(symbols, timeframe="1D")  # (1)
>>> year = data.loc["2024"]
>>> first = year.close.apply(lambda s: s.dropna().iloc[0])
>>> last = year.close.apply(lambda s: s.dropna().iloc[-1])
>>> returns = (last / first - 1).round(4)
>>> pd.DataFrame({"bars": year.close.notna().sum(), "return": returns})
                 bars  return
symbol
NASDAQ:AAPL       252  0.3490
CME_MINI:ES1!     252  0.2399
BINANCE:BTCUSDT   366  1.1181
TVC:DXY           259  0.0614
FX:EURUSD         260 -0.0534
TVC:GOLD          252  0.2747
```

1.  从最新 K 线向前下载各标的可用历史。数据以 UTC 时间对齐到共同索引，市场休市时为 NaN。

一次调用返回了股票、连续期货合约、加密货币交易对、美元指数、货币对和黄金。每个市场保留自己的日历：2024 年比特币交易了全部 366 天，股票交易 252 天，外汇交易 260
天，因此上方每列分别统计自己的 K 线数。

## 从图表数据到 Python 研究 \[#from-chart-data-to-python-research]

将您已在 TradingView 关注的标的用作 Python 策略输入。拉取后，`data.close` 提供跨标的价格，`data.run` 可基于可用 OHLCV
字段计算指标。将数据及入场、退出信号传给[信号回测](/zh/features/backtesting/signal-backtesting/)，再在同一流程中比较交易品种和[参数选择](/zh/features/optimization/strategy-optimization/)。

这适合跨市场检验图表想法、构建指数成分股研究范围，或通过[多时间周期分析](/zh/features/data/multi-timeframe-analysis/)将日频趋势与日内入场结合。

## 拉取 K 线 \[#pulling-bars]

标的使用 TradingView 的 `EXCHANGE:SYMBOL` 表示法。可使用分钟、小时、日、周或月 K 线，例如 `"1 minute"`、`"1 hour"` 或 `"1D"`。如果
TradingView 提供秒级周期，适配器也能接受。`tz` 将索引转换为市场本地时间。价格默认进行拆股调整，`adjustment` 还可考虑股息，`extended_session=True`
则加入盘前和盘后 K 线。对于期货，`fut_contract=1` 返回近月连续合约，`fut_contract=2` 返回下一合约。通过 `data = data.update()` 刷新可用 K
线，并与已存历史合并。

没有起始日期参数。TradingView 提供最多 `limit` 根最近 K 线，因此应先拉取，再用 `data.loc` 选择所需时段，如上方选择 2024 年的示例。该类仅下载 K 线，不下载
TradingView 指标或策略数值。无法解析数据的错误通常意味着该标的或周期在相应交易所不存在；大规模拉取时可用 `skip_on_error=True` 跳过这类标的。

## 匹配您正在研究的图表 \[#match-the-chart-you-are-researching]

将指标或回测与 TradingView 图表比较前，请匹配数据选择：

| 图表设置      | VBT 输入                    |
| --------- | ------------------------- |
| 交易品种与交易所  | 完整的 `EXCHANGE:SYMBOL` 标识符 |
| K 线周期     | `timeframe`               |
| 常规或延长交易时段 | `extended_session`        |
| 拆股或股息调整   | `adjustment`              |
| 显示时区      | `tz`                      |

即使公式完全相同，不同交易时段和复权设置也会改变指标。VBT
的[技术指标](/zh/features/indicators/technical-indicators/)和[自定义指标](/zh/features/indicators/indicator-development/)让您从这些
K 线在 Python 中计算分析指标。

如果需要图表中已经算好的数值，TradingView
可[将图表数据和指标导出为 CSV](https://www.tradingview.com/support/solutions/43000537255-how-to-export-chart-data/)。通过
`vbt.CSVData` 或 Pandas
加载导出文件，保留其时间戳和指标列。[存储页面](/zh/features/data/data-storage-and-databases/#files)介绍文件输入。这提供了将图表输出与
Python 计算比较的另一条途径。

## 查找交易标的 \[#finding-symbols]

`vbt.TVData.list_symbols` 按模式、交易所或文本搜索 TradingView 标的；其市场扫描器可按市场、行业等字段值或指数成员身份列出标的：

```python title="List the members of the Nasdaq-100"
>>> ndx = vbt.TVData.list_symbols(groups=dict(index="NASDAQ:NDX"))
>>> len(ndx), ndx[:5]
(101, ['NASDAQ:AAPL', 'NASDAQ:ABNB', 'NASDAQ:ADBE', 'NASDAQ:ADI', 'NASDAQ:ADP'])
```

该列表包含的是当前成分股，因此基于它构建过去多年的回测会带来幸存者偏差，详见[真实回测](/zh/features/backtesting/backtest-realism/#point-in-time-universes)页面。

您也可以请求行业、币种、市值等扫描器字段，并在下载 K 线前筛选结果。设置 `return_field_data=True` 后，标的发现会连同标的名称返回这些字段，让您保留用于选择研究范围的信息。

## 历史数据与账户 \[#history-and-accounts]

TradingView 为每个标的提供的 K 线数量有限，因此历史深度取决于周期：日 K 线可追溯多年，而截至 2026 年 10 月 2 日，AAPL 的分钟 K 线约覆盖最近六周。VBT
默认最多请求 20,000 根 K 线。通过 `client_config` 使用您自己的 TradingView 用户名和密码或会话 token
登录，可使用账户拥有的访问权限。您可以在多次拉取间复用已认证的 `TVClient`，无需每次创建新客户端。TradingView
的[交易所数据订阅](https://www.tradingview.com/support/solutions/43000471705-how-to-purchase-additional-market-data/)独立于
VBT PRO，TradingView 表示其付费方案不包含交易所数据费用。

标准 `TVData` 拉取获取最近 K 线，不会自动操作 TradingView 的 Bar
Replay，也不会向前翻页获取全部图表历史。更新会重新请求最近窗口并合并到现有对象。对于较长日内历史，[市场数据源](/zh/features/data/market-data-sources/)页面中的商业提供商更合适；[数据存储与数据库](/zh/features/data/data-storage-and-databases/)则帮助您持续积累下载数据。

!!! info "使用条款"
    TradingView 数据受其使用条款约束。条款要求时请使用您自己的账户，在将数据用于个人研究之外的用途前也请检查条款。

## TradingView \[#trading-view]

新增于 1.9.0

✅ 现在提供专用于从 [TradingView](https://www.tradingview.com/) 拉取数据的新类。

```python title="Pull 1-minute AAPL data"
>>> data = vbt.TVData.pull(
...     "NASDAQ:AAPL",
...     timeframe="1 minute",
...     tz="US/Eastern"
... )
>>> data.get()
                             Open    High     Low   Close   Volume
datetime
2022-12-05 09:30:00-05:00  147.75  148.31  147.50  148.28  37769.0
2022-12-05 09:31:00-05:00  148.28  148.67  148.28  148.49  10525.0
2022-12-05 09:32:00-05:00  148.50  148.73  148.30  148.30   4860.0
2022-12-05 09:33:00-05:00  148.25  148.73  148.25  148.64   5306.0
2022-12-05 09:34:00-05:00  148.62  148.97  148.52  148.97   5808.0
...                           ...     ...     ...     ...      ...
2023-01-17 15:55:00-05:00  135.80  135.91  135.80  135.86  37573.0
2023-01-17 15:56:00-05:00  135.85  135.88  135.80  135.88  18796.0
2023-01-17 15:57:00-05:00  135.88  135.93  135.85  135.91  21019.0
2023-01-17 15:58:00-05:00  135.90  135.97  135.89  135.95  20934.0
2023-01-17 15:59:00-05:00  135.94  136.00  135.84  135.94  86696.0

[11310 rows x 5 columns]
```
