Filter and screen stocks by financial metrics like P/E ratio, market cap, dividend yield, and growth rates. Analyze and compare stocks from CSV data.
npx skills add https://github.com/nicepkg/ai-workflow --skill stock-screener
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
Query the U.S. Treasury Fiscal Data REST API for federal financial data. No API key required. Use for national debt (Debt to the Penny), Daily Treasury Statements, Monthly Treasury Statements, Treasury securities auctions, interest rates, foreign exchange rates, savings bonds, or U.S. government revenue and spending statistics.
Comprehensive US stock analysis including fundamental analysis (financial metrics, business quality, valuation), technical analysis (indicators, chart patterns, support/resistance), stock comparisons, and investment report generation. Use when user requests analysis of US stock tickers (e.g., "analyze AAPL", "compare TSLA vs NVDA", "give me a report on Microsoft"), evaluation of financial metrics, technical chart analysis, or investment recommendations for American stocks.
> Zero-shot time series forecasting with Google's TimesFM foundation model. Use this skill when forecasting ANY univariate time series — sales, sensor readings, stock prices, energy demand, patient vitals, weather, or scientific measurements — without training a custom model. Automatically checks system RAM/GPU before loading the model, supports CSV/DataFrame/array inputs, and returns point forecasts with calibrated prediction intervals. Includes a preflight system checker script that MUST be run before first use to verify the machine can load the model. For classical statistical time series models (ARIMA, SARIMAX, VAR) use statsmodels; for time series classification/clustering use aeon.
Query the U.S. Treasury Fiscal Data API for federal financial data including national debt, government spending, revenue, interest rates, exchange rates, and savings bonds. Access 54 datasets and 182 data tables with no API key required. Use when working with U.S. federal fiscal data, national debt tracking (Debt to the Penny), Daily Treasury Statements, Monthly Treasury Statements, Treasury securities auctions, interest rates on Treasury securities, foreign exchange rates, savings bonds, or any U.S. government financial statistics.
Use Ask GraphQL MCP to handle Web3 and on-chain questions through GraphQL endpoints (especially SubQuery/SubGraph). Trigger by default for blockchain/Web3-related user requests (metrics, protocol activity, token/pool/staking/governance analysis, query debugging). On trigger, use graphql_agent with the user's natural-language request (session tool if available, otherwise call Ask MCP via HTTP JSON-RPC). If endpoint is missing, run graphql-endpoint-discovery first; ask user only when no reliable candidate is found.
Cryptofeed - Real-time cryptocurrency market data feeds from 40+ exchanges. WebSocket streaming, normalized data, order books, trades, tickers. Python library for algorithmic trading and market data analysis.
Audit a spreadsheet for formula accuracy, errors, and common mistakes. Scopes to a selected range, a single sheet, or the entire model (including financial-model integrity checks like BS balance, cash tie-out, and logic sanity). Triggers on "audit this sheet", "check my formulas", "find formula errors", "QA this spreadsheet", "sanity check this", "debug model", "model check", "model won't balance", "something's off in my model", "model review".
Generate professional client-facing performance reports with portfolio returns, allocation breakdowns, and market commentary. Suitable for quarterly or annual distribution. Triggers on "client report", "performance report", "quarterly report for [client]", "generate reports", or "client statement".
Take nicepkg/stock-screener from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.