图表快照服务

一个轻量级的TradingView图表快照服务,通过浏览器自动化获取图表图像,适用于金融分析和交易工具集成。

  • by ali-rajabpour
  • Python
  • 本地部署
  • 18 星标
  • 更新于
在 GitHub 查看 ali-rajabpour/tradingview-mcp

使用说明

TradingView MCP服务器📈

A. 轻量级 用于获取TradingView图表快照的模型上下文协议(MCP)服务器。使用Playwright通过持久会话和基于cookie的身份验证实现高效的浏览器自动化。

备注:这使用了Playwright,因为TradingView使用JavaScript/CCanvas在客户端渲染图表。图表图像没有纯HTTP API。这是最轻的工作解决方案(~150MB RAM,而使用Selenium时约为500MB)。

✨ 特性

  • 🪶 轻量级:无头模式下的剧作家(~150MB vs ~500MB的Selenium)
  • 🚀 快速:持续浏览器重用,每张图表3-5秒
  • 🔐 安全:通过Cookie进行基于会话的身份验证
  • 🎨 可定制的:配置图表维度、间隔和主题
  • 🔧 MCP兼容:适用于任何启用MCP的客户端(Claude Desktop等)
  • ♻️ 高效:跨多个请求重用浏览器实例

📋 先决条件

  • Python 3.10或更高版本
  • TradingView帐户(免费或付费)
  • TradingView会话Cookie

目录

🚀 安装

1.克隆存储库

git clone https://github.com/yourusername/tradingview-mcp.git
cd tradingview-mcp

2.创建虚拟环境

# Windows
python -m venv venv
.\venv\Scripts\activate

# Linux/Mac
python3 -m venv venv
source venv/bin/activate

3.安装依赖项

pip install -r requirements.txt

# Install Playwright browsers (one-time setup, ~150MB download)
python -m playwright install chromium

4.配置凭据

  1. 复制 .env.example 到 .env:

    # Windows
    copy .env.example .env
    
    # Linux/Mac
    cp .env.example .env
    
  2. 获取您的TradingView会话Cookie:

    • 登录到 交易视图 在浏览器中
    • 按 F12 打开开发人员工具
    • 首选 应用 选项卡(Chrome)或 存储 选项卡(Firefox)
    • 导航至 Cookie > https://www.tradingview.com
    • 查找并复制这两个cookie值:
      • sessionid → 复制整个值
      • sessionid_sign → 复制整个值

    ⚠️ 重要:复制完整值,包括任何特殊字符(斜线、等号等)。不要添加引号或额外空格。

  3. 编辑 .env 并粘贴您的值:

    TRADINGVIEW_SESSION_ID=your_actual_session_id_here
    TRADINGVIEW_SESSION_ID_SIGN=your_actual_session_id_sign_here
    

    示例(带假值):

    TRADINGVIEW_SESSION_ID=47zlhkbl2weohrhmjgufeg1o24droaod
    TRADINGVIEW_SESSION_ID_SIGN=v3:6S2OD9ta349/yqN0RdCeK3UKxTl/tJr4AOoPRUa0Crk=
    

5.测试您的设置(可选但推荐)

创建测试文件 test.py:

import asyncio
import sys
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent / "src"))

from dotenv import load_dotenv
load_dotenv()

from tradingview_mcp.server import get_chart_snapshot

async def test():
    image = await get_chart_snapshot("BINANCE:BTCUSDT", "D", 1200, 600, "dark")
    if image:
        Path("test_chart.png").write_bytes(image)
        print(f"✅ Success! Chart saved to test_chart.png ({len(image)} bytes)")
    else:
        print("❌ Failed to fetch chart")

asyncio.run(test())

运行它:

python test.py

如果成功,你会看到 test_chart.png 比特币图表!

🎯 用法

快速入门-本地测试

安装后,测试服务器:

python src/tradingview_mcp/server.py

服务器将启动并等待MCP客户端通过stdio连接。

Claude桌面配置

将此添加到您的Claude Desktop配置文件中:

视窗: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json

选项1:使用.env文件(推荐)

{
  "mcpServers": {
    "tradingview": {
      "command": "python",
      "args": ["C:\\path\\to\\tradingview-mcp\\src\\tradingview_mcp\\server.py"],
      "cwd": "C:\\path\\to\\tradingview-mcp"
    }
  }
}

