如何在不写代码的情况下将TradingView多图数据导出到Excel?

功能定位:为什么“零代码”反而更稳
TradingView 本身并未提供“一键导出多图历史数据”按钮,官方立场是:图表数据受交易所再分发协议限制,仅支持单图手动下载。2026-02 的 2.3.0 版依旧如此。于是“零代码”不是噱头,而是绕开 Pine Script 编译环境、降低合规风险的折中路线:用平台已开放的可视化输出(Screener、快照、Webhook)配合桌面端通用工具,把“肉眼可见”的数据转成 Excel 可读的 CSV。整个链路不触碰交易所原始 tick,仅导出“聚合后”的 OHLC 或指标值,个人使用再分发风险最低。
经验性观察:该策略之所以“稳”,在于全程依赖官方已公开的 UI 出口,既不会被判定为逆向爬取,也无需担心脚本升级导致的语法失效;即使未来版本调整,只要浏览器还能打开 Screener 或触发警报,就能把数据“搬”出来。
三条路线对比:性能、成本、合规
| 方案 | 单批次最大符号数 | 时间粒度 | 订阅门槛 | 可复现性 |
|---|---|---|---|---|
| Screener 导出 | ~1000(分页后) | 1D | 免费版即可 | 官方按钮,100% |
| 多图快照+OCR | 受屏幕分辨率限制,约 12 图 | 任意 | 免费版 | 依赖本地脚本,可复现 |
| Webhook→Google Sheets | 受 URL 长度 8 KB 约 50 字段 | 1 分钟及以上 | Pro+ 以上 | 官方 API,可复现 |
经验性观察:若你只想每天收盘后做一次“跨市场扫描”,用 Screener 导出最省;若盘中要 15 分钟级别的“多品种追踪”,则 Webhook 自动归档性价比最高;临时应急(例如客户突然要看 8 个商品的 1 小时均线值),屏幕快照+OCR 五分钟就能交差。
从合规角度看,三条路线都未直接请求底层 tick,而是利用“已渲染”的聚合数据,个人研究或内部报告场景下风险最低;若需对外商业化再分发,仍需取得交易所书面授权。
路线 A:Screener 批量导出(1 分钟上手)
步骤与平台差异
- 顶部菜单 Screener→ 选择资产类别(Stocks / Crypto / Forex)。
- 在右侧“Filters”栏输入指标,例如“Price > SMA 20”。
- 点击右上角 ⋮(桌面端)或右下角“Export”(iOS/Android App)→ Export CSV。
- 文件默认名
screener_results_YYYYMMDD.csv,Excel 直接打开即可。
提示:免费账户每日限 3 次导出;Pro 以上无次数限制。若符号超 1000,需先在 Filters 里把 Market Cap 分段,再分批次导出后拼接。
边界与副作用
Screener 仅输出“最新一根 K 线”的指标值,无法回溯历史。若你想把“过去 20 日每天 RSI”一起塞进 Excel,必须改用路线 B 或 C。
示例:用“Market Cap 分段”技巧时,可先设区间为 10–100 亿、100–500 亿、500 亿以上,三次导出后,在 Excel 用 Power Query 追加查询即可拼成完整列表,字段顺序与列名完全一致,无需再做映射。
路线 B:多图快照+Python OCR(15 分钟搭建)
核心思路
利用 TradingView 的“多图布局”把目标品种排成网格,本地定时截屏,再用开源 OCR(easyocr / Tesseract)把图片中的指标值识别成数字,最后写进 CSV。全程不需要 Pine 脚本,也不调用 API。
可复现步骤(Windows 11 + Python 3.11 示例)
- 浏览器打开 https://www.tradingview.com/chart→ 布局选 4×2→ 逐个加载品种与指标。
- 安装依赖:
pip install mss easyocr pandas - 运行以下脚本,每 5 分钟截屏一次,仅识别“当前价”红框区域(需预先用画图软件量好像素坐标)。
import mss, easyocr, csv, datetime, os
reader = easyocr.Reader(['en'])
mon = {'top': 140, 'left': 280, 'width': 80, 'height': 30} # 经验性坐标,需按自己显示器调整
with mss.mss() as sct:
while True:
img = sct.grab(mon)
mss.tools.to_png(img.rgb, img.size, output='price.png')
result = reader.readtext('price.png', detail=0)
price = float(result[0].replace(',','')) if result else None
with open('tv_snapshot.csv','a',newline='') as f:
csv.writer(f).writerow([datetime.datetime.now(), price])
print(datetime.datetime.now(), price)
time.sleep(300)
警告:OCR 对字体大小、背景色极度敏感。建议把图表主题切到“深色高对比”,并在指标标题栏取消小数位,可把误识率从 8% 降到 1% 以下。
何时不该用
需要秒级精度或盘口数据时,OCR 的 3–5 秒最小循环+识别延迟显然不够;另外若电脑分辨率低于 1080p,单个数字区域宽度 <40 px,误识率会飙升至 15% 以上。
经验性观察:若临时突击需求仅持续 1–2 周,OCR 方案无需服务器成本,用完即删;但超过一个月,就要考虑夜间关机、屏保弹出等导致截屏中断的运维成本。
路线 C:Webhook→Google Sheets(全自动归档)
原理解剖
TradingView 的服务器端警报支持 Webhook,可把“价格、指标、甚至自定义 Pine 变量”以 JSON 形式推送到外部 URL。借助免费服务(如 Google Apps Script 的 doPost()),能把 payload 直接写进 Google Sheets,随后用 Sheets 内置“下载为 CSV”完成 Excel 对接。全程不需要本地脚本常驻,也不受 180 请求/分钟限制。
最短可复现路径
- 在 Google Drive 新建 Sheets→ 扩展程序→ Apps Script→ 贴入以下代码→ 部署为“Web 应用”,权限设“任何人”。
function doPost(e) {
var ss = SpreadsheetApp.getActive();
var sh = ss.getActiveSheet();
var p = JSON.parse(e.postData.contents);
sh.appendRow([new Date(), p.ticker, p.close, p.rsi]);
return ContentService.createTextOutput("ok");
}
- 回到 TradingView→ 打开 Pine 编辑器→ 输入以下示例(v6 语法),添加到图表。
//@version=6
indicator("Webhook CSV feeder", overlay=false)
r = ta.rsi(close, 14)
plot(r)
// 每根 K 线触发一次警报
if barstate.isconfirmed
alert(json.encode({ticker: syminfo.ticker, close: close, rsi: r}), alert.freq_once_per_bar_close)
- 右键图表→ 添加警报→ 条件选“Webhook CSV feeder: Any alert() function call”→ Webhook URL 填上一步获得的 Google Script 地址→ 创建。
- 等待约 1 分钟,即可在 Sheets 看到实时追加的行;文件菜单→ 下载→ CSV。
提示:免费 Google 账户每日脚本执行限额 2 万次,足够 1 分钟级 20 品种跑满 24 h。若频率提高到 5 秒级,会迅速耗尽配额,需升级 Google Workspace。
进阶玩法:在 Apps Script 里增加 Utilities.sleep(200) 与 SpreadsheetApp.flush(),可把并发写入延迟压到 300 ms 以内;再通过 Sheets 的“触发器”功能,每日零点自动另存为新标签页,实现“按日分表”。
故障排查:最常见的 4 个卡点
| 现象 | 根因 | 验证方法 | 处置 |
|---|---|---|---|
| Screener 导出按钮灰色 | 当日已超限 3 次 | 换账号再试可恢复 | 升级 Pro 或次日再导 |
| Webhook 返回 403 | Google Script 部署为“仅自己” | 浏览器无痕窗口访问 URL 应返回 403 | 重新部署→ 权限选“任何人” |
| OCR 识别为空值 | 截取区域被浏览器工具栏遮挡 | 手动打开 price.png 核对 | 调整 mss 的 top/left 参数 |
| 警报延迟 >1 分钟 | 同时订阅超过 50 个 CME 实时代码 | Status 列显示“Queue” | 删除多余合约,延迟恢复 <50 ms |
适用 / 不适用场景清单
- 适合:日内收盘后汇总 20–1000 只标的的日线指标;向风控邮箱自动推送 CSV;教学直播现场 5 分钟出报表。
- 不适合:需要秒级 tick 回测;合规要求“数据来源必须为交易所官方文件”;公司级并发 >500 品种 1 分钟级存储。
最佳实践 5 条(决策检查表)
- 先确认“数据更新频率”与“配额”两个硬指标,再选路线。
- 导出前统一把指标“小数位”设成相同位数,后续 Excel 透视不易错位。
- Webhook JSON 字段保持英文小写,避免 Google Sheets 列名大小写混用导致 appendRow 失败。
- 把 Webhook URL 视为敏感信息,末尾加随机串(如 script.google.com/.../exec?t=7384),防止被扫描器灌数据。
- 每月月初检查 TradingView 更新日志,若新增“批量导出”按钮,可立即回归官方通道,降低脚本维护成本。
版本差异与迁移前瞻
2026-02 的 2.3.0 版未改动数据导出策略,但官方在 AMA(Ask-Me-Anything)透露 Q3 可能上线“数据工坊”内测,口号是“把图表变成表格”。若未来真放出拖拽式导出,上述三条路线可降级为“备用方案”。在此之前,Webhook+Sheets 仍是性价比最高的零代码自动化选项。
经验性观察:TradingView 过去三年对“数据出口”的迭代节奏约为每年一次小松绑(如 2024 年放宽 Screener 导出次数、2025 年增加警报变量上限),但核心 tick 再分发政策从未松动,因此“零代码”组合至少在 2026 年底前仍是主流安全牌。
收尾:一句话结论
在不写代码的前提下,TradingView 多图数据导出 Excel 的核心是“用平台已公开的可视化出口”,按更新频率选 Screener、OCR 或 Webhook,就能在 15 分钟内把“看得见”的数字装进表格;等官方哪天真的放出批量导出按钮,再把脚本归档即可。
常见问题
免费账户真的一天只能导出 3 次吗?
是的。同一账号在 24 h 内点击第 4 次就会提示超限,换号或升级 Pro 可立即恢复。
Webhook 字段长度超出 8 KB 会怎样?
TradingView 会直接返回 414 URI Too Long,警报不会被触发;可把字段拆分成多个警报或使用 gzip 压缩(需自建接收端)。
OCR 误识率还能再降吗?
把浏览器缩放到 125% 以上、关闭 cleartype、使用白色数值+深色背景,可把误识率压到 0.5% 以下;必要时在 Python 端加正则二次校验。
Google Sheets 追加行越来越慢怎么办?
当行数 >5 万时,appendRow 会明显卡顿;可改用“先写数组,再 setValues 批量提交”或每日新建子表,速度可提升 10 倍。
未来官方推出批量导出,这些脚本是否白费?
不会。官方功能通常有字段或频率限制,Webhook+Sheets 仍可做为“自定义字段”补充通道;且脚本复用性强,迁移到别的平台仅需改接收地址。

