Guide — wave analysis

Elliott Wave, from theory to trade.

An extensive working guide to Elliott Wave theory for intraday and swing trading on the focus markets (US, UK, German and Japanese indices, US Oil, Gold, Silver). Diagrams for every structure, the three hard rules, Fibonacci projections, a wave-counting flowchart — and a data-science section on making wave analysis measurable instead of mystical.

1 · The core idea ↑ top

Ralph Nelson Elliott's observation (1930s): crowd psychology moves in repeating, fractal patterns — a trending phase that unfolds in five waves, followed by a corrective phase in three waves. The same 5–3 shape appears on monthly charts and 5-minute charts, nested inside each other.

12 34 5 ABC Motive phase — 5 waves with the trend Corrective phase — 3 waves against it
Fig 1. The complete 8-wave cycle: waves 1–3–5 push with the trend, 2 and 4 pull back; A–B–C corrects the whole move.
Why traders care
You don't trade Elliott Wave because it predicts the future — you trade it because it gives you a map of where you are: is this pullback a wave 2 (buy it aggressively), a wave 4 (buy it carefully, smaller target), or wave C of a correction that ends the move? Each answer changes stop placement, target and position size. Combined with the Fibonacci ratios below, it turns "price is going up" into "price is likely in wave 3 with a 161.8% projection at 5,296".
The three inviolable rules — the only things that can prove a count wrong

Everything else in Elliott is a guideline. These three are rules — if price breaks one, your count is wrong and you must recount. This is what makes wave analysis falsifiable (and therefore tradeable: every rule is a natural stop level).

1 2 RULE 1 W2 never retraces >100% of W1 1 3 5 RULE 2 W3 is never the shortest of 1·3·5 (usually the longest) 1 3 4 RULE 3 W4 never enters W1 price territory
Fig 2. The three rules. Note rule 3 is relaxed in leveraged/futures markets only for brief wicks; a close into wave-1 territory kills the count.
  • Rule 1: Wave 2 can retrace 99.9% of wave 1, but never all of it. Trading use: a long at the wave-2 low has a natural, structural stop just below the wave-1 start.
  • Rule 2: Wave 3 is never the shortest motive wave — in indices it is usually the longest and steepest, driven by the "recognition" phase of the crowd. Trading use: if your "wave 3" is already shorter than wave 1 as it approaches wave 1's length, expect failure/truncation and tighten up.
  • Rule 3: Wave 4 stays above wave 1's high (in an uptrend). Trading use: the top of wave 1 is the invalidation line for any wave-4 pullback entry.
Wave personalities — what each wave feels like while it's happening

Counting waves after the fact is easy; the edge comes from recognising the character of the wave you're inside right now. Volume and momentum (RSI/MACD) signatures are the data-science hook here — each wave has a measurable fingerprint.

WavePsychologyTypical characterMomentum / volume fingerprint
1Disbelief — "just a bounce"Choppy, hesitant, often mistaken for a correction of the old trendVolume modest; RSI recovers from oversold but few notice
2Fear — "told you, new lows coming"Sharp, deep (50–78.6% of W1), sentiment returns to prior-trend extremeVolume dries up into the low; RSI holds above the W-start reading — bullish divergence vs old low is common
3Recognition — "this is real"Longest, steepest, gaps and wide-range bars; breaks key levels cleanlyHighest volume of the sequence; RSI pins overbought; MACD peak of the whole cycle usually happens here
4Boredom — profit-taking driftSideways, complex, time-consuming (flats/triangles); shallow (23.6–38.2% of W3)Volume falls; RSI cools to ~40–50 without breaking regime
5Euphoria — "can't lose"New price high but narrower participation; can extend or truncateMomentum divergence: price high, RSI/MACD lower high — the classic wave-5 signature
ADenial — "healthy pullback"Often mistaken for a wave-2-style dip-buying opportunityVolume rises on down bars — first clue the character changed
BRelief rally — the trapWeak, overlapping, often in three waves; "b" for bull-trapLow volume, momentum fails to confirm the bounce
CCapitulationImpulsive 5-wave decline, feels like wave 3 in reverse; usually ≥ length of AVolume expands; RSI makes the extreme low of the correction
The single most tradeable insight
Wave 5's momentum divergence and wave 2's "retest with divergence" are the two highest-probability signatures in the whole framework — and both are exactly what the RSI-divergence entries in C5 and the pullback strategy are detecting. Elliott gives those signals a structural context.
Fractality & wave degrees — the same shape at every zoom level

