stock-screener
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseStock Screener
股票筛选工具
Filter stocks by financial metrics and perform comparative analysis.
通过财务指标筛选股票并进行对比分析。
Features
功能特性
- Multi-Metric Filtering: P/E, P/B, market cap, dividend yield, etc.
- Custom Screens: Save and reuse filter combinations
- Comparative Analysis: Side-by-side stock comparison
- Sector Analysis: Group and analyze by sector
- Ranking: Score and rank stocks by criteria
- Export: CSV, JSON, formatted reports
- 多指标筛选:支持P/E、P/B、市值、股息率等指标
- 自定义筛选器:保存并复用筛选条件组合
- 对比分析:股票的横向对比
- 行业分析:按行业分组分析
- 排名功能:按指定标准对股票评分并排名
- 导出功能:支持CSV、JSON格式及格式化报告
Quick Start
快速开始
python
from stock_screener import StockScreener
screener = StockScreener()python
from stock_screener import StockScreener
screener = StockScreener()Load stock data
加载股票数据
screener.load_csv("stocks.csv")
screener.load_csv("stocks.csv")
Apply filters
应用筛选条件
results = screener.filter(
pe_ratio=(0, 20),
market_cap_min=1e9,
dividend_yield_min=2.0
)
print(results)
undefinedresults = screener.filter(
pe_ratio=(0, 20),
market_cap_min=1e9,
dividend_yield_min=2.0
)
print(results)
undefinedCLI Usage
命令行使用
bash
undefinedbash
undefinedBasic screening
基础筛选
python stock_screener.py --input stocks.csv --pe-max 20 --div-min 2.0
python stock_screener.py --input stocks.csv --pe-max 20 --div-min 2.0
Multiple filters
多条件筛选
python stock_screener.py --input stocks.csv --pe 5 25 --pb-max 3 --cap-min 1B
python stock_screener.py --input stocks.csv --pe 5 25 --pb-max 3 --cap-min 1B
Sector filter
行业筛选
python stock_screener.py --input stocks.csv --sector Technology --pe-max 30
python stock_screener.py --input stocks.csv --sector Technology --pe-max 30
Rank by metric
按指标排名
python stock_screener.py --input stocks.csv --rank-by dividend_yield --top 20
python stock_screener.py --input stocks.csv --rank-by dividend_yield --top 20
Compare specific stocks
对比特定股票
python stock_screener.py --input stocks.csv --compare AAPL MSFT GOOGL
python stock_screener.py --input stocks.csv --compare AAPL MSFT GOOGL
Export results
导出结果
python stock_screener.py --input stocks.csv --pe-max 15 --output screened.csv
undefinedpython stock_screener.py --input stocks.csv --pe-max 15 --output screened.csv
undefinedInput Format
输入格式
Stock CSV
股票CSV格式
csv
symbol,name,sector,price,pe_ratio,pb_ratio,market_cap,dividend_yield,eps,revenue_growth,profit_margin
AAPL,Apple Inc,Technology,175.50,28.5,45.2,2.8e12,0.5,6.16,8.5,25.3
MSFT,Microsoft,Technology,380.00,35.2,12.8,2.8e12,0.8,10.79,12.3,36.7
JNJ,Johnson & Johnson,Healthcare,155.00,15.2,5.8,3.8e11,2.9,10.20,5.2,22.1csv
symbol,name,sector,price,pe_ratio,pb_ratio,market_cap,dividend_yield,eps,revenue_growth,profit_margin
AAPL,Apple Inc,Technology,175.50,28.5,45.2,2.8e12,0.5,6.16,8.5,25.3
MSFT,Microsoft,Technology,380.00,35.2,12.8,2.8e12,0.8,10.79,12.3,36.7
JNJ,Johnson & Johnson,Healthcare,155.00,15.2,5.8,3.8e11,2.9,10.20,5.2,22.1API Reference
API参考
StockScreener Class
StockScreener类
python
class StockScreener:
def __init__(self)
# Data Loading
def load_csv(self, filepath: str) -> 'StockScreener'
def load_dataframe(self, df: pd.DataFrame) -> 'StockScreener'
# Filtering
def filter(self, **criteria) -> pd.DataFrame
def filter_by_sector(self, sectors: List[str]) -> 'StockScreener'
def filter_by_metric(self, metric: str, min_val: float = None,
max_val: float = None) -> 'StockScreener'
# Screening Presets
def value_screen(self) -> pd.DataFrame
def growth_screen(self) -> pd.DataFrame
def dividend_screen(self) -> pd.DataFrame
def quality_screen(self) -> pd.DataFrame
def custom_screen(self, criteria: Dict) -> pd.DataFrame
# Analysis
def compare(self, symbols: List[str]) -> pd.DataFrame
def rank_by(self, metric: str, ascending: bool = True) -> pd.DataFrame
def sector_summary(self) -> pd.DataFrame
def metric_distribution(self, metric: str) -> Dict
# Scoring
def score_stocks(self, weights: Dict[str, float] = None) -> pd.DataFrame
def percentile_rank(self, metrics: List[str]) -> pd.DataFrame
# Export
def to_csv(self, filepath: str) -> str
def to_json(self, filepath: str) -> str
def summary_report(self) -> strpython
class StockScreener:
def __init__(self)
# 数据加载
def load_csv(self, filepath: str) -> 'StockScreener'
def load_dataframe(self, df: pd.DataFrame) -> 'StockScreener'
# 筛选功能
def filter(self, **criteria) -> pd.DataFrame
def filter_by_sector(self, sectors: List[str]) -> 'StockScreener'
def filter_by_metric(self, metric: str, min_val: float = None,
max_val: float = None) -> 'StockScreener'
# 预设筛选器
def value_screen(self) -> pd.DataFrame
def growth_screen(self) -> pd.DataFrame
def dividend_screen(self) -> pd.DataFrame
def quality_screen(self) -> pd.DataFrame
def custom_screen(self, criteria: Dict) -> pd.DataFrame
# 分析功能
def compare(self, symbols: List[str]) -> pd.DataFrame
def rank_by(self, metric: str, ascending: bool = True) -> pd.DataFrame
def sector_summary(self) -> pd.DataFrame
def metric_distribution(self, metric: str) -> Dict
# 评分功能
def score_stocks(self, weights: Dict[str, float] = None) -> pd.DataFrame
def percentile_rank(self, metrics: List[str]) -> pd.DataFrame
# 导出功能
def to_csv(self, filepath: str) -> str
def to_json(self, filepath: str) -> str
def summary_report(self) -> strFiltering Criteria
筛选条件
Valuation Metrics
估值指标
python
screener.filter(
pe_ratio=(5, 20), # P/E between 5 and 20
pb_ratio_max=3.0, # P/B ratio under 3
ps_ratio_max=5.0, # Price/Sales under 5
peg_ratio_max=1.5 # PEG ratio under 1.5
)python
screener.filter(
pe_ratio=(5, 20), # P/E介于5到20之间
pb_ratio_max=3.0, # P/B比率低于3
ps_ratio_max=5.0, # 市销率低于5
peg_ratio_max=1.5 # PEG比率低于1.5
)Size Metrics
规模指标
python
screener.filter(
market_cap_min=1e9, # Min $1B market cap
market_cap_max=10e9, # Max $10B (mid-cap)
revenue_min=500e6 # Min $500M revenue
)python
screener.filter(
market_cap_min=1e9, # 最低市值10亿美元
market_cap_max=10e9, # 最高市值100亿美元(中型股)
revenue_min=500e6 # 最低营收5亿美元
)Income Metrics
收益指标
python
screener.filter(
dividend_yield_min=2.0, # Min 2% dividend
dividend_yield_max=8.0, # Max 8% (avoid yield traps)
payout_ratio_max=75 # Sustainable payout
)python
screener.filter(
dividend_yield_min=2.0, # 最低股息率2%
dividend_yield_max=8.0, # 最高股息率8%(避免高股息陷阱)
payout_ratio_max=75 # 派息率合理(不超过75%)
)Growth Metrics
增长指标
python
screener.filter(
revenue_growth_min=10, # Min 10% revenue growth
earnings_growth_min=15, # Min 15% earnings growth
eps_growth_min=10 # Min 10% EPS growth
)python
screener.filter(
revenue_growth_min=10, # 最低营收增长率10%
earnings_growth_min=15, # 最低盈利增长率15%
eps_growth_min=10 # 最低EPS增长率10%
)Quality Metrics
质量指标
python
screener.filter(
profit_margin_min=15, # Min 15% profit margin
roe_min=15, # Min 15% return on equity
debt_to_equity_max=1.0, # Max 1.0 D/E ratio
current_ratio_min=1.5 # Min 1.5 current ratio
)python
screener.filter(
profit_margin_min=15, # 最低利润率15%
roe_min=15, # 最低净资产收益率15%
debt_to_equity_max=1.0, # 最高负债权益比1.0
current_ratio_min=1.5 # 最低流动比率1.5
)Preset Screens
预设筛选器
Value Screen
价值股筛选
python
results = screener.value_screen()python
results = screener.value_screen()Finds undervalued stocks:
寻找被低估的股票:
- P/E < 15
- P/E < 15
- P/B < 2
- P/B < 2
- Dividend yield > 2%
- 股息率 > 2%
- Profit margin > 10%
- 利润率 > 10%
undefinedundefinedGrowth Screen
成长股筛选
python
results = screener.growth_screen()python
results = screener.growth_screen()Finds growth stocks:
寻找成长型股票:
- Revenue growth > 15%
- 营收增长率 > 15%
- Earnings growth > 20%
- 盈利增长率 > 20%
- PEG ratio < 2
- PEG比率 < 2
undefinedundefinedDividend Screen
股息股筛选
python
results = screener.dividend_screen()python
results = screener.dividend_screen()Finds dividend stocks:
寻找股息型股票:
- Dividend yield 2-8%
- 股息率 2-8%
- Payout ratio < 75%
- 派息率 < 75%
- 5+ years dividend history
- 连续5年以上派息记录
undefinedundefinedQuality Screen
优质股筛选
python
results = screener.quality_screen()python
results = screener.quality_screen()Finds high-quality stocks:
寻找高质量股票:
- ROE > 15%
- ROE > 15%
- Profit margin > 15%
- 利润率 > 15%
- D/E < 0.5
- 负债权益比 < 0.5
- Current ratio > 2
- 流动比率 > 2
undefinedundefinedStock Comparison
股票对比
python
comparison = screener.compare(["AAPL", "MSFT", "GOOGL"])python
comparison = screener.compare(["AAPL", "MSFT", "GOOGL"])Returns:
返回结果:
AAPL MSFT GOOGL
AAPL MSFT GOOGL
price 175.50 380.00 140.00
price 175.50 380.00 140.00
pe_ratio 28.50 35.20 25.30
pe_ratio 28.50 35.20 25.30
market_cap 2.8T 2.8T 1.7T
market_cap 2.8T 2.8T 1.7T
dividend_yield 0.50 0.80 0.00
dividend_yield 0.50 0.80 0.00
profit_margin 25.30 36.70 22.50
profit_margin 25.30 36.70 22.50
...
...
undefinedundefinedRanking and Scoring
排名与评分
Rank by Single Metric
单指标排名
python
undefinedpython
undefinedTop 20 by dividend yield
股息率前20的股票
top_dividend = screener.rank_by("dividend_yield", ascending=False).head(20)
undefinedtop_dividend = screener.rank_by("dividend_yield", ascending=False).head(20)
undefinedComposite Scoring
综合评分
python
undefinedpython
undefinedScore stocks with custom weights
自定义权重对股票评分
scores = screener.score_stocks({
"pe_ratio": -0.2, # Lower is better
"dividend_yield": 0.3, # Higher is better
"profit_margin": 0.3, # Higher is better
"revenue_growth": 0.2 # Higher is better
})
scores = screener.score_stocks({
"pe_ratio": -0.2, # 数值越低越好
"dividend_yield": 0.3, # 数值越高越好
"profit_margin": 0.3, # 数值越高越好
"revenue_growth": 0.2 # 数值越高越好
})
Returns stocks ranked by composite score
返回按综合评分排名的股票
undefinedundefinedPercentile Ranking
百分位排名
python
undefinedpython
undefinedSee where each stock ranks on multiple metrics
查看每只股票在多个指标上的排名
ranked = screener.percentile_rank(["pe_ratio", "dividend_yield", "profit_margin"])
ranked = screener.percentile_rank(["pe_ratio", "dividend_yield", "profit_margin"])
Returns percentile (0-100) for each metric
返回每个指标的百分位排名(0-100)
undefinedundefinedSector Analysis
行业分析
python
sector_stats = screener.sector_summary()python
sector_stats = screener.sector_summary()Returns:
返回结果:
sector | count | avg_pe | avg_div | avg_margin
sector | count | avg_pe | avg_div | avg_margin
Technology | 45 | 28.5 | 1.2 | 22.3
Technology | 45 | 28.5 | 1.2 | 22.3
Healthcare | 32 | 18.2 | 2.1 | 18.7
Healthcare | 32 | 18.2 | 2.1 | 18.7
Financials | 28 | 12.5 | 3.2 | 25.1
Financials | 28 | 12.5 | 3.2 | 25.1
undefinedundefinedExample Workflows
示例工作流
Find Undervalued Dividend Stocks
寻找被低估的股息股
python
screener = StockScreener()
screener.load_csv("sp500.csv")python
screener = StockScreener()
screener.load_csv("sp500.csv")Apply filters
应用筛选条件
results = screener.filter(
pe_ratio=(5, 15),
dividend_yield_min=3.0,
payout_ratio_max=70,
profit_margin_min=10
)
results = screener.filter(
pe_ratio=(5, 15),
dividend_yield_min=3.0,
payout_ratio_max=70,
profit_margin_min=10
)
Rank by dividend yield
按股息率排名
top = results.sort_values("dividend_yield", ascending=False).head(10)
print(top[["symbol", "name", "pe_ratio", "dividend_yield", "payout_ratio"]])
undefinedtop = results.sort_values("dividend_yield", ascending=False).head(10)
print(top[["symbol", "name", "pe_ratio", "dividend_yield", "payout_ratio"]])
undefinedGrowth at Reasonable Price (GARP)
合理价格成长股(GARP)
python
results = screener.filter(
revenue_growth_min=15,
earnings_growth_min=15,
peg_ratio_max=1.5,
pe_ratio_max=25
)python
results = screener.filter(
revenue_growth_min=15,
earnings_growth_min=15,
peg_ratio_max=1.5,
pe_ratio_max=25
)Sector Comparison
行业对比
python
undefinedpython
undefinedFilter to technology sector
筛选科技行业
tech = screener.filter_by_sector(["Technology"]).filter(
market_cap_min=10e9,
profit_margin_min=15
)
tech = screener.filter_by_sector(["Technology"]).filter(
market_cap_min=10e9,
profit_margin_min=15
)
Compare top tech stocks
对比头部科技公司
comparison = screener.compare(tech["symbol"].head(5).tolist())
undefinedcomparison = screener.compare(tech["symbol"].head(5).tolist())
undefinedOutput Format
输出格式
CSV Export
CSV导出
python
screener.filter(pe_ratio_max=20).to_csv("value_stocks.csv")python
screener.filter(pe_ratio_max=20).to_csv("value_stocks.csv")JSON Export
JSON导出
python
screener.filter(dividend_yield_min=3).to_json("dividend_stocks.json")python
screener.filter(dividend_yield_min=3).to_json("dividend_stocks.json")Summary Report
汇总报告
python
report = screener.summary_report()python
report = screener.summary_report()Returns formatted text summary of screening results
返回筛选结果的格式化文本汇总
undefinedundefinedDependencies
依赖项
- pandas>=2.0.0
- numpy>=1.24.0
- pandas>=2.0.0
- numpy>=1.24.0