For an overview of all three breakout patterns (TypeA, TypeB, TypeC), see [Three Ways a Stock Contracts Before It Breaks Out](/articles/three-ways-stock-contracts-before-breakout.html). This article goes deeper on TypeB specifically: structure, data, quality checklist, and exit logic.
What Makes TypeB Different
TypeA contracts in space — the range narrows, highs walk down, lows walk up.
TypeB contracts in swing amplitude after a proven first leg. The stock has already shown institutional demand (a ≥22% anchor run). What follows is a visible zigzag where each cycle is smaller than the last — not tighter in price space, but shrinking in the size of each swing.
The structure:
1. Anchor run — ≥22% gain from a base low (proves institutional interest) 2. Swing 1: first pullback from the anchor peak → first bounce (amplitude A1) 3. Swing 2: second pullback → second bounce (amplitude A2, where A2 < A1) 4. Pivot = the last recovery high (below the anchor peak) 5. Stop = the last swing low (higher than the prior swing low) 6. Breakout = close above pivot on expanding volume
The key signal: each zigzag cycle is measurably smaller than the last. A1 → A2 contracting by at least 30–40% is the threshold. Supply is being absorbed; energy is coiling for continuation.
COM7 — The Teaching Example (Jan–May 2026)
COM7 (Commerce7 Group, SET) is the cleanest TypeB I tracked in 2026.
| Date | Event | Price |
|---|---|---|
| Jan 14 | Base low (above 200-MA) | ฿18.2 |
| Feb 19 | Anchor peak (+42.9% from low) | ฿26.0 |
| Mar 4 | SL1 — first pullback | ฿20.6 low |
| Mar 16 | SH1 — first bounce high | ฿24.3 high |
| Mar 23 | SL2 — second pullback | ฿21.3 low |
| Apr 1 | Pivot (recovery high) | ฿22.7 |
| Apr 7 | Final test, holds above SL2 | ฿21.2 low |
| Apr 22 | Breakout (3.4× normal volume) | ฿22.8 |
| Jun 2026 | Current price | ~฿27 |
Swing amplitude: A1 = 18% (฿20.6 → ฿24.3). A2 = 6.6% (฿21.3 → ฿22.7). Contraction: 3× smaller. This is the signal — not just that swings exist, but that each one is visibly, measurably tighter.
Why the stop works: SL2 (฿21.3) is the last significant floor before the pivot. A close below it means sellers retook control of the coil. Stop at or below SL2; risk from the breakout = ~6%.
What invalidates it: - Second low breaks below first low (floor is falling, not rising) - Second recovery exceeds the anchor peak (compression is gone) - Swing amplitudes aren't shrinking (just two random swings, not a coil)
Backtest Results (Thai Market, RS≥80 + Confirmed Uptrend, 2005–2026)
| Metric | TypeA (Coil) | TypeB (Zigzag) |
|---|---|---|
| n | 2,910 | 602 |
| Median R at 30d | +0.11 | +0.06 |
| Hit ≥2R at 30d | 18.1% | 24.8% |
| Stop rate | 31.6% | 44.8% |
| % Positive | 52.3% | 48.2% |
TypeB has more stops (44.8% vs 31.6%). The anchor run selects for momentum stocks, but the zigzag structure also appears in declining stocks with bounces — quality filtering (RS≥80 + confirmed uptrend) is not optional.
TypeB has a higher ≥2R hit rate (24.8% vs 18.1%). When a genuine anchor-run + zigzag breaks out, it tends to run further. The proven demand from the first leg creates fuel for the continuation.
Expected value: roughly equal across both types (~+0.05R per trade simplified EV). TypeB is higher-variance — more stops, but bigger winners when it works. This is the fat right-tail signature: accepting more frequent losses in exchange for the chance at a larger multiple.
The Right Exit for TypeB
TypeB's data profile has a direct exit implication: the ≥2R hit rate is its strongest metric. Hold through the first stop attempt. Bank partial profit at 2R (where TypeB outperforms TypeA). Trail the rest.
What not to do: hold waiting for a 3R or 4R move. The anchor run was already the first big move — the breakout is continuation, not a fresh launch. TypeB does not produce TypeC-style grinding advances; it produces faster, higher-amplitude moves that often retrace. Partial exit at 2R captures the distributional advantage; holding past it does not.
A stop triggered on a TypeB that later resumes is not a mistake. TypeB's stop rate is genuinely high — it is a feature of the setup, not a signal of poor execution.
5-Point Quality Checklist Before Trading a TypeB Signal
Not every anchor run + zigzag is worth taking. The scanner detects the shape mechanically; the chart confirms the quality.
1. Was the anchor run on institutional volume? 2–3× average volume during the run, not a random spike or pump-driven move. Look for multiple consecutive accumulation days. 2. Is the RS line rising throughout the base? Relative strength should hold or improve during the zigzag. A declining RS line during the base means the stock is losing ground vs the market — disqualifying. 3. Is the zigzag visibly tightening? You should be able to draw converging trendlines. A1 contracting to A2 by at least 30% is the quantitative threshold. 4. Is risk ≤7% to the last swing low? If the stop is more than 7% away, the base is too wide. The coil hasn't formed properly; the risk/reward on the trade deteriorates. 5. Is the market in confirmed uptrend? TypeB fails reliably in corrections. The stop IS the plan — but without a regime gate, you're trading a high-stop-rate setup in a headwind. Both conditions must be true.
COM7 passed all five: clean institutional anchor run, RS top decile throughout, A2 = one-third of A1, 6% stop distance, SET in Confirmed Uptrend.
For the Scanner
TypeB signals appear with a ⟳ Zigzag label in the live scanner output, displaying: - Anchor gain (the first leg %) - Swing amplitudes (A1% → A2% → contraction ratio) - Distance from current price to pivot - Risk from pivot to stop (SL2)
The scanner is generous — it finds candidates based on shape. The 5-point checklist above is the human filter applied on top of it.
Backtest source: backtest_zigzag_v2.py --rs-min 80 --regime, Thai universe 882 symbols 2005–2026. See also: [Three Ways a Stock Contracts Before It Breaks Out](/articles/three-ways-stock-contracts-before-breakout.html) · [The Darvas Box on Thai Data](/articles/darvas-box-thai-data-3289-setups.html)