PluginBench
Skill
Pass
Audit score 90

vcp-screener

tradermonty/claude-trading-skills

Screen S&P 500 for Mark Minervini's Volatility Contraction Pattern (VCP) setups or backtest historical patterns on individual tickers.

What is vcp-screener?

Identifies Stage 2 uptrend stocks forming tight bases with contracting volatility near breakout pivot points using Mark Minervini's VCP methodology. Use for real-time screening of breakout candidates with defined risk, or historical single-ticker analysis to study past VCP formations and their forward outcomes.

  • Screen S&P 500 stocks (or custom universe) for active VCP setups with execution state and composite quality scores
  • Detect every historical VCP in a ticker's multi-year price history with forward-outcome stats (breakout, stop-hit, timeout, max gain/loss)
  • Identify Stage 2 uptrend stocks with contracting volatility, tight bases, and defined pivot/stop-loss levels
  • Filter by Minervini strict mode (Pre-breakout or Breakout states only) for pure setups
  • Customize VCP detection parameters (contraction count, T1 depth, volume ratio, trend score) for backtesting research
  • Generate timestamped JSON and Markdown reports with pattern type, execution state, and trade setup details

How to install vcp-screener

npx skills add https://github.com/tradermonty/claude-trading-skills --skill vcp-screener
Prerequisites
  • FMP (Financial Modeling Prep) API key set as FMP_API_KEY environment variable or passed via --api-key flag
  • Free tier (250 calls/day) sufficient for default screening; paid tier recommended for full S&P 500 screening
Claude Code
Cursor
Windsurf
Cline

How to use vcp-screener

  1. 1.Install the skill via npx skills add https://github.com/tradermonty/claude-trading-skills --skill vcp-screener
  2. 2.Set your FMP API key: export FMP_API_KEY=your_key or pass --api-key flag
  3. 3.Run default S&P 500 screening: python3 skills/vcp-screener/scripts/screen_vcp.py --output-dir skills/vcp-screener/scripts
  4. 4.(Optional) Run strict mode for Minervini-pure setups: add --strict flag
  5. 5.(Optional) Run historical single-ticker mode: python3 skills/vcp-screener/scripts/screen_vcp.py --history --ticker SYMBOL --output-dir reports/
  6. 6.Review generated JSON and Markdown reports; consult references/vcp_methodology.md and references/scoring_system.md for interpretation
  7. 7.Filter results by execution_state (Pre-breakout / Breakout = actionable) and composite_score rating (90+ = Textbook, 80–89 = Strong, etc.)
  8. 8.Size trades based on execution state and rating; use pivot price and stop-loss from output for trade setup

Use cases

Good for
  • Real-time screening: find top VCP candidates in S&P 500 ready to break out with defined risk
  • Historical backtesting: walk 5–10 years of a single ticker (e.g., TSLA, NVDA) and measure every VCP's forward performance
  • Pattern study: analyze how often historical VCPs broke out vs. stopped out, and over what timeframe
  • Watchlist building: identify stocks in Early-post-breakout or Extended state to monitor for next base formation
  • Strict Minervini setups: run with --strict flag to return only textbook Pre-breakout or Breakout patterns
Who it's for
  • Swing traders and momentum traders using Minervini's Trend Template methodology
  • Quantitative researchers backtesting volatility contraction breakout strategies
  • Technical analysts studying historical VCP pattern success rates and forward outcomes
  • Portfolio managers screening for Stage 2 uptrend candidates with tight risk/reward setups

vcp-screener FAQ

What is the difference between real-time screening and historical mode?

Real-time screening (default) analyzes current S&P 500 quotes to find active VCP setups ready to trade now. Historical mode (--history --ticker SYM) walks a ticker's multi-year price history and detects every VCP that ever formed, attaching forward-outcome stats (breakout %, days-to-outcome, max gain/loss) for pattern study and backtesting—not for live trading.

What API costs should I expect?

Default screening uses ~200 FMP API calls (top 100 candidates). Free tier allows 250/day, so one screening fits comfortably. Full S&P 500 screening requires a paid tier. Historical single-ticker mode uses only 2 API calls (ticker + SPY history), making it very efficient for backtesting.

What does 'execution_state' mean and which states are tradable?

Execution state indicates the VCP's current phase: Pre-breakout and Breakout are active entry windows (tradable now); Early-post-breakout means the breakout is underway but above ideal entry (reduced size or wait for pullback); Extended/Overextended means the trade is missed (add to watchlist); Damaged/Invalid means the setup is invalidated (do not enter).

How do I interpret the composite_score and rating?

Composite score (0–100) reflects pattern quality. Textbook VCP (90+) = buy aggressively; Strong (80–89) = buy at standard size; Good (70–79) = buy on volume confirmation; Developing (60–69) = add to watchlist; Weak (<60) = skip or monitor only. Always pair score with execution_state—a high-scoring pattern in Overextended state is not actionable now.

Can I customize VCP detection sensitivity for my own research?

Yes. Use flags like --min-contractions, --t1-depth-min, --breakout-volume-ratio, --trend-min-score, --atr-multiplier, and --contraction-ratio to tune pattern detection. Higher thresholds find fewer but higher-quality patterns; lower thresholds are more sensitive. Useful for backtesting different rule sets.

Full instructions (SKILL.md)

Source of truth, from tradermonty/claude-trading-skills.


