TradingView股票筛选器Python包终极指南:三步实现自动化交易分析
TradingView-Screener是一个强大的Python包,专门用于创建TradingView股票筛选器,帮助投资者通过编程方式快速获取和分析股票市场数据。无论你是股票交易新手还是技术爱好者,这个工具都能让你的投资分析更加高效和智能。通过这个Python包,你可以轻松访问全球70多个国家的股票、期权、加密货币、外汇、期货等金融数据,实现真正的量化交易分析自动化。
📊 为什么选择TradingView-Screener?
在当今快速变化的金融市场中,及时获取准确的交易数据至关重要。TradingView-Screener解决了传统手动分析的痛点,提供了以下核心优势:
- 3000+数据字段:覆盖OHLC价格数据、技术指标、基本面分析(如市盈率、每股收益等)
- 多时间框架支持:从1分钟到1个月,自由混合不同时间框架,无需订阅高级服务
- SQL-like筛选语法:使用直观的AND/OR逻辑进行复杂条件筛选
- 实时数据访问:支持通过浏览器会话获取实时市场数据
- 完全免费开源:MIT许可证,无隐藏费用,社区持续维护更新
🚀 三步安装与快速启动
第一步:环境准备与安装
确保你的Python环境(3.9及以上版本)已经就绪,然后通过以下命令安装:
pip install tradingview-screener
第二步:基础数据获取
只需几行代码,你就能开始获取股票数据:
from tradingview_screener import Query
# 创建查询实例并获取数据
query_result = (Query()
.select('name', 'close', 'volume', 'market_cap_basic')
.get_scanner_data())
print(query_result)
第三步:进阶筛选与分析
使用更复杂的筛选条件来发现交易机会:
from tradingview_screener import Query, col
# 筛选中小市值、高相对成交量、MACD金叉的股票
advanced_query = (Query()
.select('name', 'close', 'close|1', 'close|5', 'volume', 'relative_volume_10d_calc')
.where(
col('market_cap_basic').between(1_000_000, 50_000_000),
col('relative_volume_10d_calc') > 1.2,
col('MACD.macd|1') >= col('MACD.signal|1')
)
.order_by('volume', ascending=False)
.limit(25)
.get_scanner_data())
🔍 四大实际应用场景解析
场景一:开盘前策略准备
对于日内交易者,开盘前的准备工作决定了一天的交易成败。使用TradingView-Screener,你可以在开盘前快速识别:
- 预市涨幅最大的股票
- 成交量异常活跃的个股
- 技术指标发出买入/卖出信号的标的
- 突破关键阻力位/支撑位的股票
场景二:投资组合智能监控
如果你是长期投资者,可以使用这个工具实现:
- 定期监控持仓股票的表现变化
- 自动发现需要调整的仓位比例
- 持续寻找新的投资机会
- 风险预警与止损提醒
场景三:量化策略回测
TradingView-Screener提供的历史数据支持完整的策略回测:
- 多时间框架数据获取
- 自定义技术指标计算
- 批量数据处理与分析
- 策略绩效评估
场景四:市场情绪分析
通过分析交易量和价格变动,洞察市场情绪:
- 相对成交量异常检测
- 价格突破模式识别
- 资金流向分析
- 市场热点追踪
🛠️ 核心模块深度解析
Query模块:数据查询的核心
src/tradingview_screener/query.py模块是整个包的核心,提供了灵活的查询构建器:
from tradingview_screener import Query
# 支持链式调用的查询构建
query = (Query()
.select('name', 'close', 'volume')
.where(condition1, condition2)
.order_by('volume', ascending=False)
.limit(50)
.offset(10))
Screeners模块:专业筛选器集合
src/tradingview_screener/screeners.py提供了多种专业筛选器:
from tradingview_screener import stocks, crypto, options
# 获取意大利市值前5的股票
italian_stocks = stocks('italy').limit(5).get_scanner_data()
# 获取交易量前5的加密货币
top_crypto = crypto().limit(5).get_scanner_data()
# 获取AAPL期权链数据
aapl_options = options('NASDAQ:AAPL').limit(5).get_scanner_data()
Column模块:条件构建利器
src/tradingview_screener/column.py提供了强大的条件构建功能:
from tradingview_screener import col
# 构建复杂的筛选条件
conditions = [
col('market_cap_basic').between(1_000_000, 100_000_000),
col('volume') > 1_000_000,
col('RSI|14') < 30, # RSI超卖
col('MACD.macd') > col('MACD.signal') # MACD金叉
]
📈 时间框架灵活应用
TradingView-Screener支持从1分钟到1个月的多时间框架数据:
| 时间框架 | 列名示例 | 适用场景 |
|---|---|---|
| 1分钟 | close\|1 | 高频交易、日内交易 |
| 5分钟 | close\|5 | 短线交易策略 |
| 15分钟 | close\|15 | 日内波段交易 |
| 30分钟 | close\|30 | 中短线分析 |
| 1小时 | close\|60 | 日间交易 |
| 4小时 | close\|240 | 波段交易 |
| 1天 | close | 中长期投资 |
| 1周 | close\|1W | 趋势分析 |
| 1月 | close\|1M | 长期投资 |
你可以自由混合不同时间框架的数据,这在技术分析中特别有用:
# 混合不同时间框架的技术指标
mixed_timeframe_query = (Query()
.select('name', 'close', 'close|1', 'close|60', 'RSI|14', 'RSI|14|60')
.where(col('RSI|14') < 30, col('RSI|14|60') > 50)
.get_scanner_data())
🔐 实时数据获取技巧
方法一:使用rookiepy获取浏览器会话
import rookiepy
from tradingview_screener import Query
# 从Chrome浏览器加载cookies
cookies = rookiepy.to_cookiejar(rookiepy.chrome(['.tradingview.com']))
# 使用cookies获取实时数据
real_time_data = Query().get_scanner_data(cookies=cookies)
方法二:手动提取sessionid
- 登录TradingView网站
- 打开开发者工具(Ctrl+Shift+I)
- 进入Application标签
- 找到Cookies > https://www.tradingview.com/
- 复制sessionid值
cookies = {'sessionid': 'your_session_id_here'}
real_time_data = Query().get_scanner_data(cookies=cookies)
💡 最佳实践与优化建议
数据获取优化
- 分批获取:对于大量数据,使用
.limit()和.offset()分批获取 - 缓存机制:缓存常用查询结果,减少API调用
- 请求间隔:设置合理的请求间隔,避免触发限流
错误处理策略
from tradingview_screener import Query
import time
def safe_get_data(query, max_retries=3):
for attempt in range(max_retries):
try:
return query.get_scanner_data()
except Exception as e:
print(f"尝试 {attempt+1} 失败: {e}")
if attempt < max_retries - 1:
time.sleep(2 ** attempt) # 指数退避
return None
性能监控
import time
from tradingview_screener import Query
start_time = time.time()
data = Query().limit(100).get_scanner_data()
end_time = time.time()
print(f"数据获取耗时: {end_time - start_time:.2f}秒")
print(f"获取记录数: {len(data[1])}")
🚨 常见问题与解决方案
问题1:API请求限制
解决方案:
- 使用合理的
.limit()值 - 实现请求间隔控制
- 考虑使用缓存机制
问题2:数据字段不熟悉
解决方案:
- 查阅官方文档了解3000+可用字段
- 使用
.select()时只选择需要的字段 - 从简单查询开始,逐步增加复杂度
问题3:实时数据获取失败
解决方案:
- 确保已登录TradingView账户
- 检查cookies是否正确
- 验证账户是否有实时数据权限
📊 与其他工具的集成
与Pandas数据分析集成
import pandas as pd
from tradingview_screener import Query
# 获取数据并转换为DataFrame
_, df = Query().select('name', 'close', 'volume', 'market_cap_basic').limit(100).get_scanner_data()
# 数据清洗与分析
df['price_to_volume'] = df['close'] / df['volume']
df['market_cap_category'] = pd.cut(df['market_cap_basic'],
bins=[0, 1e9, 1e10, float('inf')],
labels=['小盘', '中盘', '大盘'])
# 保存分析结果
df.to_csv('stock_analysis.csv', index=False)
与数据可视化集成
import matplotlib.pyplot as plt
import seaborn as sns
from tradingview_screener import Query
# 获取数据
_, df = Query().select('close', 'volume', 'market_cap_basic').limit(50).get_scanner_data()
# 创建可视化
fig, axes = plt.subplots(1, 2, figsize=(12, 5))
# 价格与成交量散点图
axes[0].scatter(df['volume'], df['close'], alpha=0.6)
axes[0].set_xlabel('成交量')
axes[0].set_ylabel('收盘价')
axes[0].set_title('价格与成交量关系')
# 市值分布直方图
axes[1].hist(df['market_cap_basic'].dropna(), bins=20, edgecolor='black')
axes[1].set_xlabel('市值')
axes[1].set_ylabel('频数')
axes[1].set_title('股票市值分布')
plt.tight_layout()
plt.show()
🔮 未来发展与社区贡献
TradingView-Screener作为一个开源项目,持续得到社区的维护和更新:
- 每日自动更新:通过GitHub Actions自动更新字段和市场的文档
- 无硬编码值:所有字段和市场都从官方API动态获取
- 类型提示支持:完整的类型提示,提供更好的开发体验
- 测试覆盖率:包含完整的测试用例,确保代码质量
如果你在使用过程中发现任何问题或有改进建议,欢迎通过项目仓库参与贡献。项目的核心源码位于src/tradingview_screener/目录,测试用例位于tests/目录,便于开发者深入了解和贡献代码。
🎯 总结:为什么选择这个工具?
TradingView-Screener为Python开发者提供了一个强大、灵活且易于使用的股票数据分析工具。无论你是:
- 个人投资者:想要自动化投资分析流程
- 量化交易员:需要构建复杂的交易策略
- 金融分析师:希望快速获取市场数据
- 数据科学家:需要金融数据进行研究分析
这个工具都能满足你的需求。通过简单的API调用,你就能访问全球金融市场数据,实现从基础筛选到复杂策略分析的全流程自动化。
记住,成功的投资不仅需要好的工具,更需要持续的学习和实践。TradingView-Screener为你提供了强大的数据获取能力,但真正的投资智慧来自于对市场的深入理解和风险管理的严格执行。
开始你的自动化交易分析之旅吧!安装这个包,用代码发现市场机会,让数据驱动你的投资决策。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



