news 2026/4/18 5:44:26

3大场景解锁Python量化选股新姿势:TradingView-Screener零门槛实战指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3大场景解锁Python量化选股新姿势:TradingView-Screener零门槛实战指南

3大场景解锁Python量化选股新姿势:TradingView-Screener零门槛实战指南

【免费下载链接】TradingView-ScreenerA package that lets you create TradingView screeners in Python项目地址: https://gitcode.com/gh_mirrors/tr/TradingView-Screener

Python选股工具TradingView-Screener是一款让量化分析效率倍增的Python数据包,通过编程方式即可快速筛选和分析全球股票市场数据。无论你是量化交易爱好者还是Python初学者,都能借助这个工具构建专业的股票筛选系统,大幅提升投资决策效率。

零基础安装与环境配置

极速安装指南

通过pip命令即可完成安装,无需复杂配置:

pip install tradingview-screener

安装完成后,即可使用核心模块构建筛选策略。项目核心代码位于src/tradingview_screener/目录,其中:

  • query.py:提供SQL-like查询接口,支持筛选、排序和分页
  • column.py:定义市场数据列及比较操作
  • models.py:数据模型定义

基础架构解析

TradingView-Screener采用模块化设计,主要包含三大功能层:

  1. 数据请求层:通过TradingView API获取市场数据
  2. 查询构建层:提供链式调用接口构建筛选条件
  3. 数据处理层:将原始数据转换为Pandas DataFrame进行分析

核心功能与基础应用

快速筛选器构建技巧

使用Query类创建基础筛选器,以下代码筛选市值10亿到100亿之间、成交量大于500万的股票:

from tradingview_screener import Query, Column basic_query = ( Query() .select('name', 'close', 'volume', 'market_cap_basic') .where( Column('market_cap_basic').between(1_000_000_000, 10_000_000_000), Column('volume') > 5_000_000 ) .order_by('volume', ascending=False) .limit(20) ) total_count, results_df = basic_query.get_scanner_data() print(f"找到{total_count}个符合条件的股票") print(results_df.head())

多市场数据获取方法

通过set_markets方法可同时筛选多个市场的股票,支持全球67个国家及多种金融工具:

# 同时筛选美国、香港和瑞士市场 multi_market_query = ( Query() .select('ticker', 'name', 'close', 'market', 'country') .set_markets('america', 'hongkong', 'switzerland') .where(Column('close') > 100) .limit(15) )

进阶技巧与性能优化

复杂条件组合策略

使用And/Or函数构建多条件逻辑组合,实现精准筛选:

from tradingview_screener import And, Or advanced_query = ( Query() .select('name', 'close', 'RSI', 'MACD.macd', 'MACD.signal') .where2( And( Column('RSI').between(30, 70), Or( Column('MACD.macd') > Column('MACD.signal'), Column('close') > Column('SMA20') ) ) ) .set_markets('america') )

大数据集分页处理方案

处理大量数据时,使用offset+limit实现分页加载,避免内存溢出:

# 分页获取1000条数据,每页100条 all_results = [] for page in range(10): total, df = ( Query() .select('ticker', 'close', 'volume') .where(Column('volume') > 1_000_000) .offset(page * 100) .limit(100) .get_scanner_data() ) all_results.append(df) if (page + 1) * 100 >= total: break combined_df = pd.concat(all_results, ignore_index=True)

数据缓存与持久化方案

将筛选结果保存到本地,避免重复请求:

import pandas as pd from pathlib import Path CACHE_DIR = Path("screener_cache") CACHE_DIR.mkdir(exist_ok=True) CACHE_FILE = CACHE_DIR / "daily_top_gainers.csv" # 检查缓存是否存在且最新 if not CACHE_FILE.exists() or (pd.Timestamp.now() - pd.Timestamp(CACHE_FILE.stat().st_mtime, unit='s')).days > 1: # 缓存不存在或过期,重新获取数据 _, results_df = ( Query() .select('ticker', 'name', 'close', 'change') .where(Column('change') > 5) .order_by('change', ascending=False) .limit(50) .get_scanner_data() ) results_df.to_csv(CACHE_FILE, index=False) else: # 使用缓存数据 results_df = pd.read_csv(CACHE_FILE)

行业解决方案与实战案例

场景一:加密货币市场监控系统

结合加密货币市场特性,构建实时监控方案:

