Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Screen US stocks using William O'Neil's CANSLIM growth stock methodology. Use when user requests CANSLIM stock screening, growth stock analysis, momentum stock identification, or wants to find stocks with strong earnings and price momentum following O'Neil's investment system.
.claude/skills/nicepkg-canslim-screener/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 143% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 189% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 250% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 276% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 209% | 0% |
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: Current Earnings, Annual Growth, Newness/New Highs, Supply/Demand, Leadership/RS Rank, Institutional Sponsorship, and Market Direction.
Phase 2 implements 6 of 7 components (C, A, N, S, I, M), representing 80% of the full methodology. This phase adds critical volume analysis (S) and institutional ownership tracking (I) to the Phase 1 foundation.
Two-Stage Approach:
Key Features:
Phase 2 Component Weights (Renormalized for 6 components):
Future Phases:
Explicit Triggers:
Implicit Triggers:
When NOT to Use:
Check if user has FMP API key configured:
bash# 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:
bashpip 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):
bashpython3 skills/canslim-screener/scripts/screen_canslim.py
Option B: Custom Universe User provides specific symbols or sector:
bashpython3 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 2):
Run the main screening script with appropriate parameters:
bashcd /Users/takueisaotome/PycharmProjects/claude-trading-skills/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 ../../../
Script Workflow (Phase 2):
Expected Execution Time (Phase 2):
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:
bash# 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 2):
New Component Details in Report:
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 2 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:
markdown# CANSLIM Stock Screening Results (Phase 2) **Date:** YYYY-MM-DD **Market Condition:** [Trend] - M Score: [X]/100 **Stocks Analyzed:** [N] **Components:** C, A, N, S, I, M (6 of 7) ## 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] - 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 2 (C, A, N, S, I, M components - 80% coverage). Phase 3 will add L component for full 7-component CANSLIM.
scripts/)Main Scripts:
screen_canslim.py - Main orchestrator scriptpython3 screen_canslim.py --api-key KEY [options]fmp_client.py - FMP API client wrapperget_income_statement(), get_quote(), get_historical_prices(), get_institutional_holders()finviz_stock_client.py - Finviz web scraping client ← NEWget_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) ← NEWinstitutional_calculator.py - I component (Institutional) ← NEWmarket_calculator.py - M component (Market Direction)Supporting Modules:
scorer.py - Composite score calculationreport_generator.py - Output generationreferences/)Knowledge Bases:
canslim_methodology.md (27KB) - Complete CANSLIM explanation ← Updated for Phase 2scoring_system.md (21KB) - Technical scoring specification ← Updated for Phase 2fmp_api_endpoints.md (18KB) - API integration guide ← Updated for Phase 2interpretation_guide.md (18KB) - User guidanceHow to Use References:
canslim_methodology.md first to understand O'Neil's system (now includes S and I)interpretation_guide.md when analyzing resultsscoring_system.md if scores seem unexpectedfmp_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 lxmlSolutions:
bash# 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 2 implementing 6 of 7 CANSLIM components:
Implications:
Score Conversion:
Automatic Fallback System:
sharesOutstanding, Finviz automatically activatesData Source Priority:
Tested Reliability:
Phase 3 (Planned):
Phase 4 (Planned):
This screener is for educational and informational purposes only.
Version: Phase 2 Last Updated: 2026-01-12 API Requirements: FMP API (free tier sufficient) + BeautifulSoup/requests/lxml for Finviz Execution Time: ~1 minute 40 seconds for 40 stocks Output Formats: JSON + Markdown Components Implemented: C, A, N, S, I, M (6 of 7, 80% coverage)
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 32,458 | 27,023 | -17% | 1 | 1 | 0% | 5,632 | 6,644 | +18% | 0 | 0 | — |
case-02 | fail→fail | 23,743 | 6,782 | -71% | 1 | 1 | 0% | 3,839 | 6,605 | +72% | 0 | 0 | — |
case-03 | fail→fail | 20,599 | 5,801 | -72% | 1 | 1 | 0% | 3,393 | 6,585 | +94% | 0 | 0 | — |
case-04 | fail→pass | 18,580 | 7,724 | -58% | 1 | 1 | 0% | 3,082 | 7,491 | +143% | 0 | 0 | — |
case-05 | fail→pass | 22,414 | 19,405 | -13% | 1 | 1 | 0% | 3,236 | 9,357 | +189% | 0 | 0 | — |
case-06 | fail→pass | 16,062 | 23,398 | +46% | 1 | 1 | 0% | 2,745 | 9,614 | +250% | 0 | 0 | — |
case-07 | fail→fail | 12,326 | 9,420 | -24% | 1 | 1 | 0% | 2,016 | 7,831 | +288% | 0 | 0 | — |
case-08 | fail→fail | 16,692 | 13,797 | -17% | 1 | 1 | 0% | 2,696 | 8,665 | +221% | 0 | 0 | — |
case-09 | fail→pass | 12,454 | 6,616 | -47% | 1 | 1 | 0% | 1,937 | 7,282 | +276% | 0 | 0 | — |
case-10 | fail→pass | 14,545 | 5,177 | -64% | 1 | 1 | 0% | 2,322 | 7,181 | +209% | 0 | 0 | — |
case-11 | fail→pass | 11,583 | 3,204 | -72% | 1 | 1 | 0% | 1,712 | 6,851 | +300% | 0 | 0 | — |
case-12 | fail→pass | 11,429 | 8,437 | -26% | 1 | 1 | 0% | 1,813 | 7,590 | +319% | 0 | 0 | — |
case-13 | fail→pass | 11,418 | 3,185 | -72% | 1 | 1 | 0% | 1,734 | 6,837 | +294% | 0 | 0 | — |
case-14 | fail→pass | 14,832 | 3,795 | -74% | 1 | 1 | 0% | 2,535 | 7,017 | +177% | 0 | 0 | — |
case-20 | pass→pass | 14,104 | 7,293 | -48% | 1 | 1 | 0% | 2,232 | 7,579 | +240% | 0 | 0 | — |
case-15 | fail→pass | 12,492 | 4,288 | -66% | 1 | 1 | 0% | 1,846 | 7,059 | +282% | 0 | 0 | — |
case-16 | pass→pass | 8,244 | 4,693 | -43% | 1 | 1 | 0% | 1,181 | 6,988 | +492% | 0 | 0 | — |
case-17 | fail→pass | 5,294 | 2,344 | -56% | 1 | 1 | 0% | 925 | 6,711 | +626% | 0 | 0 | — |
case-18 | fail→pass | 20,153 | 13,623 | -32% | 1 | 1 | 0% | 3,003 | 8,536 | +184% | 0 | 0 | — |
case-19 | fail→fail | 8,713 | 4,000 | -54% | 1 | 1 | 0% | 1,252 | 6,943 | +455% | 0 | 0 | — |
case-21 | fail→pass | 15,127 | 3,094 | -80% | 1 | 1 | 0% | 2,584 | 6,884 | +166% | 0 | 0 | — |
case-22 | pass→pass | 9,240 | 4,635 | -50% | 1 | 1 | 0% | 1,536 | 7,050 | +359% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 19 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +59 percentage points is the difference between those two pass rates over the 19 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.