Python实现股票筛选器
欢迎来到你的基于 Python 的股票筛选工作流——无需付费终端,无需手动过滤,完全掌控。
一键发币: Aptos | X Layer | SUI | SOL | BNB | ETH | BASE | ARB | OP | Polygon | Avalanche | 用AI学区块链开发
大多数交易员每年支付数百美元来获取他们可以用 Python 免费获取的数据。
如果你曾经使用过Finviz,你已经知道它是一个非常强大的筛选器——但如果你能自动化你的扫描,将指标直接拉入你的 Python 环境,并与来自 EODHD 的专业级市场数据合并,会怎么样?
欢迎来到你的基于 Python 的股票筛选工作流——无需付费终端,无需手动过滤,完全掌控。
1、为什么你不再需要昂贵的筛选器了
大多数交易员手动使用像 Finviz 这样的筛选器——打开网站,点击过滤器,然后导出股票代码。但如果你在构建系统,你需要自动化和可回测的数据。
这就是 finvizfinance 的作用——一个 Finviz 数据的 Python 包装器,让你:
- 程序化地筛选股票
- 提取公司详情、行业和表现数据
- 与 EODHD 等 API 结合,获取历史或基本面数据进行增强
这意味着你的工作流程可以从 “手动扫描” → “自动策略构建器”只需几分钟。
2、安装和导入 finvizfinance
pip install finvizfinance
然后在 Python 中导入并开始使用:
from finvizfinance.screener import Screener
# 使用所需的过滤器初始化筛选器
filters = ['cap_large', 'geo_usa', 'ta_rsi_os40'] # 大盘股、美国、RSI 低于 40
stock_screener = Screener(filters=filters)
filters 参数对应于 Finviz 上的下拉菜单。
在这里,我们正在获取潜在超卖的大盘美股——这是均值回归或波段交易策略的一个良好起点。
3、获取并查看筛选结果
一旦设置好筛选器,就可以获取数据:
df = stock_screener.get_screen_data()
print(df.head())
输出:

你刚刚用 Python 建立了实时的 Finviz 筛选器。
现在,让我们将这些数据转化为可操作的交易分析。
4、用 EODHD 历史和基本面数据进行丰富
Finviz 提供的是表面见解。但如果你想获得真正的量化力量,你需要准确的历史和基本面数据。
这就是 EODHD (收盘后历史数据) 的作用。
EODHD 提供:
- 20 多年的 OHLCV 历史数据
- 100,000+ 全球股票代码
- 收益、拆股、分红
- 基本面比率(市盈率、市净率、净资产收益率等)
你可以轻松地合并这两个来源:
import requests
api_token = "YOUR_EODHD_API_KEY"
symbol = "AAPL"url = f"https://eodhd.com/api/eod/{symbol}.US?api_token={api_token}&fmt=json"
data = requests.get(url).json()print("最新收盘价:", data[-1]['close'])
现在,想象一下你从 Finviz 筛选器列表中提取基本面数据,从 EODHD 获取数据,并根据风险调整回报率或估值对股票进行排名——你就建立了一个自己的机构级筛选器。
5、构建定量股票排名系统
将两个来源的指标结合起来,形成自定义评分模型:
import pandas as pd
# 示例:合并 RSI(来自 Finviz)和 P/E(来自 EODHD)
df['RSI_Score'] = 100 - df['RSI'] # RSI 越低,得分越高
df['PE_Score'] = 1 / df['PE'] # P/E 越低,越好
df['Final_Score'] = 0.6 * df['RSI_Score'] + 0.4 * df['PE_Score']ranked = df.sort_values('Final_Score', ascending=False)
print(ranked[['Ticker', 'Final_Score']].head(10))
你现在得到了一个数据驱动的、排序的机遇列表——远远超越静态筛选器所能提供的。
6、自动化与回测
这里才是真正的强大之处——将你的筛选器与回测库如 backtesting.py 或你自己的逻辑集成。
你可以使用 EODHD 的 历史数据来模拟你的策略表现:
from backtesting import Backtest, Strategy
from backtesting.test import SMA
class RSIStrategy(Strategy):
def init(self):
price = self.data.Close
self.rsi = self.I(lambda p: pd.Series(p).rolling(14).apply(lambda x: 100 - (100 / (1 + (x.pct_change().dropna() > 0).mean()))), price)
def next(self):
if self.rsi[-1] < 30:
self.buy()
elif self.rsi[-1] > 70:
self.sell()# 运行回测使用 EODHD 数据
import pandas as pd
df = pd.DataFrame(data)
df['Date'] = pd.to_datetime(df['date'])
df.set_index('Date', inplace=True)bt = Backtest(df, RSIStrategy, cash=10000)
bt.run()
现在你不仅仅是筛选——你还在自动验证、排序和测试。
7、为什么这个组合有效

这个组合为你提供了彭博级别的洞察力——而无需每月支付 2000 美元。
你可以使用 CRON 或 Windows 任务计划程序 每周安排此管道,将结果导出到 Google 表格,或给自己发送 Telegram 警报,告知通过你过滤器的前 5 只股票。
示例代码片段用于导出:
ranked.to_csv('screened_stocks.csv', index=False)
print("✅ 筛选器结果已保存到 screened_stocks.csv")
筛选的未来是 API 驱动的、通过自动化赢得速度和精度的交易者。
你不需要再爬取、猜测或依赖第三方门户了。有了 Python + finvizfinance + EODHD,你可以拥有你的数据、控制你的过滤器,并验证你的优势——全部在一个框架中。
8、结束语
停止为数据仪表板付费,当你可以自己构建时。
以前每月花费数千美元的东西现在变成了开源且 API 驱动。
无论你是扫描被低估的科技股还是回测股息收益率过滤器,工具已经在你手中——你只需要将它们连接起来。
原文链接:Stop Paying for Data! Your Python Guide to Superior Stock Screener Analysis (Using finvizfinance)
DefiPlot翻译整理,转载请标明出处
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。