You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现TradingView登录并抓取指标买卖信号?

解决方案:Python抓取TradingView买卖信号

方案1:使用TradingView官方API(推荐)

TradingView提供官方API接口,可直接获取指标数据与信号,无需处理Canvas渲染问题:

  • 登录:通过API密钥完成身份验证,无需模拟浏览器操作
  • 抓取指标:调用对应接口传入标的代码、指标类型(如RSI、MACD)及时间周期,获取结构化JSON数据
  • 识别信号:从返回数据中提取最新指标值,根据预设阈值判断BUY/SELL信号(例如RSI<30触发BUY,RSI>70触发SELL)

示例代码:

import requests

API_KEY = "你的API密钥"
BASE_URL = "https://api.tradingview.com/v1"

# 认证请求头
auth_headers = {"Authorization": f"Bearer {API_KEY}"}

# 获取指定标的的指标数据
def fetch_indicator_data(symbol, indicator, interval="1h"):
    params = {
        "symbol": symbol,
        "indicator": indicator,
        "interval": interval
    }
    response = requests.get(f"{BASE_URL}/indicators", headers=auth_headers, params=params)
    return response.json()

# 根据指标值生成买卖信号
def generate_trade_signal(indicator_data):
    latest_value = indicator_data["result"]["values"][-1]
    if latest_value < 30:
        return "BUY"
    elif latest_value > 70:
        return "SELL"
    return "HOLD"

# 调用示例
indicator_data = fetch_indicator_data("NASDAQ:AAPL", "RSI")
print(generate_trade_signal(indicator_data))

方案2:OCR识别Canvas信号(应急方案)

若无法使用官方API,可通过Selenium配合OCR工具识别Canvas截图中的信号文本:

  • 用Selenium模拟登录TradingView并导航至目标图表
  • 截取Canvas区域的截图
  • 使用Tesseract OCR识别截图中的"BUY"/"SELL"字样

示例代码:

from selenium import webdriver
from selenium.webdriver.common.by import By
import pytesseract
from PIL import Image

# 初始化浏览器驱动
driver = webdriver.Chrome()
driver.get("https://www.tradingview.com/chart/")

# 执行登录操作(替换为你的账号密码)
driver.find_element(By.ID, "username").send_keys("你的账号")
driver.find_element(By.ID, "password").send_keys("你的密码")
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()

# 等待图表加载,定位Canvas元素
driver.implicitly_wait(10)
canvas = driver.find_element(By.TAG_NAME, "canvas")

# 截取Canvas并保存
canvas_screenshot = canvas.screenshot_as_png
with open("chart_signal.png", "wb") as f:
    f.write(canvas_screenshot)

# OCR识别信号文本
image = Image.open("chart_signal.png")
recognized_text = pytesseract.image_to_string(image)

# 提取信号
if "SELL" in recognized_text:
    print("触发SELL信号")
elif "BUY" in recognized_text:
    print("触发BUY信号")

driver.quit()

注意:OCR精度受图表样式、字体大小影响,可通过截图区域裁剪、图片灰度化/二值化等预处理提升识别准确率。

方案3:利用TradingView警报推送信号

通过TradingView内置警报功能,将信号推送到Python后端接口:

  • 在TradingView图表中设置指标警报,当满足BUY/SELL条件时,发送POST请求到你的Python服务
  • 用Flask/FastAPI编写简单接口接收并处理信号

示例Flask代码:

from flask import Flask, request

app = Flask(__name__)

@app.route("/tradingview-webhook", methods=["POST"])
def receive_trade_signal():
    alert_data = request.json
    signal_type = alert_data.get("signal")
    if signal_type:
        print(f"收到交易信号:{signal_type}")
    return "信号已接收", 200

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

在TradingView警报设置中,将Webhook URL设为http://你的服务器IP:5000/tradingview-webhook,并在警报消息中包含信号类型(如{"signal": "BUY"})。

内容的提问来源于stack exchange,提问作者Kudzai Madziva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:25:11