stock-screener by dkyazzentwatwa/chatgpt-skills
npx skills add https://github.com/dkyazzentwatwa/chatgpt-skills --skill stock-screener根据财务指标筛选股票并进行对比分析。
from stock_screener import StockScreener
screener = StockScreener()
# 加载股票数据
screener.load_csv("stocks.csv")
# 应用筛选器
results = screener.filter(
pe_ratio=(0, 20),
market_cap_min=1e9,
dividend_yield_min=2.0
)
print(results)
# 基础筛选
python stock_screener.py --input stocks.csv --pe-max 20 --div-min 2.0
# 多重筛选
python stock_screener.py --input stocks.csv --pe 5 25 --pb-max 3 --cap-min 1B
# 行业筛选
python stock_screener.py --input stocks.csv --sector Technology --pe-max 30
# 按指标排名
python stock_screener.py --input stocks.csv --rank-by dividend_yield --top 20
# 对比特定股票
python stock_screener.py --input stocks.csv --compare AAPL MSFT GOOGL
# 导出结果
python stock_screener.py --input stocks.csv --pe-max 15 --output screened.csv
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
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.1
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) -> str
screener.filter(
pe_ratio=(5, 20), # 市盈率在 5 到 20 之间
pb_ratio_max=3.0, # 市净率低于 3
ps_ratio_max=5.0, # 市销率低于 5
peg_ratio_max=1.5 # PEG 比率低于 1.5
)
screener.filter(
market_cap_min=1e9, # 最小市值 10 亿美元
market_cap_max=10e9, # 最大市值 100 亿美元(中盘股)
revenue_min=500e6 # 最小营收 5 亿美元
)
screener.filter(
dividend_yield_min=2.0, # 最低股息率 2%
dividend_yield_max=8.0, # 最高股息率 8%(避免股息陷阱)
payout_ratio_max=75 # 可持续的派息比率
)
screener.filter(
revenue_growth_min=10, # 最低营收增长率 10%
earnings_growth_min=15, # 最低盈利增长率 15%
eps_growth_min=10 # 最低每股收益增长率 10%
)
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
)
results = screener.value_screen()
# 寻找被低估的股票:
# - 市盈率 < 15
# - 市净率 < 2
# - 股息率 > 2%
# - 利润率 > 10%
results = screener.growth_screen()
# 寻找成长型股票:
# - 营收增长率 > 15%
# - 盈利增长率 > 20%
# - PEG 比率 < 2
results = screener.dividend_screen()
# 寻找股息型股票:
# - 股息率 2-8%
# - 派息比率 < 75%
# - 5 年以上股息支付历史
results = screener.quality_screen()
# 寻找高质量股票:
# - 净资产收益率 > 15%
# - 利润率 > 15%
# - 负债权益比 < 0.5
# - 流动比率 > 2
comparison = screener.compare(["AAPL", "MSFT", "GOOGL"])
# 返回:
# AAPL MSFT GOOGL
# price 175.50 380.00 140.00
# pe_ratio 28.50 35.20 25.30
# market_cap 2.8T 2.8T 1.7T
# dividend_yield 0.50 0.80 0.00
# profit_margin 25.30 36.70 22.50
# ...
# 按股息率排名前 20
top_dividend = screener.rank_by("dividend_yield", ascending=False).head(20)
# 使用自定义权重对股票评分
scores = screener.score_stocks({
"pe_ratio": -0.2, # 越低越好
"dividend_yield": 0.3, # 越高越好
"profit_margin": 0.3, # 越高越好
"revenue_growth": 0.2 # 越高越好
})
# 返回按综合评分排序的股票
# 查看每只股票在多个指标上的排名位置
ranked = screener.percentile_rank(["pe_ratio", "dividend_yield", "profit_margin"])
# 返回每个指标的百分位(0-100)
sector_stats = screener.sector_summary()
# 返回:
# sector | count | avg_pe | avg_div | avg_margin
# Technology | 45 | 28.5 | 1.2 | 22.3
# Healthcare | 32 | 18.2 | 2.1 | 18.7
# Financials | 28 | 12.5 | 3.2 | 25.1
screener = StockScreener()
screener.load_csv("sp500.csv")
# 应用筛选器
results = screener.filter(
pe_ratio=(5, 15),
dividend_yield_min=3.0,
payout_ratio_max=70,
profit_margin_min=10
)
# 按股息率排序
top = results.sort_values("dividend_yield", ascending=False).head(10)
print(top[["symbol", "name", "pe_ratio", "dividend_yield", "payout_ratio"]])
results = screener.filter(
revenue_growth_min=15,
earnings_growth_min=15,
peg_ratio_max=1.5,
pe_ratio_max=25
)
# 筛选科技行业
tech = screener.filter_by_sector(["Technology"]).filter(
market_cap_min=10e9,
profit_margin_min=15
)
# 对比顶级科技股
comparison = screener.compare(tech["symbol"].head(5).tolist())
screener.filter(pe_ratio_max=20).to_csv("value_stocks.csv")
screener.filter(dividend_yield_min=3).to_json("dividend_stocks.json")
report = screener.summary_report()
# 返回筛选结果的格式化文本摘要
每周安装量
108
代码仓库
GitHub 星标数
23
首次出现
2026 年 1 月 24 日
安全审计
安装于
opencode93
gemini-cli90
codex86
cursor84
github-copilot81
kimi-cli75
Filter stocks by financial metrics and perform comparative analysis.
from stock_screener import StockScreener
screener = StockScreener()
# Load stock data
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)
# Basic screening
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
# Sector filter
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
# Compare specific stocks
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
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.1
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) -> str
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
)
screener.filter(
market_cap_min=1e9, # Min $1B market cap
market_cap_max=10e9, # Max $10B (mid-cap)
revenue_min=500e6 # Min $500M revenue
)
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
)
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
)
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
)
results = screener.value_screen()
# Finds undervalued stocks:
# - P/E < 15
# - P/B < 2
# - Dividend yield > 2%
# - Profit margin > 10%
results = screener.growth_screen()
# Finds growth stocks:
# - Revenue growth > 15%
# - Earnings growth > 20%
# - PEG ratio < 2
results = screener.dividend_screen()
# Finds dividend stocks:
# - Dividend yield 2-8%
# - Payout ratio < 75%
# - 5+ years dividend history
results = screener.quality_screen()
# Finds high-quality stocks:
# - ROE > 15%
# - Profit margin > 15%
# - D/E < 0.5
# - Current ratio > 2
comparison = screener.compare(["AAPL", "MSFT", "GOOGL"])
# Returns:
# AAPL MSFT GOOGL
# price 175.50 380.00 140.00
# pe_ratio 28.50 35.20 25.30
# market_cap 2.8T 2.8T 1.7T
# dividend_yield 0.50 0.80 0.00
# profit_margin 25.30 36.70 22.50
# ...
# Top 20 by dividend yield
top_dividend = screener.rank_by("dividend_yield", ascending=False).head(20)
# Score 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
})
# Returns stocks ranked by composite score
# See where each stock ranks on multiple metrics
ranked = screener.percentile_rank(["pe_ratio", "dividend_yield", "profit_margin"])
# Returns percentile (0-100) for each metric
sector_stats = screener.sector_summary()
# Returns:
# sector | count | avg_pe | avg_div | avg_margin
# Technology | 45 | 28.5 | 1.2 | 22.3
# Healthcare | 32 | 18.2 | 2.1 | 18.7
# Financials | 28 | 12.5 | 3.2 | 25.1
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
)
# Rank by dividend yield
top = results.sort_values("dividend_yield", ascending=False).head(10)
print(top[["symbol", "name", "pe_ratio", "dividend_yield", "payout_ratio"]])
results = screener.filter(
revenue_growth_min=15,
earnings_growth_min=15,
peg_ratio_max=1.5,
pe_ratio_max=25
)
# Filter to technology sector
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())
screener.filter(pe_ratio_max=20).to_csv("value_stocks.csv")
screener.filter(dividend_yield_min=3).to_json("dividend_stocks.json")
report = screener.summary_report()
# Returns formatted text summary of screening results
Weekly Installs
108
Repository
GitHub Stars
23
First Seen
Jan 24, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode93
gemini-cli90
codex86
cursor84
github-copilot81
kimi-cli75
DOCX文件创建、编辑与分析完整指南 - 使用docx-js、Pandoc和Python脚本
51,800 周安装