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.
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).
- 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.
| Wave | Psychology | Typical character | Momentum / volume fingerprint |
|---|---|---|---|
| 1 | Disbelief — "just a bounce" | Choppy, hesitant, often mistaken for a correction of the old trend | Volume modest; RSI recovers from oversold but few notice |
| 2 | Fear — "told you, new lows coming" | Sharp, deep (50–78.6% of W1), sentiment returns to prior-trend extreme | Volume dries up into the low; RSI holds above the W-start reading — bullish divergence vs old low is common |
| 3 | Recognition — "this is real" | Longest, steepest, gaps and wide-range bars; breaks key levels cleanly | Highest volume of the sequence; RSI pins overbought; MACD peak of the whole cycle usually happens here |
| 4 | Boredom — profit-taking drift | Sideways, complex, time-consuming (flats/triangles); shallow (23.6–38.2% of W3) | Volume falls; RSI cools to ~40–50 without breaking regime |
| 5 | Euphoria — "can't lose" | New price high but narrower participation; can extend or truncate | Momentum divergence: price high, RSI/MACD lower high — the classic wave-5 signature |
| A | Denial — "healthy pullback" | Often mistaken for a wave-2-style dip-buying opportunity | Volume rises on down bars — first clue the character changed |
| B | Relief rally — the trap | Weak, overlapping, often in three waves; "b" for bull-trap | Low volume, momentum fails to confirm the bounce |
| C | Capitulation | Impulsive 5-wave decline, feels like wave 3 in reverse; usually ≥ length of A | Volume expands; RSI makes the extreme low of the correction |
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.
Degree labels (you only need three at once — the one you trade, one above for context, one below for timing):
| Degree | Typical chart | Label convention | Day-trading role |
|---|---|---|---|
| Primary / Intermediate | Daily–Weekly | ((1)) ((2)) / (1) (2) | Background bias only |
| Minor | H4–H1 | 1 2 3 4 5 | Context: which leg is today part of? |
| Minute | 15m–5m | i ii iii iv v | Trading degree: your setups live here |
| Minuette | 1m–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.
- 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).
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
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
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
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.
- 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.
| Measurement | Most common | Also common | Use as |
|---|---|---|---|
| Wave 2 retrace of W1 | 61.8% | 50%, 78.6% | Pullback buy zone; stop under 100% |
| Wave 3 vs W1 | 161.8% | 261.8% (extended) | Trend target / add-on level |
| Wave 4 retrace of W3 | 38.2% | 23.6%, 50% | Second pullback zone (smaller size) |
| Wave 5 | = W1 | 61.8% of W1→3; 161.8% of W4 | Exhaustion target — take profits, hunt divergence |
| Wave B retrace of A | 38–79% | >100% = expanded flat | Fade zone for the C-leg |
| Wave C vs A | 100% (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?
Applying it intraday on the focus markets — a practical routine
The three-timeframe routine
- 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".
- 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.
- 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
| Market | Wave tendency to know |
|---|---|
| US500 / US100 | Textbook 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. |
| GER40 | Impulsive 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. |
| UK100 | Slower, overlap-heavy — more W-X-Y combinations than clean impulses. Count on 15m minimum; 5m counts degrade into noise. |
| JP225 | Gap-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
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.
# 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_retris 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_w1tails (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.
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
- TradingView — Auto Chart Patterns documentationOfficial docs for the built-in pattern detection (includes the Elliott Wave auto-tool; scans the most recent 600 bars).
- ElliottWave-Forecast — Elliott Wave Theory referenceThorough free reference for rules, guidelines and every corrective structure with diagrams.
- LuxAlgo — Elliott Wave pattern rules simplifiedConcise modern summary of the rules; LuxAlgo also publish free auto-detection scripts on TradingView.
- Elliott Wave & Fibonacci — core ratio referenceThe wave-by-wave Fibonacci relationship tables this guide's fib map is cross-checked against.
- TradingView — community chart-pattern scriptsHundreds of open-source Pine Script pattern detectors (ZigZag++, harmonic scanners, EW counters) to study or fork.
- Book: Frost & Prechter — Elliott Wave Principle (1978)The canonical text. Read chapters 1–3 for structures; skim the long-horizon forecasting parts.
- Book: Constance Brown — Technical Analysis for the Trading ProfessionalBest treatment of combining oscillators with wave position (the source tradition behind the RSI-regime reads used across this site).