Every wave subdivides: motive waves (1, 3, 5, A, C when impulsive) break into five smaller waves; corrective waves (2, 4, B) break into three (or a triangle/combination). A complete 8-wave cycle at one degree is just two bars of the pattern one degree higher.

iiiiiiiv(1) ab(2) iiiiiiiv(3)… Grey band = one degree higher. Waves (1)(2)(3) subdivide into i-ii-iii-iv-v and a-b-c one degree lower.
Fig 3. Fractal nesting: your 5m impulse is one leg of a 15m wave, which is one leg of an H1 wave.

Degree labels (you only need three at once — the one you trade, one above for context, one below for timing):

DegreeTypical chartLabel conventionDay-trading role
Primary / IntermediateDaily–Weekly((1)) ((2)) / (1) (2)Background bias only
MinorH4–H11 2 3 4 5Context: which leg is today part of?
Minute15m–5mi ii iii iv vTrading degree: your setups live here
Minuette1m–5m(i) (ii) …Entry timing / trigger candles

2 · Motive patterns ↑ top

Three structures move with the trend: the standard impulse, the impulse with extension, and the diagonal. Learn the diagonal well — it's the one that appears at the exact spots where day traders get trapped.

Impulse & extensions — the engine of the trend

The standard impulse is the 5-wave structure from Fig 1, obeying all three rules. In real markets one of the three motive waves usually extends — it subdivides visibly and runs far beyond normal projections. In stock indices the extension is most often wave 3; in commodities (Gold, Oil, Silver) wave 5 extensions are common — a crucial market-personality difference.

12 iii3 45 Wave-3 extension — typical for US500 / GER40 / JP225 12 34 5 Wave-5 extension — common in Gold / Silver / WTI
Fig 4. Extensions. Only one motive wave extends; if wave 3 extended, expect wave 5 ≈ wave 1 (equality guideline).
  • If wave 3 extends: wave 5 tends toward equality with wave 1 — a precise, tradeable target.
  • If waves 1 and 3 are roughly equal: expect the wave-5 extension — don't fade the "overextended" move early (the Gold trap).
  • Fifth-wave failure (truncation): wave 5 fails to exceed wave 3's high — rare, but it signals violent reversal; most common after an already-extended wave 3.
Leading & ending diagonals — the wedges that trap traders

Diagonals are 5-wave structures squeezed between converging trendlines where wave 4 is allowed to overlap wave 1 (the only motive structure where rule 3 relaxes). Sub-waves are usually threes (3-3-3-3-3).

12345 sharp reversal Ending diagonal at the end of wave 5 or wave C — momentum dies, wedge breaks hard HOW TO TRADE IT · Appears where a trend is exhausting — the "rising wedge" on TradingView · Overlapping, sluggish waves + RSI divergence on each new extreme · Break of the lower line typically retraces the ENTIRE diagonal fast · Leading diagonal = same shape as wave 1/A — expect deep W2, then trend
Fig 5. The ending diagonal — Elliott's version of TradingView's rising/falling wedge, with a defined reversal target.
Day-trading relevance
On index 5m charts into the close, and on Gold after extended runs, ending diagonals are everywhere. The tell: five overlapping pushes, each smaller, converging lines, momentum divergence stacking. The trade is the break, not the fifth push — target the diagonal's origin. This is one of the fastest mean-reversion moves that exists intraday.

3 · Corrective patterns ↑ top

Corrections are where most counting mistakes — and most day-trading losses — happen. Three families: sharp zigzags, sideways flats, and time-consuming triangles, plus their combinations. The guideline of alternation tells you which to expect.

Zigzag (5-3-5) — the sharp correction
ABC from wave-5 high SIGNATURE · A = five waves down (impulsive) · B = weak three, retraces 38–79% of A · C = five waves, usually C ≈ A (else C = 1.618×A) Trade: buy/sell the C = A level when it clusters with a 50–61.8% fib of the trend
Fig 6. Zigzag — the usual shape of wave 2 and of sharp A–B–C pullbacks in strong trends.

Zigzags are the correction you want to see when trend-following: fast, deep, terrifying, and finished quickly. The C-leg completion zone (C=A overlapping a 50–61.8% retracement of the prior impulse) is the highest-quality pullback entry Elliott offers — it is exactly the fib-cluster logic of combination C6.

