news 2026/8/8 15:24:10

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/8/8 3:08:30

怀旧游戏模拟器技术指南:跨平台重温经典游戏体验

怀旧游戏模拟器技术指南&#xff1a;跨平台重温经典游戏体验 【免费下载链接】Genesis-Plus-GX An enhanced port of Genesis Plus - accurate & portable Sega 8/16 bit emulator 项目地址: https://gitcode.com/gh_mirrors/ge/Genesis-Plus-GX 复古游戏模拟器和跨…

作者头像 李华
网站建设 2026/8/8 1:46:50

protel文件直接下单?小批量pcb板生产厂家支持现状

以下是对您提供的技术博文进行 深度润色与结构重构后的专业级技术文章 。全文严格遵循您的所有要求&#xff1a; ✅ 彻底去除AI痕迹&#xff0c;语言自然、老练、有工程师口吻&#xff1b; ✅ 摒弃模板化标题&#xff08;如“引言”“总结”&#xff09;&#xff0c;改用真…

作者头像 李华
网站建设 2026/8/2 18:34:01

内容聚合工具:重新定义你的多媒体消费体验

内容聚合工具&#xff1a;重新定义你的多媒体消费体验 【免费下载链接】dart_simple_live 简简单单的看直播 项目地址: https://gitcode.com/GitHub_Trending/da/dart_simple_live 你是否每天在5平台间切换寻找内容&#xff1f;是否在刷短视频时被算法困在信息茧房&…

作者头像 李华
网站建设 2026/8/4 20:35:59

Open-AutoGLM如何集成语音输入?全模态交互部署教程

Open-AutoGLM如何集成语音输入&#xff1f;全模态交互部署教程 Open-AutoGLM 是智谱开源的轻量级手机端 AI Agent 框架&#xff0c;专为移动端真实场景设计。它不是简单地把大模型“搬”到手机上&#xff0c;而是围绕“理解屏幕规划动作执行操作”这一闭环&#xff0c;构建了一…

作者头像 李华
网站建设 2026/8/6 12:13:25

自托管照片管理:3大优势+1个颠覆性功能,打造你的私有云相册

自托管照片管理&#xff1a;3大优势1个颠覆性功能&#xff0c;打造你的私有云相册 【免费下载链接】immich 自主托管的照片和视频备份解决方案&#xff0c;直接从手机端进行操作。 项目地址: https://gitcode.com/GitHub_Trending/im/immich 在数字时代&#xff0c;我们…

作者头像 李华