# Volatility Contraction Pattern

Also known as: VCP, Minervini.
A Volatility concept (Regime & compression) in the LuxAlgo Library, with 1 indicator implementation.

## What is a Volatility Contraction Pattern?

The Volatility Contraction Pattern (VCP) is Mark Minervini's name for a base in which each successive pullback is smaller than the last: a correction of, say, 20% is followed by one near 10%, then 5%, tightening from left to right through typically two to four contractions, occasionally five or six. Volume contracts along with price, ideally showing a clear volume dry-up near the end. The logic is supply absorption: each shallower dip means fewer sellers remain, until price sits coiled in a tight pivot area.

Minervini frames the VCP inside a qualifying uptrend (his trend-template criteria) and treats the breakout through the pivot on expanding volume as the entry, with risk defined under the final contraction. The pattern formalizes older base-reading traditions, from Wyckoff-style absorption to the cup-with-handle lineage, into a measurable footprint of shrinking swings and shrinking volume. Tightness improves the risk-reward framing; it does not make the breakout succeed.

Minervini, winner of the 1997 U.S. Investing Championship, set the pattern out in Trade Like a Stock Market Wizard (2013) and Think & Trade Like a Champion (2017) as a centerpiece of his SEPA methodology. He presents it less as a new discovery than as a precise description of how sound bases behave: the handle of William O'Neil's cup-with-handle, properly formed, is a contraction, and Wyckoff's absorption narrative is the same supply story told decades earlier. What Minervini added was the explicit sequence and the insistence that each contraction be measured.

