VNStock Advisor
Cẩm nang thị trường

Phương pháp VCP của Minervini

Cách nhận diện nền giá siết chặt: các đợt co biên độ hẹp dần, thanh khoản cạn kiệt, và cách hiệu chỉnh cho biên độ ±7%.

Nguồn nội dung: bộ quy tắc vn-vcp-screener mà hệ thống dùng khi phân tích.

VCP Methodology — VN Adjusted

Last updated: 2026-05-13 Based on: Mark Minervini, Trade Like a Stock Market Wizard (2013), adjusted for HOSE / HNX market mechanics.

What is VCP?

Volatility Contraction Pattern (VCP) is a base-and-breakout setup where price action shows successive contractions — each pullback is shallower than the previous, and trading range narrows toward a tight pivot. The pattern signals institutional accumulation: large buyers are absorbing supply, reducing volatility, before a breakout.

The 5 Essential VCP Characteristics

1. Uptrend baseline

The stock must be in a confirmed uptrend before the base:

  • Price > MA50 > MA200
  • MA50 slope positive (rising over last 20 sessions)
  • Trend duration: at least 30 sessions of uptrend

2. Multiple contractions

Inside the base, count distinct contractions (a contraction is a pullback followed by a recovery):

  • Minimum: 2 contractions
  • Typical: 3-4 contractions
  • Maximum: 5-6 (more than this usually means base is too long)

3. Decreasing depth (the key signature)

Each contraction's depth (high to low) must be smaller than the previous one:

T1: 12% depth   (deepest)
T2: 7%  depth   (about half of T1)
T3: 4%  depth   (about half of T2)
T4: 2%  depth   (final tight contraction = pivot zone)

If a later contraction is deeper than an earlier one → not VCP (failed pattern).

4. Volume dry-up

As contractions tighten, volume must contract too:

  • At the deepest part of each contraction, volume should be ≤ 70% of MA50 volume
  • Final contraction: volume often drops to 50-60% of average (the "stillness")
  • A volume spike at the pivot is the breakout signal

5. Pivot near recent high

The pivot point (top of the tightest contraction) should be:

  • Within 5-10% of the 52-week high
  • Above the previous high in the base (each contraction's recovery makes new local high)

VN-Specific Adjustments

Why VN differs from US

US (S&P 500 names)VN (HOSE blue-chips)
No intraday price limit±7% HOSE band per session
Tight 1-2% intraday range is "tight"A "tight" 1-2% in VN means 1/3 of max band — that's exceptional
ATR commonly 1-3% dailyATR commonly 1.5-3% daily on HOSE blue-chips, but 3-5% on small caps

Adjusted contraction depth thresholds

For HOSE blue-chips (typical):

  • T1 max: 15% (some flexibility for early base contraction)
  • T2 max: 10% (must be smaller than T1)
  • T3 max: 6%
  • T4 max: 3%

For HOSE mid-caps and HNX:

  • Add ~1-2% to each threshold (more natural volatility)

Wide-and-loose detection

A "wide-and-loose" base is not a VCP — it's a sloppy range. Reject if:

  • Total base range (overall high to low) > 25% of the lowest point
  • OR if any contraction depth > 18% on HOSE blue-chip

Why this matters in VN: the ±7% band means an 18%+ contraction takes 3+ floor sessions. That's not consolidation — that's a serious correction.

Pivot quality

The pivot must:

  • Be within 10% of 52-week high (vs Minervini's 25% guideline) — VN bases tend to form closer to highs because the ±7% band caps fast moves both ways
  • Have at least 3 sessions of close prices within 2% of each other (the "tightness")
  • Be above MA20 and MA50 at the pivot point

Volume reading

Volume dry-up is a hard requirement:

  • Compute MA50 of volume over the 50 sessions preceding the base start
  • At the deepest point of each contraction, volume should be ≤ 70% of that MA50
  • At the pivot zone (last 5-10 sessions), volume should be ≤ 60% of MA50

If volume doesn't dry up → reject. Without volume contraction, the price tightening is meaningless.

Scoring

5 components, weighted 25 / 25 / 20 / 15 / 15 → total 100.

Uptrend (25 points)

ConditionPoints
Price > MA50 > MA200, MA50 rising25
Price > MA50 > MA200, MA50 flat18
Price > MA50, MA50 < MA20010
Else0

Contractions (25 points)

ConditionPoints
3-4 contractions, decreasing depth, all under thresholds25
2 contractions, decreasing depth18
3+ contractions but depth not strictly decreasing10
< 2 contractions detected0 (reject)

Volume dry-up (20 points)

ConditionPoints
Final contraction volume ≤ 60% of MA5020
Final contraction volume 60-70% of MA5014
Final contraction volume 70-85% of MA508
Final contraction volume > 85% of MA500

Pivot quality (15 points)

ConditionPoints
Within 5% of 52w high, tight (≤2% range over 3+ sessions)15
Within 10% of 52w high, tight11
Within 10% of 52w high, not tight6
> 10% from 52w high0

Wide-and-loose check (15 points)

ConditionPoints
Base range < 15%, no contraction > 12%15
Base range 15-25%, all contractions < 18%9
Base range 25-35% or contraction > 18%0 (cap grade at C)
Base range > 35%reject entirely

Pivot and stop calculation

Once VCP is detected:

  • Pivot: highest close in the final contraction zone (last 10 sessions), rounded to nearest tick
  • Suggested stop: 5-7% below pivot OR low of the final contraction (whichever is higher)
    • Constraint: stop must be above the price floor of the day after entry (use compute_price_band from vn-market-mechanics)
  • Target: R-multiple based (1R = pivot - stop)

When VCP fails

Even a perfect VCP can fail. Common failure modes:

  • Failed breakout: price breaks pivot, then closes back below within 3-5 sessions. Exit on close back below pivot.
  • Volume failure on breakout: breakout day's volume < 50% of MA50 → low conviction breakout. Tighter stop.
  • News-driven gap below stop: at-market exit next morning, accept the loss.
  • Market regime change: if VN-Index falls below MA50 while you hold a VCP entry, tighten stop or exit.

Suggested defaults

ParameterDefaultNotes
--min-base-length25 sessionsMinimum days from base start to pivot
--max-base-length90 sessionsBeyond this, base is too long
--min-contractions2Hard minimum
--max-contractions5Above this, often messy
--max-base-range-pct25Wide-and-loose threshold
--max-pivot-distance-from-52w-pct10Pivot proximity
--volume-dryup-threshold0.7Final contraction vol / MA50 vol

Muốn áp dụng ngay các con số này vào kịch bản của bạn?

Mở công cụ tính toán

Các con số trong tài liệu là giá trị theo quy định tại thời điểm cập nhật gần nhất. Quy định thị trường có thể thay đổi — luôn đối chiếu với nguồn chính thức của Uỷ ban Chứng khoán Nhà nước, HOSE, HNX và VSDC trước khi ra quyết định.