如何用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
相关产品推荐
相关产品推荐

