3个实战技巧掌握Python选股工具:从安装到量化交易全流程
【免费下载链接】TradingView-ScreenerA package that lets you create TradingView screeners in Python项目地址: https://gitcode.com/gh_mirrors/tr/TradingView-Screener
引言:Python量化交易的效率革命
TradingView-Screener是一款专为Python开发者设计的股票数据筛选工具,通过编程方式快速构建专业级选股策略。它将复杂的金融数据筛选逻辑封装为简洁API,让你无需深入了解TradingView底层接口即可实现高效股票数据筛选与技术指标分析。无论是量化交易策略回测还是实时市场监控,该工具都能显著降低开发门槛,提升数据处理效率。
安装与环境配置:5分钟快速启动
请执行以下步骤完成环境配置:
- 基础安装
pip install tradingview-screener- 源码部署(进阶用户)
git clone https://gitcode.com/gh_mirrors/tr/TradingView-Screener cd TradingView-Screener poetry install- 验证安装
from tradingview_screener import Query query = Query() print("安装成功" if query else "安装失败")核心功能模块解析:构建选股策略的基石
核心查询模块:src/tradingview_screener/query.py
该模块提供完整的筛选条件构建能力,主要方法包括:
select(): 指定返回数据列where()/where2(): 添加筛选条件order_by(): 排序结果limit()/offset(): 分页控制get_scanner_data(): 执行查询并返回DataFrame
指标运算模块:src/tradingview_screener/column.py
提供技术指标分析能力,关键方法:
- 比较操作符(
>,<,>=,<=等) - 技术形态检测(
crosses_above(),crosses_below()) - 区间筛选(
between(),in_day_range()) - 百分比比较(
above_pct(),below_pct())
实战案例:Python量化交易场景落地
场景一:均线金叉股票实时筛选
from tradingview_screener import Query, Column # 创建查询实例 query = Query() # 配置筛选条件:5日均线上穿20日均线 query.select(Column("name"), Column("close"), Column("volume")) query.where( Column("sma5").crosses_above(Column("sma20")), Column("volume") > 1000000 ) query.set_markets("NYSE", "NASDAQ") query.order_by(Column("change_percent"), ascending=False) query.limit(20) # 执行查询 count, df = query.get_scanner_data() print(f"找到{count}支符合条件的股票") df.to_csv("golden_cross_stocks.csv")场景二:多指标组合筛选高成长股
from tradingview_screener import Query, Column, And, Or query = Query() query.select("name", "symbol", "market_cap", "pe_ratio", "eps_growth") query.where( And( Column("market_cap") > 1000000000, Column("pe_ratio").between(5, 25), Or( Column("eps_growth") > 0.2, Column("revenue_growth") > 0.15 ), Column("volume") > 500000 ) ) query.set_index("SPX", "NASDAQ 100") count, results = query.get_scanner_data()场景三:行业板块轮动监测工具
def monitor_sector_rotation(): sectors = ["technology", "healthcare", "financial", "energy"] sector_performance = {} for sector in sectors: query = Query() query.select("change_percent") query.set_property("sector", sector) count, df = query.get_scanner_data() sector_performance[sector] = df["change_percent"].mean() # 找出表现最佳和最差的板块 best_sector = max(sector_performance, key=lambda k: sector_performance[k]) worst_sector = min(sector_performance, key=lambda k: sector_performance[k]) print(f"今日最佳板块: {best_sector} ({sector_performance[best_sector]:.2f}%)") print(f"今日最差板块: {worst_sector} ({sector_performance[worst_sector]:.2f}%)") # 每小时执行一次监测 import time while True: monitor_sector_rotation() time.sleep(3600)性能调优方案:处理大规模数据的关键配置
- 分页查询优化
# 每次获取100条数据,避免内存溢出 page_size = 100 total_count, _ = query.limit(page_size).get_scanner_data() for page in range(0, (total_count // page_size) + 1): query.offset(page * page_size) count, df = query.get_scanner_data() process_batch(df) # 处理当前批次数据- 查询条件优化
- 优先使用数值筛选条件减少返回数据量
- 合理设置
set_markets()或set_tickers()限制范围 - 仅选择必要列:
select("symbol", "close", "volume")
- 缓存策略配置
# 缓存查询结果30分钟 from functools import lru_cache import time @lru_cache(maxsize=128) def cached_scan(query_params, timestamp): # 实现查询逻辑 return results # 使用当前时间戳//1800作为缓存键,每30分钟更新一次 current_key = int(time.time() // 1800) results = cached_scan(query_params, current_key)常见问题解决:股票数据筛选实战答疑
Q1: 如何处理API请求频率限制?
A: 实现请求间隔控制:
import time def rate_limited_query(query, delay=2): time.sleep(delay) # 设置请求间隔 return query.get_scanner_data()Q2: 筛选结果出现重复数据怎么办?
A: 添加去重逻辑:
count, df = query.get_scanner_data() df = df.drop_duplicates(subset=["symbol"], keep="last")Q3: 如何获取更多技术指标数据?
A: 使用set_property()方法扩展指标:
query.set_property("indicators", ["RSI", "MACD", "Bollinger Bands"])Q4: 网络不稳定导致查询失败如何处理?
A: 添加重试机制:
from tenacity import retry, stop_after_attempt, wait_exponential @retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=2, max=10)) def safe_query(query): return query.get_scanner_data()Q5: 如何将筛选结果可视化?
A: 集成Matplotlib实现可视化:
import matplotlib.pyplot as plt count, df = query.get_scanner_data() top_10 = df.head(10) plt.figure(figsize=(12, 6)) plt.bar(top_10["symbol"], top_10["change_percent"]) plt.title("Top 10 Price Gainers") plt.ylabel("Percentage Change (%)") plt.xticks(rotation=45) plt.tight_layout() plt.savefig("price_gainers.png")通过以上指南,你已掌握使用TradingView-Screener进行Python量化交易的核心技能。从基础安装到高级策略实现,这个工具能帮助你构建专业的股票数据筛选系统,提升量化交易决策效率。根据实际需求灵活调整筛选条件和技术指标,即可快速实现个性化的选股策略。
【免费下载链接】TradingView-ScreenerA package that lets you create TradingView screeners in Python项目地址: https://gitcode.com/gh_mirrors/tr/TradingView-Screener
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考