What is a VCP?
A base where each pullback is shallower than the last, usually two to four contractions with each about half the previous depth.
Guide · Trading
A base is a pause in a trend where shares change hands. A volatility contraction pattern is a base whose swings get progressively smaller. The structure is real and easy to see. Whether it pays is a separate question, and my own testing says it roughly did not.
A base is a sideways or corrective range that interrupts a prior advance. Mechanically it is a transfer: holders who bought lower and want out sell into buyers who are willing to pay today's price. The range persists until one side runs out of inventory or patience.
Three things describe any base and you should be able to state all three before calling something a base:
The volatility contraction pattern, popularised by Mark Minervini, is a base in which each successive pullback is smaller than the one before it. The idea is that supply is being exhausted in measurable steps: fewer sellers appear at each pullback, so each dip gets shallower.
A worked count on a hypothetical base:
| Contraction | High | Low | Depth | Reading |
|---|---|---|---|---|
| T1 | 100.00 | 82.00 | 18.0% | First shakeout, widest |
| T2 | 97.00 | 88.30 | 9.0% | Roughly half of T1 |
| T3 | 96.00 | 91.70 | 4.5% | Roughly half of T2 |
| Pivot | 96.00 | — | — | Break above the T3 high |
That is a 3T base: three contractions, each about half the previous depth. Two to four contractions is the usual count. More than five and you are almost certainly drawing the ones you want to see.
The volume side of the pattern matters as much as the price side. Through a genuine contraction, volume should fall away toward the right edge of the base. The shorthand is VDU, volume dry-up: the final contraction trades on notably below-average volume, often 30% to 50% under the 50-day average.
The reasoning is straightforward. If the last pullback is shallow and almost nobody traded it, there is very little supply left at that price. A shallow pullback on heavy volume says the opposite: plenty of people are still selling, they are just being absorbed for now.
The pivot is the high of the final contraction. The mechanical entry is a break above it, ideally on volume expanding well above average, because a breakout without volume is a price move without participation.
Entry = pivot + small buffer Stop = below the low of the final contraction 1R = entry − stop Size = (account × risk %) ÷ 1RNote the ordering. The structure defines the stop, the stop defines 1R, and 1R defines the size. Tight final contractions are attractive precisely because they make 1R small, which lets you take a normal-sized position without oversizing risk. The arithmetic is in the R-multiple guide.
This is the part most write-ups omit. I built a screener and a no-lookahead backtest engine, then ran my swing setups through walk-forward testing rather than an in-sample fit. The VCP-style contraction setup came out roughly breakeven. Not a disaster, not an edge — after costs there was nothing there worth sizing.
| Setup | Walk-forward result | Verdict |
|---|---|---|
| AVWAP reclaim | +0.117R over 4,933 trades (95% CI +0.057 to +0.174) | Kept — the only survivor. An earlier +0.23R on 101 trades did not survive my own re-test |
| VCP-style contraction | roughly breakeven | Not traded mechanically |
| Gap / opening-range-breakout proxy | −0.28R | Dropped |
Breakeven does not mean the pattern is fake. It means my mechanical encoding of it, on my universe, over my test window, did not produce an edge. Discretionary traders who read context, liquidity, and market environment may do better. But if you cannot express a setup mechanically, you also cannot prove it works, and the honest position is to say so.
Two filters I expected to rescue it — a market-regime filter and a normalised-momentum-lag filter — were tested on the same data and cut expectancy, so both were rejected. How the testing was run →
Educational content, not financial advice. No live profit-and-loss figures are claimed anywhere on this site; backtest and walk-forward results are always labelled as such. Full terms: /terms.html
FAQ
A base where each pullback is shallower than the last, usually two to four contractions with each about half the previous depth.
Measure each high-to-low pullback as a percentage. 18%, then 9%, then 4.5% is a 3T base. Counting six means you are drawing what you want.
Volume falling 30-50% under the 50-day average in the final contraction. Shallow dip plus light volume means little supply left.
The high of the final contraction, taken on expanding volume. The stop goes under that contraction's low, and that defines your size.
In my walk-forward test it came out roughly breakeven — no edge worth sizing. Only the AVWAP reclaim survived, at +0.117R over 4,933 trades.
Undercut-and-rally, breakouts on thin volume, and late-stage bases. Plus the analyst drawing contractions onto charts that already worked.