Because the pattern is defined by shrinking movement, standard volatility tools can quantify it. [ATR](https://www.luxalgo.com/library/concept/atr/) declining through the base, Bollinger [BandWidth](https://www.luxalgo.com/library/concept/bandwidth/) compressing, a falling [volatility percentile](https://www.luxalgo.com/library/concept/volatility-percentile-rank/), or [Donchian channel](https://www.luxalgo.com/library/concept/donchian-channels/) width narrowing all translate the visual footprint into numbers. The broader [ATR expansion/contraction](https://www.luxalgo.com/library/concept/atr-expansion-contraction/) cycle explains why the setup exists: markets alternate between compression and expansion, and the VCP is a structured way of buying that turn inside an uptrend.

## How to identify a Volatility Contraction Pattern

The pattern is read from left to right across a base that forms after a meaningful advance.

1. Qualify the trend first: the stock should be in an established uptrend and trading in the upper portion of its yearly range before any base is considered.
2. Mark each pullback within the base from swing high to swing low and measure its depth in percent.
3. Check the sequence: each successive contraction should be meaningfully shallower than the one before, commonly near half its depth, with two to four contractions typical.
4. Confirm the volume signature: volume should shrink as the base tightens, with notably quiet sessions in the final contraction.
5. Define the pivot: the high of the final tight area is the actionable level, and a push through it on expanding volume completes the pattern.

## How it's calculated

VCP describes a base whose successive pullbacks shrink in size while volume dries up, ending in a tight pivot ahead of a breakout.

```
Depth_k = 100 × (High_k - Low_k) / High_k
Depth_{k+1} < Depth_k for each successive pullback
Guideline: Depth_{k+1} is roughly Depth_k / 2
Pivot = High_K
Volume dry up: V_t < SMA(V, n_v) through the final contraction
Entry trigger: C_t > Pivot with V_t > SMA(V, n_v)

  k: contraction index within the base, 1 = first pullback
  K: total number of contractions (typically 2 to 4, occasionally up to 6)
  High_k: swing high where contraction k begins
  Low_k: lowest low reached during contraction k
  Depth_k: depth of contraction k in percent
  Pivot: high of the final, tightest contraction, used as the buy point
  C_t: close (or last price) at bar t
  V_t: volume of bar t
  SMA(V, n_v): simple moving average of volume over n_v bars
  n_v: volume average length (commonly 50 days)
  t: bar index (daily bars in Minervini's usage)
```

Mark Minervini defines VCP by measurable properties rather than one equation, so automated detections differ across implementations.

Depths are measured from swing high to swing low within the base on a daily chart.

The halving ratio and the volume thresholds are guidelines, not strict rules.

## How traders use it

- As a base qualifier: within an established uptrend, successive pullback depths are measured, and the base qualifies when each contraction is meaningfully smaller than the prior one while volume dries up.
- As an entry trigger: buy the move through the pivot (the high of the final tight area) on clear volume expansion, with the stop under the last contraction's low so the risk stays small relative to the expected move.
- As a screening template: contraction counts, depth ratios, and volume trends can be computed programmatically, letting scanners surface VCP candidates across a large universe.
- For squeeze confluence: a [TTM Squeeze](https://www.luxalgo.com/library/concept/ttm-squeeze/) or [Bollinger Squeeze](https://www.luxalgo.com/library/concept/bollinger-squeeze/) condition during the final contractions adds an objective check that volatility really has contracted.
- For trade management: after entry the expectation is [range expansion](https://www.luxalgo.com/library/concept/range-expansion-contraction/); a breakout that immediately sinks back into the base contradicts the setup and is commonly cut quickly rather than given room.

## VCP vs other compression concepts

- **Bollinger Squeeze** (https://www.luxalgo.com/library/concept/bollinger-squeeze/): The squeeze is an indicator condition: band width at multi-period lows, wherever and however it happens. A VCP is a price-structure template with prerequisites: an uptrend, a stepped sequence of shallower pullbacks, and a volume signature. Most VCPs show a squeeze somewhere; few squeezes qualify as VCPs.
- **TTM Squeeze** (https://www.luxalgo.com/library/concept/ttm-squeeze/): TTM defines compression objectively as Bollinger Bands trading inside Keltner Channels and adds a momentum histogram for direction. It fires on any symbol in any regime, long or short, while the VCP is specifically a bullish continuation framework.
- **Range Expansion/contraction** (https://www.luxalgo.com/library/concept/range-expansion-contraction/): Expansion/contraction describes the general alternation every market cycles through, with no directional bias. The VCP is that cycle harnessed into a specific bullish setup: contraction inside an uptrend, bought at the moment expansion begins.

## FAQ

### How many contractions does a valid VCP need?

Minervini describes most bases as containing two to four contractions, occasionally five or six, each often roughly half the depth of the one before. The count matters less than the behavior: progressively shallower pullbacks, volume drying up, and a final tight area near the highs. A base that tightens cleanly with three contractions beats a sloppy one with five.

### Is a VCP the same as a cup and handle?

They overlap but are not identical. A cup and handle is a specific base shape, and its handle is frequently the final contraction of a VCP. The VCP is defined by the contraction sequence and volume signature rather than the silhouette, so it can appear within flat bases, cups, or other structures.

### What indicators help screen for VCPs?

Anything that scores compression against a symbol's own history: BandWidth near lookback lows, ATR falling relative to its past, or [realized volatility](https://www.luxalgo.com/library/concept/realized-volatility/) trending down, plus a declining volume trend. Community scripts also count contractions and depth ratios directly. Indicators shortlist candidates; the chart still has to qualify the structure.

### Where does the stop go on a VCP trade?

In Minervini's framework the stop conventionally sits under the low of the final contraction, the tightest structure in the base, which is what keeps the risk small relative to the expected move. If the final contraction is too wide for that stop, the base is not tight enough yet; the answer is to wait, not to widen the stop.

### Does the VCP work outside US growth stocks?

The mechanics, supply absorption and volatility compression, are not specific to equities, and traders apply the template to futures and crypto. The surrounding methodology, including trend templates and fundamental criteria, was developed on US stocks, so transfers to other markets are something to test rather than assume.

### What invalidates a VCP?

Pullbacks that widen instead of narrowing, heavy-volume declines inside the base, an undercut of a prior low that fails to recover quickly, or a pivot breakout on weak volume that falls back into the range. Once the sequence breaks, the base may still eventually resolve upward, but it is no longer this pattern and no longer carries its tight risk framing.

## Implementations in the Library

- Volatility Contraction Pattern (LuxAlgo): https://www.luxalgo.com/library/indicator/volatility-contraction-pattern/

## Related concepts

- Range Expansion/contraction: https://www.luxalgo.com/library/concept/range-expansion-contraction/
- Choppiness Index: https://www.luxalgo.com/library/concept/choppiness-index/
- NR4/NR7 Narrow-range Bars: https://www.luxalgo.com/library/concept/nr4-nr7-narrow-range-bars/
- Gap-volatility Relation: https://www.luxalgo.com/library/concept/gap-volatility-relation/
- Damiani Volatmeter: https://www.luxalgo.com/library/concept/damiani-volatmeter/
- Waddah Attar Explosion: https://www.luxalgo.com/library/concept/waddah-attar-explosion/
- Volatility Switch: https://www.luxalgo.com/library/concept/volatility-switch/
- Volatility Regime Classification: https://www.luxalgo.com/library/concept/volatility-regime-classification/
- Weekend/overnight Volatility Profile: https://www.luxalgo.com/library/concept/weekend-overnight-volatility-profile/
- Event-driven Volatility: https://www.luxalgo.com/library/concept/event-driven-volatility/

---

Source: https://www.luxalgo.com/library/concept/volatility-contraction-pattern/ (LuxAlgo Library, the encyclopedia of trading & technical analysis). Free to use with attribution: https://www.luxalgo.com/library/license/