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采用模块化设计,主要包含三大功能层:
- 数据请求层:通过TradingView API获取市场数据
- 查询构建层:提供链式调用接口构建筛选条件
- 数据处理层:将原始数据转换为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())最佳实践与注意事项
数据请求优化建议
- 合理设置请求频率:避免短时间内大量请求,建议间隔至少30秒
- 精简返回字段:只选择需要的列,减少数据传输量
- 使用缓存机制:对非实时数据进行本地缓存,降低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),仅供参考