Flats (3-3-5): regular, expanded, running — the sideways grinds
ABC Regular flat: B ≈ start of A, C slightly beyond A ABC Expanded flat: B breaks above the old high (trap!), C = 1.618×A below ABC Running flat: C fails to reach A's low — extremely strong trend, expect blast-off
Fig 7. The three flats. The expanded flat's B-wave false breakout is the single most common stop-hunt shape in index futures.

Why flats matter to day traders: the expanded flat is the Elliott name for the classic failed breakout → full reversal sequence. Price breaks the prior high (wave B — everyone buys the breakout), then reverses through the whole range (wave C — trapping them all). If you've internalised this one structure, you'll stop buying late breakouts and start anticipating the C-wave fade level at 1.618×A. Flats usually occupy wave 4 positions and B-waves — slow, overlapping, range-day material.

Triangles (3-3-3-3-3) — time corrections before the last move
abcde thrust ≈ widest part of triangle RULES OF THUMB · Appears in wave 4 or wave B — never wave 2 · Five legs a–e, each a three · e often ends ON the trendline · Thrust target = height of the triangle's widest section
Fig 8. Contracting triangle — TradingView's "symmetrical triangle" with an Elliott position rule and a measured thrust target.

A triangle in wave-4 position is the market saying "one more push, then done": the post-triangle thrust is typically the final wave of the sequence. This means: trade the thrust, but take profit at the measured target and don't hang around — the whole trend often reverses after it. Lunchtime index coils that break in the afternoon are usually exactly this structure.

Combinations (W-X-Y) & the alternation guideline

Corrections can chain: two (or three) simple corrections joined by an X-wave — labelled W-X-Y (double three) or W-X-Y-X-Z (triple three). You rarely need to label these precisely intraday. What you need is the practical takeaway: if a correction looks finished but is "too small in time" versus the wave it corrects, expect another leg.

12345 sharp zigzag (fast, deep) flat/triangle (slow, shallow) Alternation: if wave 2 was sharp and deep, expect wave 4 to be sideways and shallow — and vice versa.
Fig 9. Alternation — the guideline that tells you which correction family to expect next.
  • Alternation in practice: deep 61.8% zigzag wave 2 → expect a shallow 23.6–38.2% flat/triangle wave 4 (and plan the smaller pullback entry accordingly).
  • Time symmetry: corrections tend to consume time proportional to the wave they correct. A 2-hour impulse corrected in 10 minutes probably isn't done.
  • X-waves are noise: when a correction turns into W-X-Y chop, stand aside and let the structure complete — this is ADX-below-20 territory.

4 · The Fibonacci map ↑ top

Elliott without Fibonacci is a shape library; with Fibonacci it becomes a set of price targets. These are the standard relationships — treat each as a zone, and treat clusters of two or more as signal.

12345 W2: 50–61.8% of W1 W4: 23.6–38.2% of W3 W3 = 1.618–2.618 × W1 W5 = W1, or 0.618×(0→3) Projections measured from the wave-2 / wave-4 lows. Cluster two independent measurements for A-grade targets.
Fig 10. Standard impulse relationships — the working numbers for targets and pullback zones.
MeasurementMost commonAlso commonUse as
Wave 2 retrace of W161.8%50%, 78.6%Pullback buy zone; stop under 100%
Wave 3 vs W1161.8%261.8% (extended)Trend target / add-on level
Wave 4 retrace of W338.2%23.6%, 50%Second pullback zone (smaller size)
Wave 5= W161.8% of W1→3; 161.8% of W4Exhaustion target — take profits, hunt divergence
Wave B retrace of A38–79%>100% = expanded flatFade zone for the C-leg
Wave C vs A100% (C=A)161.8% (expanded), 61.8% (running)Correction-end target — reversal entries

5 · Counting workflow ↑ top

A repeatable decision process beats staring at squiggles. Work the flowchart top-down whenever you open a chart — it forces the two questions that matter: impulse or correction? and where in the structure are we?