crypto_scanner = ( Query() .select('ticker', 'close', 'volume', 'change') .set_markets('crypto') .where( Column('volume') > 10_000_000, Column('change') > 2 ) .order_by('change', ascending=False) ) # 定时执行监控 import time while True: total, df = crypto_scanner.get_scanner_data() print(f"当前涨幅超过2%的加密货币: {total}个") print(df.head()) time.sleep(300) # 每5分钟更新一次

场景二:多指数成分股对比分析

同时分析多个指数成分股,发现市场趋势:

index_comparison = ( Query() .select('ticker', 'name', 'close', 'market_cap_basic', 'PE') .set_index('SYML:SP;SPX', 'SYML:TVC;UKX') # 标普500和英国富时100 .where(Column('PE') < 20) .order_by('market_cap_basic', ascending=False) ) total, df = index_comparison.get_scanner_data() # 按指数分组比较估值水平 df['index'] = df['ticker'].apply(lambda x: 'S&P 500' if x.startswith(('NYSE:', 'NASDAQ:')) else 'FTSE 100') print(df.groupby('index')['PE'].describe())

最佳实践与注意事项

数据请求优化建议

  1. 合理设置请求频率:避免短时间内大量请求,建议间隔至少30秒
  2. 精简返回字段:只选择需要的列,减少数据传输量
  3. 使用缓存机制:对非实时数据进行本地缓存,降低API负载

错误处理与稳定性保障

def safe_get_scanner_data(query, max_retries=3): retries = 0 while retries < max_retries: try: return query.get_scanner_data() except Exception as e: retries += 1 if retries == max_retries: print(f"获取数据失败: {e}") return (0, pd.DataFrame()) print(f"重试第{retries}次...") time.sleep(2 ** retries) # 指数退避策略

通过以上方法,你可以充分利用TradingView-Screener构建专业的量化分析系统,无论是个人投资决策还是机构级策略研发,都能显著提升工作效率和数据准确性。

【免费下载链接】TradingView-ScreenerA package that lets you create TradingView screeners in Python项目地址: https://gitcode.com/gh_mirrors/tr/TradingView-Screener

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 1:43:19

Z-Image-Turbo自动化脚本:批量生成图像的shell调用示例

Z-Image-Turbo自动化脚本&#xff1a;批量生成图像的shell调用示例 1. Z-Image-Turbo UI界面概览 Z-Image-Turbo 是一款轻量高效、开箱即用的图像生成模型&#xff0c;特别适合需要快速产出高质量图片的日常开发与内容创作场景。它不像很多大模型那样动辄需要几十GB显存或复杂…

作者头像 李华
网站建设 2026/3/23 11:33:57

YOLO11模型版本管理:Git-LFS与部署协同实战

YOLO11模型版本管理&#xff1a;Git-LFS与部署协同实战 在计算机视觉工程实践中&#xff0c;模型迭代快、权重文件大、环境依赖杂&#xff0c;常常让团队陷入“改了代码跑不通、换了机器训不了、发版时权重丢一半”的困境。YOLO11作为新一代高效目标检测框架&#xff0c;延续了…

作者头像 李华
网站建设 2026/4/12 10:46:28

星际工厂蓝图库:从零开始的戴森球计划进阶指南

星际工厂蓝图库&#xff1a;从零开始的戴森球计划进阶指南 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 作为戴森球计划的指挥官&#xff0c;你是否曾面临生产线停滞、资…

作者头像 李华
网站建设 2026/4/18 5:29:38

ESP32定时器中断使用详解:Arduino环境实践

以下是对您提供的博文《ESP32定时器中断使用详解&#xff1a;Arduino环境实践》的 深度润色与结构重构版 。本次优化严格遵循您的全部要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、专业、有“人味”——像一位在一线带过多个IoT项目的嵌入式工程师&#xff0c;…

作者头像 李华
网站建设 2026/4/18 2:00:42

QWERTY Learner:效率工具与技能提升的完美结合

QWERTY Learner&#xff1a;效率工具与技能提升的完美结合 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/4/17 17:25:08

提示词不生效?麦橘超然WebUI参数调优实战案例

提示词不生效&#xff1f;麦橘超然WebUI参数调优实战案例 1. 为什么你的提示词“没反应”——从现象到本质 你输入了精心打磨的提示词&#xff1a;“赛博朋克风格的未来城市街道&#xff0c;雨夜&#xff0c;蓝色和粉色的霓虹灯光反射在湿漉漉的地面上……”&#xff0c;点击…

作者头像 李华