tradingview-mcp
通过 MCP 协议将 Claude Code 连接到 TradingView Desktop,让 AI 直接读取图表、编写 Pine Script、绘制标记等,实现自然语言驱动的交易工作流自动化。亮点是 78 个 MCP 工具覆盖图表控制、指标读取、回放测试、多窗格布局等,且所有数据本地处理不经过外部服务器。研究向,需自行承担违反 TradingView 条款的风险,非交易建议。
README
TradingView MCP Bridge
为你的 TradingView 桌面图表服务的个人 AI 助手。通过 Chrome DevTools Protocol 将 Claude Code 连接到本地运行的 TradingView 应用程序,实现 AI 辅助图表分析、Pine Script 开发和自动化工作流。
[!WARNING] 此工具与 TradingView Inc. 无任何关联、认可或从属关系。 它通过 Chrome DevTools Protocol 与你本地运行的 TradingView 桌面应用程序交互。使用前请阅读免责声明。
[!IMPORTANT] 需要有效的 TradingView 订阅。 此工具不会绕过或规避 TradingView 的任何付费墙或访问控制。它仅读取和控制已在你机器上运行的 TradingView 桌面应用程序。
[!NOTE] 所有数据处理都在本地机器上进行。 此工具不会将任何 TradingView 数据传输、存储或重新分发到外部。
[!CAUTION] 此工具通过 Electron 调试接口访问未记录的 TradingView 内部 API。这些接口可能会在 TradingView 的任何更新中变更或失效而不另行通知。如果稳定性对你很重要,请固定你的 TradingView 桌面版本。
工作原理(以及为什么可以安全运行)
此工具不会连接到 TradingView 的服务器、修改任何 TradingView 文件或拦截任何网络流量。它仅通过 Chrome DevTools Protocol(CDP)与本地运行的 TradingView 桌面实例通信——这是 Google 在所有 Chromium/Electron 应用程序(包括 VS Code、Slack 和 Discord)中内置的标准调试接口。
调试端口默认是禁用的,必须由你显式启用,使用标准的 Chromium 标志(--remote-debugging-port=9222)。没有这一主动步骤,什么也不会发生。
此工具不会做什么
- 连接到 TradingView 的服务器或 API
- 存储、传输或重新分发任何市场数据
- 在没有有效 TradingView 订阅和已安装桌面应用的情况下工作
- 绕过 TradingView 的任何付费墙或访问限制
- 执行真实交易(仅图表交互)
- 在 TradingView 更改其内部 Electron 结构后继续工作
研究背景
该项目探索了一个开放的研究问题:基于 LLM 的智能体如何与专业交易界面交互以支持人类决策?
具体而言,它调查了:
- 结构化工具 API(MCP)如何桥接 LLM 和有状态的桌面金融应用程序
- 当智能体操作实时图表数据时,会出现哪些延迟、上下文和可靠性约束
- 智能体如何处理模糊的金融 UI 状态(例如解释 Pine Script 输出、读取指标表格)
- 自然语言是否是图表导航和 Pine Script 开发的有效界面
- LLM 智能体在实时数据环境中运行的失败模式
这不是一个交易机器人。它是一个接口层,使交易应用程序对 LLM 智能体可读,允许研究者和开发者研究金融工作流中的人机协作。
请参见 RESEARCH.md 了解开放问题、发现和相关工作。
先决条件
- TradingView 桌面应用程序(需要付费订阅以获取实时数据)
- Node.js 18+
- Claude Code 支持 MCP(用于 MCP 工具)或任何终端(用于 CLI)
- macOS、Windows 或 Linux
它能做什么
为你的 AI 助手提供你自己图表上的眼和手:
- Pine Script 开发 —— 在 AI 辅助下编写、注入、编译、调试和迭代脚本
- 图表导航 —— 更改品种、时间周期、缩放至日期、添加/删除指标
- 可视化分析 —— 读取图表上的指标值、价格水平和注释
- 在图表上绘制 —— 趋势线、水平线、矩形、文本注释
- 管理警报 —— 创建、列出和删除价格警报
- 回放练习 —— 逐步浏览历史 K 线,练习入场/出场
- 截图 —— 捕获图表状态供 AI 视觉分析
- 多窗格布局 —— 设置 2x2、3x1 等网格,每个窗格不同品种
- 监控你的图表 —— 从本地运行的图表流式传输 JSONL 数据给本地监控脚本
- CLI 访问 —— 每个 MCP 工具也是一个
tvCLI 命令,支持管道和 JSON 输出 - 启动 TradingView —— 自动检测并从任何平台以调试模式启动
通过 Claude Code 安装
将以下内容粘贴到 Claude Code 中,它将处理其余部分:
安装 TradingView MCP 服务器。克隆 https://github.com/tradesdontlie/tradingview-mcp.git,运行 npm install,将其添加到 ~/.claude/.mcp.json 的 MCP 配置中,并用调试端口启动 TradingView。然后使用 tv_health_check 验证连接。
或者按照下面的手动步骤操作。
快速开始
1. 安装
git clone https://github.com/tradesdontlie/tradingview-mcp.git
cd tradingview-mcp
npm install
2. 通过 CDP 启动 TradingView
TradingView 桌面必须在端口 9222 上启用 Chrome DevTools Protocol 运行。
Mac:
./scripts/launch_tv_debug_mac.sh
Windows:
scripts\launch_tv_debug.bat
Linux:
./scripts/launch_tv_debug_linux.sh
或手动在任何平台启动:
/path/to/TradingView --remote-debugging-port=9222
或使用 MCP 工具(自动检测你的安装):
"使用 tv_launch 以调试模式启动 TradingView"
3. 添加到 Claude Code
添加到你的 Claude Code MCP 配置(~/.claude/.mcp.json 或项目 .mcp.json):
{
"mcpServers": {
"tradingview": {
"command": "node",
"args": ["/path/to/tradingview-mcp/src/server.js"]
}
}
}
将 /path/to/tradingview-mcp 替换为你的实际路径。
4. 验证
问 Claude:"使用 tv_health_check 验证 TradingView 已连接"
CLI
每个 MCP 工具也可用作 tv CLI 命令。所有输出均为 JSON,便于与 jq 配合使用。
# 全局安装(可选)
npm link
# 或直接运行
node src/cli/index.js <command>
快速示例
tv status # 检查连接
tv quote # 当前价格
tv symbol AAPL # 更改品种
tv ohlcv --summary # 价格摘要
tv screenshot -r chart # 捕获图表
tv pine compile # 编译 Pine Script
tv pane layout 2x2 # 4 图表网格
tv pane symbol 1 ES1! # 设置窗格品种
tv stream quote | jq '.close' # 监控价格变化
所有命令
tv status / launch / state / symbol / timeframe / type / info / search
tv quote / ohlcv / values
tv data lines/labels/tables/boxes/strategy/trades/equity/depth/indicator
tv pine get/set/compile/analyze/check/save/new/open/list/errors/console
tv draw shape/list/get/remove/clear
tv alert list/create/delete
tv watchlist get/add
tv indicator add/remove/toggle/set/get
tv layout list/switch
tv pane list/layout/focus/symbol
tv tab list/new/close/switch
tv replay start/step/stop/status/autoplay/trade
tv stream quote/bars/values/lines/labels/tables/all
tv ui click/keyboard/hover/scroll/find/eval/type/panel/fullscreen/mouse
tv screenshot / discover / ui-state / range / scroll
流式传输
tv stream 命令通过 Chrome DevTools Protocol 在 localhost 上定期轮询你本地运行的 TradingView 桌面实例。
不会连接到 TradingView 的服务器。所有数据都保留在你的机器上。
[!WARNING] 无论数据来源如何,以编程方式消费 TradingView 数据都可能与其使用条款冲突。你全权负责确保你的使用符合规定。
tv stream quote # 价格 tick 监控
tv stream bars # K 线逐条更新
tv stream values # 指标值监控
tv stream lines --filter "NY Levels" # 价格水平监控
tv stream tables --filter Profiler # 表格数据监控
tv stream all # 所有窗格同时(多品种)
Claude 如何知道使用哪个工具
Claude 在此项目中工作时会自动读取 CLAUDE.md。其中包含完整的决策树:
| 你说... | Claude 使用... |
|---|---|
| "我的图表上有什么?" | chart_get_state → data_get_study_values → quote_get |
| "显示了哪些水平?" | data_get_pine_lines → data_get_pine_labels |
| "读取会话表格" | data_get_pine_tables 带 study_filter |
| "给我一个完整的分析" | quote_get → data_get_study_values → data_get_pine_lines → data_get_pine_labels → data_get_pine_tables → data_get_ohlcv(摘要) → capture_screenshot |
| "切换到 AAPL 日线" | chart_set_symbol → chart_set_timeframe |
| "编写一个 Pine Script 用于..." | pine_set_source → pine_smart_compile → pine_get_errors |
| "从 3 月 1 日开始回放" | replay_start → replay_step → replay_trade |
| "设置 4 图表网格" | pane_set_layout → pane_set_symbol 为每个窗格 |
| "在 24500 画一条水平线" | draw_shape(horizontal_line) |
| "截个图" | capture_screenshot |
工具参考(78 个 MCP 工具)
图表读取
| 工具 | 何时使用 | 输出大小 |
|---|---|---|
chart_get_state |
首次调用 —— 获取品种、时间周期、所有指标名称和 ID | ~500B |
data_get_study_values |
读取所有指标的当前 RSI、MACD、BB、EMA 值 | ~500B |
quote_get |
获取最新价格、OHLC、成交量 | ~200B |
data_get_ohlcv |
获取价格 K 线。使用 summary: true 获取紧凑统计 |
500B(摘要)/ 8KB(100 根 K 线) |
自定义指标数据(Pine 绘图)
读取任何可见 Pine 指标输出的 line.new()、label.new()、table.new()、box.new()。
| 工具 | 何时使用 | 输出大小 |
|---|---|---|
data_get_pine_lines |
读取水平价格水平(支撑/阻力、会话水平) | ~1-3KB |
data_get_pine_labels |
读取文本注释和价格("PDH 24550"、"Bias Long") | ~2-5KB |
data_get_pine_tables |
读取数据表格(会话统计、分析仪表板) | ~1-4KB |
data_get_pine_boxes |
读取价格区域/范围作为 {high, low} 对 | ~1-2KB |
始终使用 study_filter 来定位特定指标:study_filter: "Profiler"。
图表控制
| 工具 | 功能 |
|---|---|
chart_set_symbol |
更改代码(BTCUSD、AAPL、ES1!、NYMEX:CL1!) |
chart_set_timeframe |
更改周期(1、5、15、60、D、W、M) |
chart_set_type |
更改样式(K线、HeikinAshi、线图、面积图、Renko) |
chart_manage_indicator |
添加/删除指标。使用全名:"Relative Strength Index" 而非 "RSI" |
chart_scroll_to_date |
跳到某个日期(ISO:"2025-01-15") |
chart_set_visible_range |
缩放至确切范围(Unix 时间戳) |
symbol_info / symbol_search |
品种元数据和搜索 |
indicator_set_inputs / indicator_toggle_visibility |
更改指标设置、显示/隐藏 |
多窗格布局
| 工具 | 功能 |
|---|---|
pane_list |
列出所有窗格及其品种和活动状态 |
pane_set_layout |
更改网格:s、2h、2v、2x2、4、6、8 |
pane_focus |
聚焦指定索引的窗格 |
pane_set_symbol |
在任何窗格上设置品种 |
标签页管理
| 工具 | 功能 |
|---|---|
tab_list |
列出打开的图表标签页 |
tab_new / tab_close |
打开/关闭标签页 |
tab_switch |
按索引切换到标签页 |
Pine Script 开发
| 工具 | 步骤 |
|---|---|
pine_set_source |
1. 将代码注入编辑器 |
pine_smart_compile |
2. 编译(含自动检测和错误检查) |
pine_get_errors |
3. 读取编译错误(如果有) |
pine_get_console |
4. 读取 log.info() 输出 |
pine_save |
5. 保存到 TradingView 云 |
pine_get_source |
读取当前脚本(警告:复杂脚本可能超过 200KB) |
pine_new |
创建空白指标/策略/库 |
pine_open / pine_list_scripts |
打开或列出已保存的脚本 |
pine_analyze |
离线静态分析(无需图表) |
pine_check |
服务端编译检查(无需图表) |
回放模式
| 工具 | 步骤 |
|---|---|
replay_start |
从某个日期进入回放 |
replay_step |
前进一根 K 线 |
replay_autoplay |
自动前进(以毫秒为单位设置速度) |
replay_trade |
买入/卖出/平仓 |
replay_status |
检查持仓、盈亏、日期 |
replay_stop |
返回实时 |
绘图、警报、UI 自动化
| 工具 | 功能 |
|---|---|
draw_shape |
绘制水平线、趋势线、矩形、文本 |
draw_list / draw_remove_one / draw_clear |
管理绘图 |
alert_create / alert_list / alert_delete |
管理价格警报 |
capture_screenshot |
截图(区域:full、chart、strategy_tester) |
batch_run |
在多个品种/时间周期上运行操作 |
watchlist_get / watchlist_add |
读取/修改自选列表 |
layout_list / layout_switch |
管理已保存的布局 |
ui_open_panel / ui_click / ui_evaluate |
UI 自动化 |
tv_launch / tv_health_check / tv_discover |
连接管理 |
上下文管理
工具默认返回紧凑输出以减少上下文使用。对于典型的"分析我的图表"工作流,总上下文约为 5-10KB,而非约 80KB。
| 特性 | 如何节省上下文 |
|---|---|
| Pine 线 | 仅返回去重的价格水平,而非每个线对象 |
| Pine 标签 | 每个研究最多 50 个,仅文本+价格 |
| Pine 表格 | 预格式化的行字符串,无单元格元数据 |
| Pine 框 | 仅返回去重的 {high, low} 区域 |
| OHLCV 摘要模式 | 统计信息 + 最后 5 根 K 线而非全部 |
| 指标输入 | 自动过滤加密/编码的 blob |
verbose: true |
在需要时传递给任何 pine 工具以获取包含 ID/颜色的原始数据 |
study_filter |
针对一个指标而非扫描全部 |
在系统上找到 TradingView
启动脚本和 tv_launch 会自动检测 TradingView。如果自动检测失败:
| 平台 | 常见位置 |
|---|---|
| Mac | /Applications/TradingView.app/Contents/MacOS/TradingView |
| Windows | %LOCALAPPDATA%\TradingView\TradingView.exe、%PROGRAMFILES%\WindowsApps\TradingView*\TradingView.exe |
| Linux | /opt/TradingView/tradingview、~/.local/share/TradingView/TradingView、/snap/tradingview/current/tradingview |
关键标志:--remote-debugging-port=9222
测试
# 需要 TradingView 以 --remote-debugging-port=9222 运行
npm test
29 个测试,涵盖:Pine Script 静态分析、服务端编译和 CLI 路由。
架构
Claude Code ←→ MCP Server(stdio) ←→ CDP(端口 9222) ←→ TradingView 桌面(Electron)
- 传输:MCP over stdio(78 个工具)+ CLI(
tv命令,30 个命令,66 个子命令) - 连接:Chrome DevTools Protocol on localhost:9222
- 流式传输:轮询-比较循环,去重,JSONL 输出到 stdout
- 无外部依赖,只需
@modelcontextprotocol/sdk和chrome-remote-interface
归属
本项目与以下实体无任何关联、认可或从属关系:
- TradingView Inc. —— TradingView 是 TradingView Inc. 的商标。
- Anthropic —— Claude 和 Claude Code 是 Anthropic, PBC 的商标。
该工具是一个独立的 MCP 服务器,通过标准 MCP 协议连接到 Claude Code。它不包含或修改任何 Anthropic 软件。
免责声明
本项目仅供个人、教育和研究目的使用。
此工具的工作原理: 此工具使用 Chrome DevTools Protocol(CDP),这是基于 Chromium 的应用程序内置的标准调试接口。它不会反向工程任何专有的 TradingView 协议,不会连接到 TradingView 的服务器,也不会绕过任何访问控制。调试端口必须由用户通过标准的 Chromium 命令行标志(--remote-debugging-port=9222)显式启用。
使用本软件即表示您承认并同意:
- 您全权负责确保您对此工具的使用符合 TradingView 的使用条款 和所有适用法律。
- TradingView 的使用条款禁止自动化数据收集、抓取和非展示性使用其平台和数据。此工具使用 Chrome DevTools Protocol 以编程方式与 TradingView 桌面应用程序交互,这可能与这些条款冲突。
- 您承担使用此工具的所有风险。作者不对因使用本工具导致的任何账户封禁、暂停、法律诉讼或其他后果负责。
- 不得将本工具用于(包括但不限于):
- 重新分发、转售或商业利用 TradingView 的市场数据
- 规避 TradingView 的访问控制或订阅限制
- 使用提取的数据执行自动化交易或算法决策
- 侵犯 Pine Script 指标作者的知识产权
- 连接到 TradingView 的服务器或基础设施(所有访问均通过本地运行的桌面应用程序)
- 流式功能仅监控您本地运行的 TradingView 桌面实例。它不会连接到 TradingView 的服务器或从 TradingView 的基础设施提取数据。
- 通过此工具访问的市场数据仍受交易所和数据提供商许可条款的约束。不得重新分发、存储或商业利用通过此工具获得的任何数据。
- 此工具访问未记录的内部 TradingView 应用程序接口,这些接口可能随时更改或失效,恕不另行通知。
使用风险自负。 如果您不确定您的预期用途是否符合 TradingView 的条款,请不要使用此工具。
许可证
MIT —— 详细信息请参见 LICENSE。
MIT 许可证仅适用于本项目的源代码。它不授予对 TradingView 软件、数据、商标或知识产权的任何权利。