选项2:内联凭据

{
  "mcpServers": {
    "tradingview": {
      "command": "python",
      "args": ["C:\\path\\to\\tradingview-mcp\\src\\tradingview_mcp\\server.py"],
      "env": {
        "TRADINGVIEW_SESSION_ID": "your_session_id",
        "TRADINGVIEW_SESSION_ID_SIGN": "your_session_id_sign"
      }
    }
  }
}

💡 小贴士:使用绝对路径。在Windows上,使用双反斜杠 \\ 或正斜杠 /.

重新启动克劳德桌面 您将看到TradingView工具可用!

Claude中的查询示例

配置后,您可以询问Claude:

- "Get me a daily chart of Bitcoin"
- "Show me AAPL on 1-hour timeframe"
- "Fetch a weekly chart for NASDAQ:TSLA with light theme"
- "Get BINANCE:ETHUSDT 5-minute chart"
- "Validate my TradingView session"
- "What timeframes are available?"

🛠️ 可用工具

1. get_chart_snapshot

获取TradingView图表快照。

参数:

  • symbol (必填):TradingView格式的交易对
    • 示例: "BINANCE:BTCUSDT", "NASDAQ:AAPL", "BITSTAMP:BTCUSD"
  • interval (可选):图表时间范围(默认值: "D")
    • 会议纪要: "1", "5", "15", "30", "60", "240"
    • 日/周/月: "D", "W", "M"
  • width (可选):图像宽度(像素)(默认值: 1200)
  • height (可选):图像高度(像素)(默认值: 600)
  • theme (可选): "dark" 或 "light" (默认值: "dark")

例子:

Get me a daily chart of Bitcoin on Binance

2. validate_session

检查您的TradingView会话凭据是否有效。

例子:

Validate my TradingView session

3. list_timeframes

列出所有可用的图表时间范围/间隔。

例子:

What timeframes are available?

📊 符号格式

TradingView使用以下格式: EXCHANGE:SYMBOL

常见示例

符号 说明
BINANCE:BTCUSDT 币安上的比特币/USDT
NASDAQ:AAPL 苹果股份有限公司在纳斯达克上市
NYSE:TSLA 特斯拉股份有限公司在纽约证券交易所
BITSTAMP:BTCUSD Bitstamp上的比特币/美元
FX:EURUSD 欧元/美元外汇对
COINBASE:ETHUSD Coinbase上的以太坊/美元

查找符号名称

  1. 首选 交易视图
  2. 搜索您想要的资产
  3. 查看格式的URL或图表标题 EXCHANGE:SYMBOL

🔧 建筑

此MCP服务器使用 轻量级浏览器自动化的剧作家:

  1. 认证:会话Cookie传递到浏览器上下文
  2. 图表生成:剧作家导航到TradingView并捕获屏幕截图
  3. 效率:跨请求重用的持久浏览器实例
  4. MCP协议:通过stdio与MCP客户端通信

为什么是剧作家(不是纯HTTP)?

  • TradingView使用JavaScript/CCanvas在客户端渲染图表
  • 不存在用于生成图表图像的服务器端API
  • 剧作家比硒轻(~150MB对~500MB RAM)
  • 带有优化标志的无头模式可最大限度地减少资源使用
  • 浏览器重用使后续请求非常快(1-2秒)

✅ 这是TradingView图表最轻的方法

🐛 故障排除

Cookie/身份验证问题

问题:“会话凭据无效”或“会话无效”

解决方案:

  1. 检查尾随逗号或空格:确保你的 .env 文件没有多余的字符

    # ❌ Wrong (has comma)
    TRADINGVIEW_SESSION_ID=abc123,
    
    # ✅ Correct
    TRADINGVIEW_SESSION_ID=abc123
    
  2. 刷新Cookie:会话Cookie将在约30天后过期

    • 注销并返回TradingView
    • 从开发者工具获取新的Cookie
    • 更新您的 .env 文件
  3. 检查您是否已登录:复制Cookie时,请确保您已登录TradingView

  4. 复制整个值:包括特殊字符(=、/、:等)

未找到符号

问题:“无法获取图表快照”

