技术问询:获取用于动量排名投资组合的Top100/200加密货币列表
获取TradingView加密货币Top100/200列表并在Pine脚本中使用
由于Pine脚本本身无法直接抓取网页内容,我们需要先用Python获取动态更新的榜单,再将其导入Pine脚本中使用。以下是针对你的需求的分步解决方案:
一、用Python获取Top100/200加密货币列表
TradingView的榜单是动态渲染的,普通HTTP请求无法拿到完整内容,因此我们用selenium模拟浏览器加载页面并提取数据:
1. 安装依赖
打开终端运行:
pip install selenium webdriver-manager
2. 运行获取脚本
执行以下代码,会自动加载页面、滚动获取更多币种,最后将去重后的币种名称保存到本地文件:
from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.common.by import By import time # 初始化Chrome浏览器 driver = webdriver.Chrome(service=Service(ChromeDriverManager().install())) driver.get("https://www.tradingview.com/markets/cryptocurrencies/prices-all/") # 等待页面加载完成(可根据网速调整时长) time.sleep(5) # 滚动页面加载更多币种(3次滚动足够加载Top200) for _ in range(3): driver.execute_script("window.scrollTo(0, document.body.scrollHeight);") time.sleep(2) # 提取币种元素并去重 coin_elements = driver.find_elements(By.CSS_SELECTOR, ".tv-screener__symbol") unique_coins = [] seen_symbols = set() for elem in coin_elements[:200]: # 提取币种简称(比如从"BTC/USDT"中取"BTC") symbol = elem.text.split()[0] if symbol not in seen_symbols: seen_symbols.add(symbol) unique_coins.append(symbol) # 保存到本地文件 with open("top_crypto_coins.txt", "w") as f: f.write("\n".join(unique_coins)) print(f"成功获取{len(unique_coins)}个币种,已保存到top_crypto_coins.txt") driver.quit()
二、在Pine脚本中使用币种列表
Pine脚本无法读取本地文件,因此我们将获取到的币种列表转换成Pine数组格式,硬编码到脚本中:
示例Pine脚本框架
//@version=5 indicator("动量排名投资组合", overlay=false) // 将top_crypto_coins.txt中的币种复制到这里,构建数组 top_coins = array.new_string( "BTC", "ETH", "BNB", "XRP", "ADA", "SOL", "DOT", "DOGE", "AVAX", "TRX", // 继续添加剩余的币种,直到覆盖你需要的Top100/200 ) // 示例:遍历数组输出币种名称(仅在最后一根K线显示) if barstate.islast for i = 0 to array.size(top_coins) - 1 var label coin_label = na coin_label := label.new(bar_index, i * 10, array.get(top_coins, i), color=color.teal, textcolor=color.white)
关键提示
- 如果TradingView页面结构更新导致提取失败,右键页面上的币种名称,选择"检查"查看新的CSS选择器,替换代码中的
.tv-screener__symbol即可。 - 若你不需要频繁更新榜单,也可以手动复制页面上的币种名称,直接整理成Pine数组格式,省去Python脚本的步骤。
- 后续要计算动量时,可使用Pine的
request.security()函数调用每个币种的K线数据,注意TradingView的API调用频率限制。
内容的提问来源于stack exchange,提问作者Manuel Hruby
相关产品推荐
相关产品推荐

