The Volatility Contraction Pattern (VCP) is Mark Minervini's approach to identifying stocks ready to break out. A stock in a Stage 2 uptrend forms a series of price contractions, each tighter than the last, as supply dries up. The breakout from the final contraction is the entry. Minervini described this methodology in Trade Like a Stock Market Wizard and Think & Trade Like a Champion.
Shibui Finance lets you describe these criteria in plain English and check them across nearly 10,000 US stocks. Claude pulls SMA values, ATR, volume data, and prices to evaluate each condition. This guide walks through the methodology step by step. To jump straight to running the screen, use the VCP Screener.
What is a Volatility Contraction Pattern?
Minervini's framework starts with Stan Weinstein's four-stage model. Every stock cycles through Stage 1 (basing), Stage 2 (advancing), Stage 3 (topping), and Stage 4 (declining). The VCP screen focuses exclusively on Stage 2: stocks in confirmed uptrends.
Within Stage 2, a stock does not go straight up. It pauses, digests gains, and forms bases. A VCP is a specific type of base where each successive pullback is shallower than the one before. For example, the first correction might be 25%, the second 15%, the third 8%. Volume declines through each contraction. When the final contraction is very tight (3-5% range) on low volume, the "pivot point" is set. A breakout above this pivot on increasing volume is the buy signal.
The key conditions, which Minervini calls the "trend template," are:
- Price above the 150-day SMA
- Price above the 200-day SMA
- The 200-day SMA trending up (higher than it was one month ago)
- Price within 25% of the 52-week high
- Price at least 30% above the 52-week low
- Relative strength: the stock outperforming the index
- Contracting price ranges with declining volume
Criteria 1 through 5 are straightforward filters. Criterion 6 (relative strength) can be approximated by comparing the stock's performance to SPY over a lookback period. Criterion 7 (the contraction itself) is what makes the pattern, and where this guide focuses.
The data you need
Shibui has pre-computed columns for most of these checks:
- Moving averages: SMA at any period (50, 150, 200) and EMA in the technical_indicators table
- ATR (Average True Range): atr_14 in technical_indicators, measures daily volatility
- RSI, ADX, MACD, Bollinger Bands: additional trend and momentum indicators
- Volume: daily volume in stock_quotes, volume moving averages in technical_indicators
- 52-week high/low: computed from the daily prices in stock_quotes
- Fundamentals: quarterly earnings, revenue, margins, and cash flow in financial statement tables
What Shibui does not have: a pre-computed relative strength ranking versus the S&P 500. Claude can compute this from the raw prices of any stock versus SPY, but it adds a step to the query. There is also no built-in "VCP count" or contraction stage label. You describe the numeric criteria, and Claude evaluates them.
Step 1: Filter for the trend template
Start with the preconditions. Any stock that fails the trend template is not a VCP candidate regardless of how tight its base looks.
"Find stocks with market cap above $500M where the current price is above both the 150-day and 200-day SMA, the 200-day SMA is higher than it was 22 trading days ago, the price is within 25% of the 52-week high, and the price is at least 30% above the 52-week low."
This returns the universe of stocks passing the trend template. The 150/200-day SMA values come directly from the technical_indicators table. The 52-week high and low are computed from the last 252 trading days of price data. The "200-day SMA rising" check compares today's value to the value from roughly one month ago.
The result is typically 200-500 stocks, depending on market conditions. In a broad bull market, more stocks pass. In a correction, the universe shrinks. This is by design: the trend template keeps you on the right side of the market cycle.
Step 2: Find the contraction
The trend template identifies stocks in uptrends. The contraction filter finds which of those are building tight bases right now.
ATR as a percentage of price is the simplest proxy for contraction. When a stock's daily range narrows relative to its price, the ATR/price ratio drops. You can also compare the recent range (last 5-10 days) to a longer baseline (last 20-50 days) to see if volatility is compressing.
"From the stocks passing the trend template, find those where the 14-day ATR divided by the current price is below 2.5%, and the average daily volume over the last 10 days is below 70% of the 50-day average volume. Sort by ATR/price ratio ascending."
The ATR/price filter targets stocks with compressed daily ranges. The volume filter finds declining activity during the base. Together, they approximate the "tight, low-volume contraction" that defines the setup. Stocks at the top of this list have the tightest ranges on the quietest volume, which is where Minervini looks for the pivot.
Adjust the thresholds based on market conditions. In low-volatility markets, 2.5% ATR/price might be too loose; try 1.5%. In volatile markets, 3-4% may be appropriate. There is no universal number. The key is that the current ATR is below its own recent average.
Step 3: Add fundamental quality filters
Minervini emphasizes that the best VCP setups occur in stocks with strong earnings acceleration. The price pattern is the timing mechanism; the fundamentals determine whether the stock deserves a position. This is where Shibui has an edge over chart-only tools: you combine the technical setup with earnings and revenue data in one pass.
"From the stocks passing the trend template with ATR/price below 3%, keep those where EPS grew year-over-year in the latest quarter, revenue grew above 15% year-over-year, and the stock has positive free cash flow. Show the P/E ratio and analyst EPS estimate for context."
Claude checks the quarterly financial statements for earnings and revenue growth, the cash flow statement for free cash flow, and the valuation table for P/E. The result is a list of technically ready stocks with strong fundamentals. On MarketSmith, you get O'Neil-style EPS and RS ratings. On Shibui, you define the fundamental criteria yourself.
Screening by market cap tiers
VCP setups behave differently across market cap segments. Small caps ($300M-$2B) tend to form tighter bases with more volatile breakouts. Large caps ($50B+) form wider bases that take longer to resolve. Some traders run separate screens per tier with different thresholds.
"Run the VCP screen across three market cap tiers: mid-small ($300M to $20B), large ($50B to $200B), and mega ($200B+). For each tier, find stocks passing the trend template with ATR/price below 3%. Show the top 10 per tier sorted by proximity to 52-week high."
This mirrors what experienced VCP traders actually do. The thresholds can be adjusted per tier: tighter ATR filters for large caps (which naturally have lower volatility), looser for small caps.
What Shibui cannot do
Shibui does not detect VCP patterns visually or algorithmically. It provides the numeric criteria (SMA, ATR, volume, prices) and Claude checks your thresholds against the data. A pattern recognition system like MarketSmith can identify the specific contraction count (T1, T2, T3) and rate the base quality. Shibui cannot.
There are no real-time alerts. The data is end-of-day, updated after market close. You screen yesterday's data, not today's intraday action. If you want to be notified the moment a stock breaks out of a contraction, use TradingView alerts or MarketSmith.
There is no pre-computed relative strength ranking. Claude can compute the performance of a stock versus SPY over any lookback period, but it is not the same as O'Neil's proprietary RS Rating or IBD's composite ratings. It is a simpler, self-defined version.
Data is US equities only (NYSE and NASDAQ), end-of-day, not institutional grade. For full details on coverage and known limitations, see the data sources page. For the related Darvas box pattern, see the Darvas box screener.
Frequently asked questions
Can AI screen for VCP patterns?
Shibui Finance connects to Claude and lets you describe VCP criteria in plain English. Claude checks SMA alignment, 52-week high proximity, ATR contraction, and volume trends across nearly 10,000 US stocks. It does not detect the pattern visually; it checks the numeric criteria that define the setup.
What data do I need for a VCP screen?
You need moving averages (150-day and 200-day SMA), 52-week high and low prices, ATR or daily price ranges for contraction measurement, volume and volume moving averages, and optionally fundamental data (earnings, revenue growth) for quality filters. Shibui has all of these as pre-computed columns.
How do I combine VCP screening with fundamental filters?
Describe both in the same request. For example: "Screen for stocks in a Minervini trend template with revenue growth above 20% and positive earnings." Claude checks the technical setup and fundamental criteria in one pass, rather than making you cross-reference two tools.
Is this a replacement for MarketSmith?
No. MarketSmith has built-in pattern recognition, proprietary RS ratings, and automated alerts. Shibui does not detect patterns automatically. What Shibui does is let you define the numeric criteria yourself, add fundamental filters in the same query, and run it for free. If you need automated daily pattern detection, MarketSmith or a custom TradingView Pine Script is the better tool.