name: vcp-screener description: Screen S&P 500 stocks for Mark Minervini's Volatility Contraction Pattern (VCP) and detect historical VCPs in a single ticker's price path. Identifies Stage 2 uptrend stocks forming tight bases with contracting volatility near breakout pivot points; in historical single-ticker mode walks a multi-year history and emits every VCP that formed with forward-outcome stats (breakout / stop-hit / timeout). Use when user requests VCP screening, Minervini-style setups, tight base patterns, volatility contraction breakout candidates, Stage 2 momentum stock scanning, or historical VCP pattern study on a specific ticker (e.g. FIX, TSLA).

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
  • User asks "find every historical VCP in <TICKER>" or wants to study one ticker's past VCP setups with forward outcomes (--history --ticker SYM)

Prerequisites

  • FMP API key (set FMP_API_KEY environment 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

Strict Mode (Minervini pure setup)

Only return stocks with valid_vcp=True AND execution_state in (Pre-breakout, Breakout):

python3 skills/vcp-screener/scripts/screen_vcp.py --strict --output-dir reports/

Historical single-ticker mode

Walk one ticker's multi-year history, detect every VCP that ever formed, and attach forward-outcome stats (breakout / stop-hit / timeout, days-to-outcome, max gain, max loss) per detection. Useful for pattern study and backtesting context — not a real-time screener.

# Default: scan ~5 years (1260 trading days), 5-day stride, 60-day outcome window
python3 skills/vcp-screener/scripts/screen_vcp.py \
  --history --ticker FIX --output-dir reports/

# Custom scan length: 750 trading days (~3 years), 90-day outcome window
python3 skills/vcp-screener/scripts/screen_vcp.py \
  --history 750 --ticker TSLA \
  --stride-days 5 --outcome-days 90 \
  --output-dir reports/

# Long scan: 10 years (2520 trading days)
python3 skills/vcp-screener/scripts/screen_vcp.py \
  --history 2520 --ticker NVDA --output-dir reports/

Outputs (timestamped):

  • vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.json — timeline of detections with full analyzer payload + forward_outcome per detection + summary stats.
  • vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.md — human-readable timeline.

Mode-specific flags:

ParameterDefaultRangeEffect
--history [DAYS](off) / 1260 if bare100-5040Enable historical mode; optionally specify trading-day scan window (requires --ticker)
--ticker SYM——Ticker to scan
--stride-days51-60Trading-day step between as-of cursor positions
--outcome-days605-252Forward window evaluated per detection

Notes:

  • Two FMP API calls per scan (ticker + SPY history), not 100+ like the cross-sectional pipeline.
  • marketCap and absolute RS percentile reflect the ticker in isolation, not against the live screening universe — use this report for pattern study, not portfolio sizing.
  • Detections are deduplicated by (T1_high_date, last_low_date, pivot) so the same VCP isn't reported repeatedly as the cursor ages.

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/
ParameterDefaultRangeEffect
--min-contractions22-4Higher = fewer but higher-quality patterns
--t1-depth-min10.0%1-50Higher = excludes shallow first corrections
--breakout-volume-ratio1.5x0.5-10Higher = stricter volume confirmation
--trend-min-score850-100Higher = stricter Stage 2 filter
--atr-multiplier1.50.5-5Lower = more sensitive swing detection
--contraction-ratio0.700.1-1Lower = requires tighter contractions
--min-contraction-days51-30Higher = longer minimum contraction
--lookback-days12030-365Longer = finds older patterns
--max-sma200-extension50.0%—SMA200 distance threshold for Overextended state and penalty
--wide-and-loose-threshold15.0%—Final contraction depth above which wide-and-loose flag triggers
--strictoff—Minervini strict mode: only Pre-breakout or Breakout with valid VCP

Step 2: Review Results

  1. Read the generated JSON and Markdown reports
  2. Load references/vcp_methodology.md for pattern interpretation context
  3. Load references/scoring_system.md for score threshold guidance

Step 3: Present Analysis

For each top candidate, present:

  • Quality (composite_score / rating) — how well-formed is the VCP pattern?
  • Execution State (execution_state) — is it buyable now? (Pre-breakout / Breakout = actionable)
  • Pattern Type (pattern_type) — Textbook VCP / VCP-adjacent / Post-breakout / Extended Leader / Damaged
  • ★ marker if a State Cap was applied (raw score was downgraded)
  • Contraction details (T1/T2/T3 depths and ratios)
  • Trade setup: pivot price, stop-loss, risk percentage
  • Volume dry-up ratio and breakout_volume_score
  • Relative strength rank

Step 4: Provide Actionable Guidance

By Execution State (primary filter):

  • Pre-breakout / Breakout: Pattern is in the active entry window — apply rating-based sizing
  • Early-post-breakout: Breakout underway but above ideal entry — reduced size or wait for pullback
  • Extended / Overextended: Trade missed — add to watchlist for next base
  • Damaged / Invalid: Setup invalidated — do not enter

By Rating (secondary, after state confirms actionability):

  • Textbook VCP (90+): Buy at pivot with aggressive sizing (1.5-2x)
  • Strong VCP (80-89): Buy at pivot with standard sizing (1x)
  • Good VCP (70-79): Buy on volume confirmation above pivot (0.75x)
  • Developing (60-69): Add to watchlist, wait for tighter contraction
  • Weak/No VCP (<60): Monitor only or skip

3-Phase Pipeline

  1. Pre-Filter - Quote-based screening (price, volume, 52w position) ~101 API calls
  2. Trend Template - 7-point Stage 2 filter with 260-day histories ~100 API calls
  3. VCP Detection - Pattern analysis, scoring, report generation (no additional API calls)

Output

  • vcp_screener_YYYY-MM-DD_HHMMSS.json - Structured results
  • vcp_screener_YYYY-MM-DD_HHMMSS.md - Human-readable report

Resources

  • references/vcp_methodology.md - VCP theory and Trend Template explanation
  • references/scoring_system.md - Scoring thresholds and component weights
  • references/fmp_api_endpoints.md - API endpoints and rate limits