VCP Screener - Minervini Volatility Contraction Pattern
Screen S&P 500 stocks for Mark Minervini's Volatility Contraction Pattern (VCP), identifying Stage 2 uptrend stocks with contracting volatility near breakout pivot points.
When to Use
- User asks for VCP screening or Minervini-style setups
- User wants to find tight base / volatility contraction patterns
- User requests Stage 2 momentum stock scanning
- User asks for breakout candidates with defined risk
Prerequisites
- FMP API key (set
FMP_API_KEYenvironment variable or pass--api-key) - Free tier (250 calls/day) is sufficient for default screening (top 100 candidates)
- Paid tier recommended for full S&P 500 screening (
--full-sp500)
Workflow
Step 1: Prepare and Execute Screening
Run the VCP screener script:
# Default: S&P 500, top 100 candidates
python3 skills/vcp-screener/scripts/screen_vcp.py --output-dir skills/vcp-screener/scripts
# Custom universe
python3 skills/vcp-screener/scripts/screen_vcp.py --universe AAPL NVDA MSFT AMZN META --output-dir skills/vcp-screener/scripts
# Full S&P 500 (paid API tier)
python3 skills/vcp-screener/scripts/screen_vcp.py --full-sp500 --output-dir skills/vcp-screener/scripts
Advanced Tuning (for backtesting)
Adjust VCP detection parameters for research and backtesting:
python3 skills/vcp-screener/scripts/screen_vcp.py \
--min-contractions 3 \
--t1-depth-min 12.0 \
--breakout-volume-ratio 2.0 \
--trend-min-score 90 \
--atr-multiplier 1.5 \
--output-dir reports/
| Parameter | Default | Range | Effect |
|-----------|---------|-------|--------|
| --min-contractions | 2 | 2-4 | Higher = fewer but higher-quality patterns |
| --t1-depth-min | 8.0% | 1-50 | Higher = excludes shallow first corrections |
| --breakout-volume-ratio | 1.5x | 0.5-10 | Higher = stricter volume confirmation |
| --trend-min-score | 85 | 0-100 | Higher = stricter Stage 2 filter |
| --atr-multiplier | 1.5 | 0.5-5 | Lower = more sensitive swing detection |
| --contraction-ratio | 0.75 | 0.1-1 | Lower = requires tighter contractions |
| --min-contraction-days | 5 | 1-30 | Higher = longer minimum contraction |
| --lookback-days | 120 | 30-365 | Longer = finds older patterns |
Step 2: Review Results
- Read the generated JSON and Markdown reports
- Load
references/vcp_methodology.mdfor pattern interpretation context - Load
references/scoring_system.mdfor score threshold guidance
Step 3: Present Analysis
For each top candidate, present:
- VCP composite score and rating
- Contraction details (T1/T2/T3 depths and ratios)
- Trade setup: pivot price, stop-loss, risk percentage
- Volume dry-up ratio
- Relative strength rank
Step 4: Provide Actionable Guidance
Based on ratings:
- Textbook VCP (90+): Buy at pivot with aggressive sizing
- Strong VCP (80-89): Buy at pivot with standard sizing
- Good VCP (70-79): Buy on volume confirmation above pivot
- Developing (60-69): Add to watchlist, wait for tighter contraction
- Weak/No VCP (<60): Monitor only or skip
3-Phase Pipeline
- Pre-Filter - Quote-based screening (price, volume, 52w position) ~101 API calls
- Trend Template - 7-point Stage 2 filter with 260-day histories ~100 API calls
- VCP Detection - Pattern analysis, scoring, report generation (no additional API calls)
Output
vcp_screener_YYYY-MM-DD_HHMMSS.json- Structured resultsvcp_screener_YYYY-MM-DD_HHMMSS.md- Human-readable report
Resources
references/vcp_methodology.md- VCP theory and Trend Template explanationreferences/scoring_system.md- Scoring thresholds and component weightsreferences/fmp_api_endpoints.md- API endpoints and rate limits