Guide · Trading

VCP and bases, described honestly

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.


What is a base?

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:

  • Depth — the percentage from the high of the base to its lowest low. A 12% base and a 45% base are not the same object.
  • Duration — how many bars or weeks the range has lasted. Short bases after a long advance are usually late-stage.
  • Prior trend — a base only means anything after an advance. A sideways range after a nine-month decline is a downtrend resting.

What makes it a VCP

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:

ContractionHighLowDepthReading
T1100.0082.0018.0%First shakeout, widest
T297.0088.309.0%Roughly half of T1
T396.0091.704.5%Roughly half of T2
Pivot96.00Break 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.

Volume dry-up

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 and the buy point

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 %) ÷ 1R

Note 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.

Failure modes

  • Undercut and rally — price breaks the final low, stops out the obvious holders, then reverses back up. Painful and common.
  • Breakout on no volume — the pivot clears on below-average volume, drifts a few percent, and rolls back into the base.
  • Late-stage base — a third or fourth base after a long advance fails far more often than the first one out of a correction.
  • Wide, loose contractions — if T2 is not meaningfully tighter than T1, the pattern is a range, not a contraction.
  • Drawn to fit — the biggest failure mode is the analyst. Contractions are easy to find retrospectively on any chart that later went up.

What my own testing said

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.

SetupWalk-forward resultVerdict
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 contractionroughly breakevenNot traded mechanically
Gap / opening-range-breakout proxy−0.28RDropped

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 →

How to use bases anyway

  1. Use the structure for risk definition, which it is genuinely good at. The final contraction gives you a tight, non-arbitrary stop.
  2. Do not use the structure as a standalone edge claim until you have tested your version of it on your universe.
  3. Tag every base trade in your journal with the contraction count and whether VDU was present, then compute expectancy per tag after 30-plus trades.
  4. Treat late-stage bases as a smaller size category, not a normal one.
  5. Keep the negative results. A pattern that tests breakeven is information, and it stops you paying for it twice.

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

Tools referenced in this guide

  • Swing Screener — the screener and no-lookahead backtest engine behind the walk-forward results.
  • TradeLog — tag base trades by contraction count and get expectancy per tag, offline and local.
  • Walk-forward testing guide — why in-sample pattern studies flatter every chart pattern.

FAQ

Quick answers

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.

How do you count contractions?

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.

What is volume dry-up?

Volume falling 30-50% under the 50-day average in the final contraction. Shallow dip plus light volume means little supply left.

Where is the buy point?

The high of the final contraction, taken on expanding volume. The stop goes under that contraction's low, and that defines your size.

Does VCP work?

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.

Why do breakouts fail?

Undercut-and-rally, breakouts on thin volume, and late-stage bases. Plus the analyst drawing contractions onto charts that already worked.