How we tested this pattern
- Sample
- 9,220 occurrences on 6 markets (crypto, forex, US stocks, ETFs, indices and commodities), 1971 to 2026.
- Detection
- Found by code, never picked by hand: every match of the rule on full price history, winners and losers alike.In an uptrend: the close is above its 50-, 150- and 200-bar averages, the 50 above the 150 above the 200, the 200-bar average higher than 21 bars earlier, the close at least 30% above its 252-bar low and within 25% of its 252-bar high. Two or three pullbacks from peaks, each later peak within 20% of the first pullback's depth above or below the first peak, each pullback at most 80% as deep in percent as the one before, with rising lows. The first pullback is at least 3 ATR and at most 35% deep, with at least 3 bars between swing points. Confirmed by a close above the last peak. Stop at the last low.
- Benchmark
- Each occurrence is compared with the same assets on random bars: the move 10 bars later, and a 2:1 reward-to-risk trade.
- Checks
- Block bootstrap and a correction for the thousands of tests we run, plus a random-walk self-test that the bench passes: on random prices, no pattern should win.
- Updated
- Data updated November 5, 2026, code version c2a1683f. Read the methodology · Raw data (JSON)
At a glance: what textbooks say, what we measured
- Direction
- Bullish
- Occurrences tested
- 9,220 occurrences, all markets, daily
- Textbook: price should rise after it
- Too close to call · +0.06% vs the market, 10 bars
- Textbook: target reached most of the time
- 42.5% vs 44.5% on random dates
- Its best market and timeframe, still negative, US stocks left out
- ETFs, daily: −0.18 R 2:1 trade vs random dates, not proven
- Verdict
- 10-bar move: No clear edge2:1 trade: No clear edge
On this page
- What is the volatility contraction pattern (VCP)?
- The psychology behind the VCP
- Key characteristics of a valid VCP setup
- How to identify a VCP on your charts
- Real examples
- Step-by-step guide to trading the VCP
- Common mistakes traders make with VCP
- Advanced techniques: quantifying volatility
- VCP vs. other chart patterns
- Does the VCP work? What the data says
- Risk management when trading the VCP
- Frequently asked questions
- Summary and final thoughts
The volatility contraction pattern (VCP) is a consolidation in which each dip is smaller than the one before while volume dries up, until price breaks out above a pivot. Mark Minervini popularized it in Trade Like a Stock Market Wizard (McGraw-Hill, 2013) as a way to buy leading companies in an uptrend at a moment of low risk.
A word on data first. The definition of the volatility contraction pattern leaves room for judgment (how many pullbacks, how deep, how quiet trading must get). Our bench tests one fixed reading of it, Minervini's trend template plus shrinking pullbacks, on full daily market history, and compares it with random dates on the same assets. We also show close relatives, such as the cup with handle and the bull flag.
What is the volatility contraction pattern (VCP)?
It forms inside an uptrend and is made of two or more contractions. The first pullback is the deepest; each following one is shallower, and the pattern narrows from left to right. Turnover falls at the same time, which Minervini reads as a sign that sellers are running out. The pattern is complete when price trades in a tight range just under resistance. The top of that range is the pivot, and the trigger is a move above it on rising volume.
Minervini labels each contraction with a T: a 3T setup has three of them. He describes most valid ones as having between two and six. Our bench tests setups with two or three.
The psychology behind the VCP
Supply and demand
In Minervini's reading, each dip tests supply. After a strong advance, holders take profits and price drops. Buyers step in at a higher level than before, and the next sell-off is weaker. Gradually the weak holders drop out, demand absorbs what is left, and few shares are still offered near the highs.
Why volatility must contract before a breakout
In the same reading, a narrowing range shows that the stock is reaching balance. With price compressed and trading quiet, a little new buying can lift the shares fast. That narrow range also lets the protective stop sit close to the purchase price.
Key characteristics of a valid VCP setup
- First peakstart of the first contraction
- First pullbackthe deepest, in percent
- Second peakwithin 20% of the first pullback's depth above or below the first peak
- Last lowa shallower pullback and a higher low (two or three pullbacks in all); the stop sits here
- Breakoutclose above the last peak, on a bar where the trend template holds: close above the 50-, 150- and 200-bar averages, stacked in that order
Price contraction from left to right
Each decline should be smaller than the one before. If the third drop is deeper than the second, it does not qualify, whatever it looks like.
Decreasing volume during the consolidation
Volume should shrink and reach its lowest point at the right edge of the consolidation. Heavy volume on down days is read as a warning that institutions are still unloading.
A prior uptrend
The volatility contraction pattern is a continuation pattern for a stock already in a stage 2 uptrend. Minervini's trend template asks, among other criteria, for price above its 50-day, 150-day and 200-day moving averages, with the 200-day line rising.
How to identify a VCP on your charts
- Locate the first wide decline. On a chart, find a leader in an uptrend that starts to consolidate after a strong advance.
- Measure each decline. Note its depth in percent. Each one should be smaller, with fewer shares traded.
- Find the pivot. Draw a line at the high of the last narrow range: price must clear it on heavy turnover.
Real examples
Real occurrences from our test bench, each on its market's main timeframe. US stock examples come from liquid assets only (the most traded stocks). Best and Worst are the best and worst 2:1 trade results, Textbook the cleanest shapes (chosen on geometry alone, never on the outcome), Most recent the latest detections among the assets the gallery draws from, Typical a random draw. Shaded area: the pattern. Dashed lines: entry, stop loss (SL) and 2:1 target (TP) of the tested trade. Dotted line: 10 bars after the signal. A result above +2 R or below −1 R means a bar opened past the target or the stop, and the trade was closed at that open. Stock and ETF prices are adjusted for splits and dividends, so they can differ from the prices quoted at the time. We left out 4 cards with a shape that does not read as the definition on this page. They still count in the statistics, and are not replaced: our bench picks a fixed number of cards per category.
Step-by-step guide to trading the VCP
- Entry
- Close above the last peak
- Stop loss (SL)
- At the last low
- Target (TP)
- Twice the risk (2:1)
A clean case from our bench: US stocksChosen on its shape alone, never on the outcome. A result above +2 R or below −1 R means a bar opened past the target or the stop, and the trade was closed at that open. Stock prices are adjusted for splits and dividends, so they can differ from the prices quoted at the time.
Setting the entry
Strategic stop-loss placement
The stop-loss goes under the low of the last contraction. Because it is the narrowest part of the pattern, the distance to the stop-loss is short, which is the main appeal of the method. Size the position on that distance.
Defining profit targets and exits
The method has no measured target. Our bench uses a 2:1 target, the same rule it uses for every chart pattern so that results can be compared, with a buy at the first close above the pivot and the stop under the low of the last contraction. One exit plan sells part of the position into strength, at a set multiple of the amount risked, and trails the rest with a moving average. Get out quickly if price falls back into the consolidation after the breakout.
Common mistakes traders make with VCP
- Ignoring liquidity. Thinly traded shares show narrow ranges simply because little changes hands.
- Entering too early. Getting in before the last narrow range means a wide stop-loss and no confirmation.
- Misreading activity. A quiet holiday week is not a drop in supply. Compare activity with its own average.
- Forcing the shape. If the pullbacks do not get smaller, move on.
Advanced techniques: quantifying volatility
Judging the pullbacks by eye gives different answers from one trader to the next. A more objective approach measures volatility directly: the average true range (ATR) as a share of price, or the width of Bollinger Bands, should fall through the pattern. A screener can then list names in an uptrend whose range over the last 10 sessions is a small fraction of what it was over the last 50. TradingView hosts several community scripts that score volatility contraction along these lines; check how each one defines it before you trust its results. Beyond that, any broker or charting platform with moving averages and a screener is enough: the method needs no special tool.
The method also adds a filter on the general market, which our bench does not test: the results in "Does the VCP work? What the data says" cover the price shape and the trend template only.
VCP vs. other chart patterns
This setup is less a new shape than a reading of a consolidation. A cup with handle, a bull flag or an ascending triangle can each be a volatility contraction pattern if the pullbacks shrink and trading dries up. These three relatives are on our test bench. On daily charts, with the position opened at the breakout close, the stop-loss on the other side of the pattern and a target at twice the risk, here is how they did against the same trade on random dates.
- Cup and HandleBullish10-bar move, daily No clear edge
- FlagBullish or bearishBullish, Upward breakout, 10-bar move, daily No clear edgeBearish, Downward breakout, 10-bar move, daily No clear edge
- Ascending TriangleBullishUpward breakout, 10-bar move, daily No clear edge
| Pattern | Occurrences | Closed trades | 2:1 target hit | Same trade, random dates | Expectancy (R) | Verdict |
|---|---|---|---|---|---|---|
| Cup with handle (US stocks) | 674 | 669 | 35.6% | 35.6% | +0.14 vs +0.16 | No clear edge |
| Bull flag (US stocks) | 997 | 994 | 32.5% | 33.6% | +0.19 vs +0.21 | No clear edge |
| Ascending triangle, upward breakout (all markets) | 3,026 | 3,009 | 33.0% | 33.6% | +0.18 vs +0.18 | No clear edge |
Read each line in pairs. The trades were positive before costs, but the same distances placed on random dates in the same assets did just as well: the gain came from the upward drift of shares, not from the pattern. For these relatives, our bench tests the shape alone, without the trend template, the decline in activity or the market filter that the method adds. The VCP itself is tested with the trend template, in the next section.
Does the VCP work? What the data says
Our bench tests one fixed reading of the method on daily charts, built from Minervini's trend template as he describes it in Trade Like a Stock Market Wizard, and from the shape described above. The summary of its results comes first, then the rule.
Moved the expected way 10 bars later, compared with random bars.
Measured on 9,220 daily volatility contraction pattern occurrences across 1,605 assets. Random bars on the same assets are the honest baseline.
No clear edgeVolatility contraction pattern against random bars on the same assets, by market, on daily candles. Bars of almost the same length mean no edge.
- All markets
- US stocks
- ETFs
- Indices
- Commodities
- All markets
- US stocks
- ETFs
- Indices
- Commodities
All statistics
Full results for the volatility contraction pattern, market by market
Every occurrence our rule finds on full price history, compared with what the same assets did on random bars. A pattern only earns an edge if it beats random entries after correcting for the thousands of tests we run.
Our verdict
Not a reliable signal on its own here. Use it as context, not as a trigger.
Volatility contraction pattern: 9,220 occurrences tested
Bullish pattern · All markets · Daily · 1,605 assets · 1971-02 to 2026-10
What this means. No measurable difference from the rest of its market over the next 10 bars.
Timeline
- Pattern length, first swing to breakout
- 45 days · middle half 31 to 75 · on 9,220 occurrences
- Breakout, after the last swing
- 2 days · middle half 0 to 5 · on 9,220 occurrences
- Time to the 2:1 target, when hit
- 38 days · middle half 21 to 61 · on 2,813 trades that hit it
- Time to the stop, when hit
- 21 days · middle half 10 to 39 · on 4,810 trades that hit it
- Time in the trade, all exits
- 33 days · middle half 15 to 73 · on 9,135 trades
- Measured-move target reached, when hit
- 26 days · middle half 13 to 47 · on the occurrences that reached it
- Pattern height projected from the breakout
Size and trade path
- Pattern height
- 13.9% · middle half 9.8% to 20.0% · on 9,220 occurrences
- Best open profit during the trade
- 1.07 R · middle half 0.39 R to 2.03 R · on 9,135 trades
- Stopped trades that were first up 1 R
- 19.9% · on 4,810 stopped trades
- Trades a stop moved to breakeven at +1 R would have closed flat instead of at a loss
Medians, each on the cases named on its line; "middle half" spans the 25th to 75th percentile; no value under 30 cases.
How we detect it. In an uptrend: the close is above its 50-, 150- and 200-bar averages, the 50 above the 150 above the 200, the 200-bar average higher than 21 bars earlier, the close at least 30% above its 252-bar low and within 25% of its 252-bar high. Two or three pullbacks from peaks, each later peak within 20% of the first pullback's depth above or below the first peak, each pullback at most 80% as deep in percent as the one before, with rising lows. The first pullback is at least 3 ATR and at most 35% deep, with at least 3 bars between swing points. Confirmed by a close above the last peak. Stop at the last low.
All measurements (7 rows)
10-bar move: did price go the expected way?
| Market | Occurrences | Pattern | Random bars | Excess | 10-bar move verdict |
|---|---|---|---|---|---|
| Crypto · Daily | 51 | 62.7% | 47.5% | +8.87% | Not enough data |
| US stocks · Daily | 8,745 | 53.8% | 54.5% | −0.01% | No clear edge |
| ETFs · Daily | 246 | 57.7% | 56.7% | +0.36% | No clear edge |
| Indices · Daily | 122 | 68.0% | 57.4% | +0.33% | No clear edge |
| Forex · Daily | 3 | 66.7% | 52.9% | +0.61% | Not enough data |
| Commodities · Daily | 53 | 50.9% | 52.0% | −0.09% | No clear edge |
| All markets · Daily | 9,220 | 54.1% | 54.6% | +0.06% | No clear edge |
2:1 trade: target hit and average result
| Market | Trades | Target hit | Same trade, random dates | Per trade | 2:1 trade verdict |
|---|---|---|---|---|---|
| Crypto · Daily | 51 | 43.1% | 36.3% | +0.31 R vs +0.12 R | Not enough data |
| US stocks · Daily | 8,666 | 30.9% | 33.1% | +0.17 R vs +0.24 R | No clear edge |
| ETFs · Daily | 243 | 26.3% | 32.0% | +0.06 R vs +0.24 R | No clear edge |
| Indices · Daily | 121 | 24.8% | 36.3% | +0.06 R vs +0.40 R | Weak, below chance |
| Forex · Daily | 3 | 33.3% | 33.3% | +1.27 R vs +0.82 R | Not enough data |
| Commodities · Daily | 51 | 33.3% | 36.4% | +0.16 R vs +0.25 R | No clear edge |
| All markets · Daily | 9,135 | 30.8% | 33.1% | +0.17 R vs +0.24 R | No clear edge |
After the breakout
| Market | Occurrences | False starts | Same, random dates | Throwbacks |
|---|---|---|---|---|
| Crypto · Daily | 51 | 30.6% | 39.7% | 62.0% |
| US stocks · Daily | 8,745 | 39.8% | 38.1% | 70.2% |
| ETFs · Daily | 246 | 43.5% | 42.5% | 70.6% |
| Indices · Daily | 122 | 37.3% | 36.8% | 73.1% |
| Forex · Daily | 3 | 0.0% | 41.7% | 100.0% |
| Commodities · Daily | 53 | 40.0% | 40.1% | 68.6% |
| All markets · Daily | 9,220 | 39.8% | 38.2% | 70.2% |
Data updated November 5, 2026 · code version c2a1683f · Read the methodology. We measure every pattern on crypto, US stocks, ETFs, indices, forex and commodities (daily charts). A market or timeframe from that list missing from the tables above had no occurrence.
What you often read
“The volatility contraction pattern is a reliable bullish signal.”
What our data shows
On 9,220 daily occurrences, it moved in the expected direction 54.1% of the time, against 54.6% for random bars: no clear edge, since the average excess return is not statistically significant.
The rule, never tuned on results:
- The trend template: the close is above its 50-, 150- and 200-bar averages, the 50 above the 150 above the 200, the 200-bar average higher than 21 bars earlier, the close at least 30% above its 252-bar low and within 25% of its 252-bar high. The relative strength ranking is left out, because it needs the whole market at once.
- The contractions: two or three pullbacks, each one at most 80% as deep in percent as the one before, with rising lows. The first is at least 3 ATR and at most 35% deep, with at least 3 bars between swing points. Each later peak must stay close to the first one: the gap between them may not exceed 20% of the depth of the first pullback.
- The signal: the first close above the last peak, the pivot. The stop goes under the low of the last contraction, and the target at twice the risk.
Turning points are swings of 2, 4 or 8 times the average true range. The bench tests the price shape and the trend template; volume is reported as a breakdown.
The table below details the trade: every occurrence our rule finds on full price history, on daily charts, compared with the same trade placed on random dates on the same assets.
Table quoted in the text (verdicts and every market: see All measurements)
| Setup tested | Occurrences | Closed trades | 2:1 target hit | Same trade, random dates | Expectancy before costs |
|---|---|---|---|---|---|
| US stocks, daily | 8,745 | 8,666 | 30.9% | 33.1% | +0.17 R vs +0.24 R |
| ETFs, daily | 246 | 243 | 26.3% | 32.0% | +0.06 R vs +0.24 R |
| Indices, daily | 122 | 121 | 24.8% | 36.3% | +0.06 R vs +0.40 R |
| Commodities, daily | 53 | 51 | 33.3% | 36.4% | +0.16 R vs +0.25 R |
| Crypto, daily | 51 | 51 | 43.1% | 36.3% | +0.31 R vs +0.12 R |
| All markets, daily | 9,220 | 9,135 | 30.8% | 33.1% | +0.17 R vs +0.24 R |
How to read it: each row is the trade above, compared with the same entry, stop and target placed on random bars of the same assets. Expectancy is the average result per trade in units of risk (R), before fees. On 8,745 daily setups on US stocks, where the method was designed, the VCP did no better than the same trade on random dates. Stock data also misses most delisted companies, a survivorship bias we have not sized. One small sample looks better at first sight. On index charts, 68.0% of the 122 setups were higher 10 days later, against 57.4% of random days, but the average excess return of +0.33% over the rest of the market has an interval that includes zero: the table rates that row No clear edge, and the trade there reached its target less often than on random dates, a gap rated weak, below chance: worse than chance in a simple test, not after our correction. On crypto charts, a smaller sample still, the trade reached its target 43.1% of the time against 36.3% on 51 setups (51 closed trades), a sample on which our statistical test could not be run, so that gap is shown, not interpreted. Neither shows an edge. Volume did not change the picture on stocks: breakouts on more than 1.5 times the average volume reached the target 29.8% of the time, against 31.5% on normal volume, a descriptive breakdown not corrected for multiple testing. As a separate measure, price reached the height of the first contraction added to the pivot, before the stop and within 100 bars, in 39.3% of daily setups; that rate has no random baseline, so it describes the shape rather than an edge.
The VCP can overlap the cup with handle, the bull flag and the ascending triangle, which have their own rules: their figures should not be added to these.
Risk management when trading the VCP
The strength of this contraction pattern is a defined, short distance to the stop-loss. Protect it: decide the exit before you enter, never widen it, and put only a fixed share of your account on each position. Expect many little losses from breakouts that fail; the method relies on a few larger winners to cover them. Before using real money, list the last 50 setups you would have taken in a free demo account, record the outcome, and compare it with entries on random dates.
Disclaimer: this page is general information, not investment advice. Trading carries a genuine chance of loss and is not suitable for everyone; if in doubt, ask a professional financial adviser.
Frequently asked questions
How many contractions should a VCP have?
At least two. According to the book, most valid ones have two to six, each shallower than the one before.
Does the VCP work in all timeframes?
It was designed for daily and weekly charts of US equities. The same rules can be drawn on intraday charts and on crypto. Our bench tests it on daily charts only, where the trend template, counted in bars, keeps the meaning Minervini gave it.
Is volume decay mandatory for a VCP?
In the original definition, yes: falling activity is what shows that supply is drying up. A narrow range on heavy volume says something else. The bench tests the price shape and the trend template; volume is reported as a breakdown.
Can VCP be used for short selling?
The method was built for buying in an uptrend. The mirror image exists in principle, but we have not tested it.
Summary and final thoughts
- A VCP is a consolidation where each decline is smaller than the last and volume dries up, inside an uptrend.
- The signal is a breakout above the pivot, with the stop-loss under the last contraction.
- Tested with the trend template and one fixed rule, it did no better than the same trade on random dates on US stocks, and neither did its closest relatives.
- Treat it as a method to define a short distance to your exit, not as a promise of a big move.
About the author and the data. Written by Amaury, founder of PatternsWizard, who is passionate about finance, quantitative trading and data analysis. He built the PatternsWizard test bench, which detects price patterns with published rules on full market history: crypto, forex, US equities, ETFs, indices and commodities. Trades and win rates are compared with random bars on the same assets, excess returns with the rest of the market, with error margins and a correction for multiple testing. The VCP rule on this page was set from chart reviews, never tuned on results. Statistics on this page were generated on November 5, 2026. The full methodology explains every step.
