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).
npx skills add https://github.com/BaggaT236/AI-Trading-Skills --skill vcp-screener
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.
past VCP setups with forward outcomes (--history --ticker SYM)
FMP_API_KEY environment variable or pass --api-key)--full-sp500)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
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/
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 fullanalyzer payload + forward_outcome per detection + summary stats.
vcp_history_<SYM>_<YYYY-MM-DD_HHMMSS>.md — human-readable timeline.Mode-specific flags:
| Parameter | Default | Range | Effect |
|-----------|---------|-------|--------|
| --history [DAYS] | (off) / 1260 if bare | 100-5040 | Enable historical mode; optionally specify trading-day scan window (requires --ticker) |
| --ticker SYM | — | — | Ticker to scan |
| --stride-days | 5 | 1-60 | Trading-day step between as-of cursor positions |
| --outcome-days | 60 | 5-252 | Forward window evaluated per detection |
Notes:
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.
(T1_high_date, last_low_date, pivot) sothe same VCP isn't reported repeatedly as the cursor ages.
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 | 10.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.70 | 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 |
| --max-sma200-extension | 50.0% | — | SMA200 distance threshold for Overextended state and penalty |
| --wide-and-loose-threshold | 15.0% | — | Final contraction depth above which wide-and-loose flag triggers |
| --strict | off | — | Minervini strict mode: only Pre-breakout or Breakout with valid VCP |
references/vcp_methodology.md for pattern interpretation contextreferences/scoring_system.md for score threshold guidanceFor each top candidate, present:
composite_score / rating) — how well-formed is the VCP pattern?execution_state) — is it buyable now? (Pre-breakout / Breakout = actionable)pattern_type) — Textbook VCP / VCP-adjacent / Post-breakout / Extended Leader / Damaged★ marker if a State Cap was applied (raw score was downgraded)By Execution State (primary filter):
By Rating (secondary, after state confirms actionability):
vcp_screener_YYYY-MM-DD_HHMMSS.json - Structured resultsvcp_screener_YYYY-MM-DD_HHMMSS.md - Human-readable reportreferences/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 limitsAutomatically organizes invoices and receipts for tax preparation by reading messy files, extracting key information, renaming them consistently, and sorting them into logical folders. Turns hours of manual bookkeeping into minutes of automated organization.
This skill calculates key financial ratios and metrics from financial statement data for investment analysis
This skill provides an advanced financial modeling suite with DCF analysis, sensitivity testing, Monte Carlo simulations, and scenario planning for investment decisions
This skill retrieves upcoming earnings announcements for US stocks using the Financial Modeling Prep (FMP) API. Use this when the user requests earnings calendar data, wants to know which companies are reporting earnings in the upcoming week, or needs a weekly earnings review. The skill focuses on mid-cap and above companies (over $2B market cap) that have significant market impact, organizing the data by date and timing in a clean markdown table format. Supports multiple environments (CLI, Desktop, Web) with flexible API key management.
Crypto wallet operations via the awal CLI — sign in, check balances, send USDC/ETH/POL/SOL, trade tokens, fund the wallet, and use the x402 payment protocol to discover paid services, pay for API calls, monetize an API, or query onchain data. Use whenever the user mentions signing in, login, authentication, wallet status, balance, address, sending money, paying someone, transferring tokens, ENS names, swapping/trading/converting tokens, funding/topping up/onramp, USDC, ETH, POL, SOL, the x402 bazaar, paid APIs, monetizing an endpoint, or querying onchain data on Base.
Access real-time and historical stock market data, forex rates, cryptocurrency prices, commodities, economic indicators, and 50+ technical indicators via the Alpha Vantage API. Use when fetching stock prices (OHLCV), company fundamentals (income statement, balance sheet, cash flow), earnings, options data, market news/sentiment, insider transactions, GDP, CPI, treasury yields, gold/silver/oil prices, Bitcoin/crypto prices, forex exchange rates, or calculating technical indicators (SMA, EMA, MACD, RSI, Bollinger Bands). Requires a free API key from alphavantage.co.
Braintree Automation: manage payment processing via Stripe-compatible tools for customers, subscriptions, payment methods, and transactions
Coinbase Automation: list and manage cryptocurrency wallets, accounts, and portfolio data via Coinbase CDP SDK
Take baggat236/vcp-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.