解决方案:

  1. 使用正确的格式: EXCHANGE:SYMBOL (全部大写)

    • ✅ BINANCE:BTCUSDT
    • ❌ btcusdt 或 binance:btcusdt
  2. 验证TradingView.com上是否存在该符号

  3. 首先使用已知符号进行测试: BINANCE:BTCUSDT 或 NASDAQ:AAPL

超时错误

问题:“超时”或性能缓慢

解决方案:

  1. 检查互联网连接和TradingView.com的可访问性
  2. 浏览器启动时,第一个请求需要更长的时间(5-8s)
  3. 由于浏览器重用,后续请求更快(3-5s)
  4. 如果持续存在,请重新启动MCP服务器

剧作家安装问题

问题:“找不到剧作家”或浏览器下载失败

解决方案:

# Reinstall Playwright
pip uninstall playwright
pip install playwright

# Install browsers again
python -m playwright install chromium

# If still failing, install system dependencies (Linux)
sudo playwright install-deps

Claude Desktop无法识别服务器

问题:工具未出现在Claude Desktop中

解决方案:

  1. 检查配置文件中的JSON语法(使用JSON验证器)
  2. 使用 绝对路径 (非相对)
  3. 验证Python路径是否正确:
    # Windows
    where python
    
    # Mac/Linux
    which python
    
  4. 完全重启 克劳德桌面(不仅仅是重新加载)
  5. 检查Claude日志是否有错误:
    • 窗户: %APPDATA%\Claude\logs\
    • 雨衣: ~/Library/Logs/Claude/

性能问题

问题:内存使用率高或响应慢

提示:

  • 内存使用量:对于剧作家来说,~150MB是正常的
  • 第一张图表:5-8秒(浏览器启动)
  • 后续图表:3-5秒
  • 为了提高效率,浏览器在请求之间被重用
  • 如果内存随时间增长,请重新启动服务器

⚡ 演出

度量 值 注释
内存使用 ~150MB 剧作家无头浏览器
首次请求 5-8秒 浏览器启动+图表加载
后续请求 3-5秒 浏览器重用(持久)
图像尺寸 50-200KB PNG格式,因尺寸而异
浏览器 Chromium ~150MB下载(一次性)

与备选方案的比较:

方法 内存 速度 状态
纯HTTP ~50MB 1-2s ❌ 不可能(不存在API)
硒 ~500MB 10-15s ⚠️ 工作但很重
剧作家 ~150MB 3-5s ✅ 最佳选项

🔒 安全说明

  • ⚠️ 永远不要承诺你的 .env 文件 -它包含您的会话凭据
  • ⚠️ 不要共享您的会话Cookie -它们提供完整的帐户访问权限
  • ⚠️ 定期轮换Cookie -它们在大约30天后过期
  • ✅ .env 在...里 .gitignore 默认情况下
  • ✅ 在生产中使用环境变量或安全凭据管理

📝 发展

项目结构

tradingview-mcp/
├── src/
│   └── tradingview_mcp/
│       ├── __init__.py
│       └── server.py          # Main MCP server
├── .env.example               # Template for credentials
├── .gitignore
├── README.md
├── requirements.txt           # Python dependencies
└── pyproject.toml            # Project metadata

运行测试

# Install dev dependencies
pip install -e ".[dev]"

# Run tests
pytest

代码格式化

# Format code
black src/

# Lint code
ruff check src/

🤝 贡献

欢迎投稿!方法如下:

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 进行更改
  4. 彻底测试
  5. 提交您的更改(git commit -m 'Add amazing feature')
  6. 推到分支(git push origin feature/amazing-feature)
  7. 打开拉取请求

开发设置:

pip install -e ".[dev]"
black src/
ruff check src/

📄 许可证

MIT许可证-请参阅 许可证 文件以获取详细信息。

🙏 致谢

⚠️ 免责声明

这是一个 非官方的 该工具不隶属于TradingView,也不受TradingView的认可或连接。使用风险由您自行承担,并符合TradingView的服务条款。遵守费率限制并注意您的使用。

� 支持和问题

📊 项目统计

  • 版本: 0.1.0
  • python: 3.10+
  • 记忆:~150MB
  • 响应时间:3-5秒
  • 许可证:MIT

由以下材料制成❤️ 由贸易界

星⭐ 如果你觉得这个仓库有用的话!