From tradermonty-claude-trading-skills
Screens US stocks using all 7 CANSLIM components with composite scoring (0-100), weighted RS formula, and bear market protection.
How this skill is triggered — by the user, by Claude, or both
Slash command
/tradermonty-claude-trading-skills:canslim-screenerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill screens US stocks using William O'Neil's proven CANSLIM methodology, a systematic approach for identifying growth stocks with strong fundamentals and price momentum. CANSLIM analyzes 7 key components: **C**urrent Earnings, **A**nnual Growth, **N**ewness/New Highs, **S**upply/Demand, **L**eadership/RS Rank, **I**nstitutional Sponsorship, and **M**arket Direction.
references/canslim_methodology.mdreferences/fmp_api_endpoints.mdreferences/interpretation_guide.mdreferences/scoring_system.mdscripts/calculators/earnings_calculator.pyscripts/calculators/growth_calculator.pyscripts/calculators/institutional_calculator.pyscripts/calculators/leadership_calculator.pyscripts/calculators/market_calculator.pyscripts/calculators/new_highs_calculator.pyscripts/calculators/supply_demand_calculator.pyscripts/check_institutional_endpoint.pyscripts/finviz_stock_client.pyscripts/fmp_client.pyscripts/report_generator.pyscripts/scorer.pyscripts/screen_canslim.pyscripts/tests/conftest.pyscripts/tests/test_canslim_fixes.pyscripts/tests/test_fmp_fallback.pyThis skill screens US stocks using William O'Neil's proven CANSLIM methodology, a systematic approach for identifying growth stocks with strong fundamentals and price momentum. CANSLIM analyzes 7 key components: Current Earnings, Annual Growth, Newness/New Highs, Supply/Demand, Leadership/RS Rank, Institutional Sponsorship, and Market Direction.
Phase 3 implements all 7 of 7 components (C, A, N, S, L, I, M), representing 100% of the full methodology.
Two-Stage Approach:
Key Features:
Phase 3.1 Component Weights (Original O'Neil weights):
Weighted RS Formula:
Weighted RS = 0.40 × rel_3m + 0.30 × rel_6m + 0.30 × rel_12m
Available periods are re-normalized when some are missing. Default benchmark is ^GSPC;
override with --rs-benchmark SPY/QQQ/IWM/....
Fallback hierarchy when multi-period data is incomplete:
error set.Future Phases:
Explicit Triggers:
Implicit Triggers:
When NOT to Use:
API Requirements:
export FMP_API_KEY=your_key_herePython Dependencies:
requests (FMP API calls)beautifulsoup4 (Finviz web scraping)lxml (HTML parsing)Installation:
pip install requests beautifulsoup4 lxml
Output Directory: reports/ (default) or custom via --output-dir
Generated Files:
canslim_screener_YYYY-MM-DD_HHMMSS.json - Structured data for programmatic usecanslim_screener_YYYY-MM-DD_HHMMSS.md - Human-readable reportReport Contents:
Rating Bands:
Check if user has FMP API key configured:
# Check environment variable
echo $FMP_API_KEY
# If not set, prompt user to provide it
Requirements:
requests (FMP API calls)beautifulsoup4 (Finviz web scraping)lxml (HTML parsing)Installation:
pip install requests beautifulsoup4 lxml
If API key is missing, guide user to:
export FMP_API_KEY=your_key_hereOption A: Default Universe (Recommended) Use top 40 S&P 500 stocks by market cap (predefined in script):
python3 skills/canslim-screener/scripts/screen_canslim.py
Option B: Custom Universe User provides specific symbols or sector:
python3 skills/canslim-screener/scripts/screen_canslim.py \
--universe AAPL MSFT GOOGL AMZN NVDA META TSLA
Option C: Sector-Specific User can provide sector-focused list (Technology, Healthcare, etc.)
API Budget Considerations (Phase 3):
--max-candidates 35 for free tier (35 × 7 + 3 = 248 calls), or upgrade to FMP Starter tier ($29.99/mo, 750 calls/day) for full 40-stock screeningRun the main screening script with appropriate parameters:
cd skills/canslim-screener/scripts
# Basic run (40 stocks, top 20 in report)
python3 screen_canslim.py --api-key $FMP_API_KEY
# Custom parameters
python3 screen_canslim.py \
--api-key $FMP_API_KEY \
--max-candidates 40 \
--top 20 \
--output-dir ../../../
# Custom RS benchmark (Phase 3.1)
python3 screen_canslim.py --rs-benchmark SPY
# Disable L component (saves per-stock 365-day fetch; L fixed at neutral 50)
python3 screen_canslim.py --disable-rs
Script Workflow (Phase 3 - Full CANSLIM):
Expected Execution Time (Phase 3):
Finviz Fallback Behavior:
sharesOutstanding unavailable✅ Using Finviz institutional ownership for NVDA: 68.3%The script generates two output files:
canslim_screener_YYYY-MM-DD_HHMMSS.json - Structured datacanslim_screener_YYYY-MM-DD_HHMMSS.md - Human-readable reportRead the Markdown report to identify top candidates:
# Find the latest report
ls -lt canslim_screener_*.md | head -1
# Read the report
cat canslim_screener_YYYY-MM-DD_HHMMSS.md
Report Structure (Phase 3 - Full CANSLIM):
Component Details in Report:
A new Summary Table appears above the candidate list in Phase 3.1 reports, showing rank, symbol, composite score, rating, RS rating, and RS percentile for quick scanning.
Review the top-ranked stocks and cross-reference with knowledge bases:
Reference Documents to Consult:
references/interpretation_guide.md - Understand rating bands and portfolio sizingreferences/canslim_methodology.md - Deep dive into component meanings (now includes S and I)references/scoring_system.md - Understand scoring formulas (Phase 3 weights)Analysis Framework:
For Exceptional+ stocks (90-100 points):
For Exceptional stocks (80-89 points):
For Strong stocks (70-79 points):
For Above Average stocks (60-69 points):
Bear Market Override:
Create a concise, actionable summary for the user:
Report Format:
# CANSLIM Stock Screening Results (Phase 3 - Full CANSLIM)
**Date:** YYYY-MM-DD
**Market Condition:** [Trend] - M Score: [X]/100
**Stocks Analyzed:** [N]
**Components:** C, A, N, S, L, I, M (7 of 7, 100% coverage)
## Market Summary
[2-3 sentences on current market environment based on M component]
[If bear market: WARNING - Consider raising cash allocation]
## Top 5 CANSLIM Candidates
### 1. [SYMBOL] - [Company Name] ⭐⭐⭐
**Score:** [X.X]/100 ([Rating])
**Price:** $[XXX.XX] | **Sector:** [Sector]
**Component Breakdown:**
- C (Earnings): [X]/100 - [EPS growth]% QoQ, [Revenue growth]% revenue
- A (Growth): [X]/100 - [CAGR]% 3yr EPS CAGR
- N (Newness): [X]/100 - [Distance]% from 52wk high
- S (Supply/Demand): [X]/100 - Up/Down Volume Ratio: [X.XX]
- L (Leadership): [X]/100 - 52wk: [+X.X]% ([+X.X]% vs S&P) RS: [XX]
- I (Institutional): [X]/100 - [N] holders, [X.X]% ownership [⭐ Superinvestor if present]
- M (Market): [X]/100 - [Trend]
**Interpretation:** [Rating description and guidance]
**Weakest Component:** [X] ([score])
**Data Source Note:** [If Finviz used: "Institutional data from Finviz"]
[Repeat for top 5 stocks]
## Investment Recommendations
**Immediate Buy List (90+ score):**
- [List stocks with exceptional+ ratings]
- Position sizing: 15-20% each
**Strong Buy List (80-89 score):**
- [List stocks with exceptional ratings]
- Position sizing: 10-15% each
**Watchlist (70-79 score):**
- [List stocks with strong ratings]
- Buy on pullback
## Risk Factors
- [Identify any quality warnings from components]
- [Market condition warnings]
- [Sector concentration risks if applicable]
- [Data source reliability notes if Finviz heavily used]
## Next Steps
1. Conduct detailed fundamental analysis on top 3 candidates
2. Check earnings calendars for upcoming reports
3. Review technical charts for entry timing
4. [If bear market: Wait for market recovery before deploying capital]
---
**Note:** This is Phase 3 (Full CANSLIM: C, A, N, S, L, I, M - 100% coverage).
scripts/)Main Scripts:
screen_canslim.py - Main orchestrator script
python3 screen_canslim.py --api-key KEY [options]fmp_client.py - FMP API client wrapper
get_income_statement(), get_quote(), get_historical_prices(), get_institutional_holders()finviz_stock_client.py - Finviz web scraping client ← NEW
get_institutional_ownership(), get_stock_data()Calculators (scripts/calculators/):
earnings_calculator.py - C component (Current Earnings)
growth_calculator.py - A component (Annual Growth)
new_highs_calculator.py - N component (Newness)
supply_demand_calculator.py - S component (Supply/Demand) ← NEW
leadership_calculator.py - L component (Leadership/Relative Strength)
institutional_calculator.py - I component (Institutional)
market_calculator.py - M component (Market Direction)
Supporting Modules:
scorer.py - Composite score calculation
report_generator.py - Output generation
references/)Knowledge Bases:
references/canslim_methodology.md (27KB) - Complete CANSLIM explanation
references/scoring_system.md (21KB) - Technical scoring specification (Phase 3)
references/fmp_api_endpoints.md (18KB) - API integration guide (Phase 3)
references/interpretation_guide.md (18KB) - User guidance
How to Use References:
references/canslim_methodology.md first to understand O'Neil's system (now includes S and I)references/interpretation_guide.md when analyzing resultsreferences/scoring_system.md if scores seem unexpectedreferences/fmp_api_endpoints.md for API troubleshooting or Finviz fallback issuesSymptoms:
ERROR: 429 Too Many Requests - Rate limit exceeded
Retrying in 60 seconds...
Causes:
Solutions:
--max-candidates 30 to lower API usageSymptoms:
ERROR: required libraries not found. Install with: pip install beautifulsoup4 requests lxml
Solutions:
# Install all required libraries
pip install requests beautifulsoup4 lxml
# Or install individually
pip install beautifulsoup4
pip install requests
pip install lxml
Symptoms:
Execution time: 2 minutes 30 seconds for 40 stocks (slower than expected)
Causes:
Solutions:
finviz_stock_client.py, change rate_limit_seconds=2.0 to 1.5 (risk: IP ban)Note: Finviz fallback adds ~2 seconds per stock but significantly improves I component accuracy (35 → 60-100 points).
Symptoms:
WARNING: Finviz request failed with status 403 for NVDA
⚠️ Using Finviz institutional ownership data - FMP shares outstanding unavailable. Finviz fallback also unavailable. Score reduced by 50%.
Causes:
Solutions:
Graceful Degradation:
Symptoms:
✓ Successfully analyzed 40 stocks
Top 5 Stocks:
1. AAPL - 58.3 (Average)
2. MSFT - 55.1 (Average)
...
Causes:
Solutions:
Symptoms:
⚠️ Revenue declining despite EPS growth (possible buyback distortion)
⚠️ Using Finviz institutional ownership data (68.3%) - FMP shares outstanding unavailable.
Interpretation:
Actions:
This is Phase 3 implementing all 7 of 7 CANSLIM components:
Implications:
Automatic Fallback System:
sharesOutstanding, Finviz automatically activatesData Source Priority:
Tested Reliability:
Phase 4 (Planned):
This screener is for educational and informational purposes only.
Version: Phase 3.1 (multi-period RS)
Last Updated: 2026-05-03
API Requirements: FMP API (free tier: up to 35 stocks; Starter tier recommended for 40 stocks) + BeautifulSoup/requests/lxml for Finviz
Execution Time: ~2 minutes for 40 stocks
Output Formats: JSON + Markdown (now includes Summary Table and schema_version: "3.1")
Components Implemented: C, A, N, S, L, I, M (7 of 7, 100% coverage)
Phase 3.1 additions: multi-period RS (3m/6m/12m), --rs-benchmark, --disable-rs,
new RS fields (rs_rating, rs_rank_percentile, rs_3m_return, rs_6m_return,
rs_12m_return, rs_benchmark, rs_benchmark_relative_return, rs_component_score,
benchmark_52w_performance).
npx claudepluginhub tradermonty/claude-trading-skillsScreens US stocks for high-quality dividend opportunities using value, yield, and growth criteria, with optional FINVIZ+FMP two-stage screening.
Systematic stock screening and investment idea sourcing using quantitative screens, thematic research, and pattern recognition. Use when looking for new long/short ideas.
Automates equity research: downloads concalls and presentations from screener.in, uploads to NotebookLM, generates tailored analysis queries by company and sector, outputs professional PDF deep-dive reports.