Anchor on the last CLEAR extreme (obvious swing high/low on 15m–H1) Is the move off it in 5s or 3s? count clean sub-swings; overlap = threes FIVES → motive: trend direction expect pullback then continuation THREES → corrective: range/counter zigzag / flat / triangle in progress Locate position: after W1/W2? W2 zone = 50–61.8% · W4 = 23.6–38.2% momentum peak already in? (→ W3 done) Identify the corrective family sharp+fast = zigzag · sideways = flat 5 shrinking legs = triangle TRADE: join trend at fib zone trigger candle + RSI regime check stop at rule-violation level WAIT or fade at C-completion C=A cluster + divergence = entry mid-correction chop = no trade ALWAYS: write the invalidation price rule broken → recount, don't argue
Fig 11. The counting workflow. The bottom box is the entire discipline: a count without a written invalidation price is an opinion, not an analysis.
Applying it intraday on the focus markets — a practical routine

The three-timeframe routine

  1. H1: where are we in the Minor structure? (Which leg is today likely to be — a 3, a 4, a C?) This sets the day's bias and the "surprise direction".
  2. 15m: count the Minute waves of the current leg. Mark the fib zones (W2 / W4 pullbacks, C=A completions) as horizontal zones on your chart before the session.
  3. 5m: don't count — trigger. When price enters a pre-marked zone, use the entry logic from the combinations (trigger candle + RSI/volume confirmation).

Market-specific wave tendencies

MarketWave tendency to know
US500 / US100Textbook wave-3 extensions on trend days; expanded-flat B-wave traps around the cash open are endemic. Overnight ranges often complete wave 4s that the cash session thrusts out of.
GER40Impulsive and clean in the 08:00–10:00 CET window; loves ending diagonals into the US open, which then get reversed hard by US flow.
UK100Slower, overlap-heavy — more W-X-Y combinations than clean impulses. Count on 15m minimum; 5m counts degrade into noise.
JP225Gap-driven: overnight gaps frequently are wave 3's middle. Respect the 5-3 shape across sessions rather than within one session.
Gold (XAUUSD)The classic wave-5 extender — commodity crowds chase the final leg. Don't fade "overbought" wave 5s without divergence and a completed diagonal/channel touch.
Silver (XAGUSD)Gold's structure with 2× the noise and violent B-waves; use wider invalidations, smaller size. Expanded flats are constant.
WTI (USOIL)News (EIA Wednesdays, OPEC) regularly truncates or extends waves mid-structure — treat counts as void across inventory releases. Trend days are extremely impulsive and channel well.

6 · The data-science layer ↑ top

Elliott's weakness is subjectivity — two analysts, three counts. The fix is to make every claim measurable: detect swings algorithmically, express rules as code, and validate the guidelines on your own market's data before trusting them.

Step 1 — Detect swings objectively: the ZigZag pivot algorithm

All wave counting starts from swing pivots. Doing this by eye invites bias; a ZigZag algorithm with a fixed reversal threshold (in ATR units, not percent — so it adapts per market) makes pivots reproducible. This is the same logic behind TradingView's built-in ZigZag indicator and its Elliott Wave auto-detection.

# Objective swing detection: ATR-scaled ZigZag pivots (pandas)
import pandas as pd

def zigzag_pivots(df: pd.DataFrame, atr_mult: float = 2.0) -> pd.DataFrame:
    """Return swing pivots where price reversed >= atr_mult * ATR(14).
    df columns: high, low, close. Output: index, price, kind ('H'/'L')."""
    tr = pd.concat([(df.high - df.low),
                    (df.high - df.close.shift()).abs(),
                    (df.low  - df.close.shift()).abs()], axis=1).max(axis=1)
    atr = tr.rolling(14).mean()
    pivots, direction = [], 0   # 0 unknown, +1 seeking high, -1 seeking low
    ext_i = df.index[0]; ext_p = df.close.iloc[0]
    for i, row in df.iterrows():
        if direction >= 0 and row.high > ext_p: ext_i, ext_p = i, row.high
        if direction <= 0 and row.low  < ext_p and direction != 0: ext_i, ext_p = i, row.low
        thresh = atr_mult * atr.loc[i] if pd.notna(atr.loc[i]) else None
        if thresh is None: continue
        if direction >= 0 and ext_p - row.low >= thresh:      # confirmed high
            pivots.append((ext_i, ext_p, 'H')); direction = -1; ext_i, ext_p = i, row.low
        elif direction <= 0 and row.high - ext_p >= thresh:   # confirmed low
            pivots.append((ext_i, ext_p, 'L')); direction = +1; ext_i, ext_p = i, row.high
    return pd.DataFrame(pivots, columns=['time', 'price', 'kind'])

With pivots in hand, a candidate 5-wave impulse is just six consecutive pivots — and the three Elliott rules become boolean checks:

def is_valid_impulse(p: list[float]) -> bool:
    """p = [start, w1, w2, w3, w4, w5] pivot prices for an up-count."""
    w1, w3, w5 = p[1]-p[0], p[3]-p[2], p[5]-p[4]
    rule1 = p[2] > p[0]              # W2 holds above start
    rule2 = not (w3 < w1 and w3 < w5)  # W3 not shortest
    rule3 = p[4] > p[1]              # W4 above W1 high
    return rule1 and rule2 and rule3
QA mindset
This is exactly test automation applied to charts: the rules are assertions, a candidate count is a test case, and historical data is your fixture library. Scan a year of 15m data, collect every pivot sextet that passes is_valid_impulse, and you have an objective dataset of impulses for the statistics below — no cherry-picking.
Step 2 — Validate the guidelines: measure ratio distributions on YOUR market

The "wave 2 retraces 61.8%" guideline is a claim about a distribution. Before trusting it with money, measure it: for every algorithmically-detected impulse, compute the actual retracement and projection ratios and histogram them per market.

<30%30–45%45–55% 55–70%70–80%>80% mode ≈ 61.8% zone frequency of wave-2 retracement depth (illustrative shape — build the real one from your data)
Fig 12. What you're looking for: a mode near the classic ratio. If your market's histogram peaks elsewhere, trade your numbers.
# Ratio harvest over detected impulses → per-market distributions
ratios = []
for p in valid_impulses:                       # sextets from step 1
    w1 = p[1] - p[0]
    ratios.append({
        'w2_retr': (p[1] - p[2]) / w1,
        'w3_ext' : (p[3] - p[2]) / w1,
        'w4_retr': (p[3] - p[4]) / (p[3] - p[2]),
        'w5_vs_w1': (p[5] - p[4]) / w1,
    })
df_r = pd.DataFrame(ratios)
print(df_r.describe(percentiles=[.25, .5, .75]))   # medians vs textbook ratios

What to do with the result:

  • If US500's median w2_retr is 0.58 with interquartile range 0.45–0.68, then "buy the 50–61.8% zone" is validated for that market — and you also know how often it fails (the >0.80 tail is your stop-out rate estimate).
  • Compare markets: expect Gold/Silver to show fatter w5_vs_w1 tails (wave-5 extensions) and UK100 to show more sub-threshold noise (fewer clean impulses per month).
  • Log every live wave-based trade with its ratio context in JSONL — after 100 trades you can answer "do my C=A fades outperform my W2 entries?" with data instead of memory.
Step 3 — Beyond counting: features, models and honest backtests

Wave context as ML features

You don't need a neural network to "see" waves — you need wave-derived features feeding whatever decision process you already run:

  • swing_ratio — last swing length ÷ previous swing length (captures impulse vs correction character);
  • overlap_frac — fraction of recent swing ranges overlapping (diagonals/corrections score high, impulses low);
  • retr_depth — current pullback depth vs last impulse (the W2/W4 zone detector);
  • div_flag — price extreme with RSI non-confirmation (the wave-5 signature from the personality table);
  • time_sym — correction duration ÷ impulse duration (flags "too fast to be done" corrections).

A gradient-boosted classifier on those five features, labelling "did price extend ≥1R in trend direction within N bars", is a legitimate research project — and even if you never deploy it, its feature importances tell you which Elliott concepts carry real signal on your market.

Backtest hygiene (where wave systems usually cheat)

  • Pivot look-ahead: a ZigZag pivot is only confirmed after the reversal threshold is hit — bars later. Backtests that enter "at the wave-2 low" using pivots known only in hindsight are fiction. Always lag entries to pivot-confirmation time.
  • Count survivorship: in hindsight you keep the count that worked. Live, log all valid candidate counts and trade only rule-based selections.
  • Regime split: validate separately on trend and range months (ADX-filtered) — wave entries behave completely differently across regimes.
  • Costs: CFD spreads on Silver and WTI are large relative to 5m structures; a strategy profitable on mid prices can die on spread alone. Model it.
Bottom line
Use Elliott as a context engine (where are we, where's the invalidation, where's the target) and let your existing setups from Section 3 do the triggering. Objectify pivots, measure ratios, log outcomes — that's the difference between wave analysis and wave astrology.

7 · Resources ↑ top