◆ New — Strategy Validator, Code Fixer & Prop Compliance Checker are live. Try one free →
Home / Indicators / Fair Value Gaps (FVG)
Price Structure indicator

Fair Value Gaps (FVG)

A three-candle pattern marking a price range the market skipped over in one fast move, leaving an untraded gap between the first and third candles.

Illustrative diagram — not live market data.

What it is

A fair value gap (FVG) — also called an imbalance — is a three-candle price pattern popularized by Smart Money Concepts terminology. It appears when the middle candle moves so quickly that the wicks of the candles on either side of it do not overlap: in a bullish FVG, the low of the third candle sits above the high of the first, leaving a price band in between that traded only during the fast middle candle. The pattern has a fully deterministic definition, which means it can be coded, detected, and tested without judgment calls — a rarity among price-structure concepts. What an FVG is not is a guarantee. The popular claim that 'gaps always get filled' is a survivorship story: filled gaps are memorable and unfilled gaps are forgotten, and we are not aware of rigorous public evidence establishing a reliable fill rate across markets and timeframes. An FVG describes something that has already happened — a burst of one-sided movement — and says nothing certain about what price does next. This page is educational only, not financial advice, and all trading carries risk of loss.

How it works

Take any three consecutive candles and label them 1, 2, and 3. A bullish FVG exists when the low of candle 3 is strictly above the high of candle 1; the band between those two prices is the gap, created by candle 2's strong upward body. A bearish FVG is the mirror image: the high of candle 3 is below the low of candle 1. Because the pattern only needs the completed prices of three candles, it is confirmed at the close of candle 3 and does not repaint after that — though on a live, still-forming third candle the condition can flick on and off until the bar closes, so detection should wait for bar confirmation. Practitioners then track 'mitigation': a gap is called partially mitigated when price later trades back into the band, and fully mitigated when price trades through the entire band (some use the 50% midpoint, the 'consequent encroachment', as the reference instead). Each of these states is a mechanical, testable condition on subsequent highs and lows. Gap frequency and size depend heavily on timeframe and instrument — one-minute crypto charts produce them constantly, daily FX charts far less often.

How traders read it

Common settings

The core three-candle definition has no parameters, which is part of its appeal. Common optional filters include a minimum gap size (in ticks, points, or ATR multiples) to ignore trivial gaps, a displacement filter requiring the middle candle's body to exceed some threshold, and a choice of mitigation rule (any touch, 50% midpoint, or full fill). Each filter changes how many gaps you detect, so any statistics quoted about FVGs are meaningless without stating the exact rules used.

Strengths

Pitfalls to watch

Pine v6 example

//@version=6
indicator("Fair Value Gap Example", overlay = true)

minGapTicks = input.int(0, "Minimum gap size (ticks)", minval = 0)

// Three-candle definition, evaluated at the close of candle 3
bullGap = low - high[2]
bearGap = low[2] - high
minGap  = minGapTicks * syminfo.mintick

bullFvg = bullGap > minGap
bearFvg = bearGap > minGap

// Gate signals on confirmed bars so a forming candle 3 cannot flicker
plotshape(bullFvg and barstate.isconfirmed, "Bullish FVG", style = shape.triangleup, location = location.belowbar, color = color.teal, size = size.tiny)
plotshape(bearFvg and barstate.isconfirmed, "Bearish FVG", style = shape.triangledown, location = location.abovebar, color = color.maroon, size = size.tiny)

alertcondition(bullFvg and barstate.isconfirmed, "Bullish FVG confirmed", "Bullish fair value gap confirmed on bar close")
alertcondition(bearFvg and barstate.isconfirmed, "Bearish FVG confirmed", "Bearish fair value gap confirmed on bar close")

Pro tip: Before attaching any expectation to FVGs, measure them yourself: log every gap your exact rules detect on your instrument and timeframe, then record how many were touched, half-filled, and fully filled over a fixed horizon. Most traders who do this find the fill rate is neither zero nor the near-certainty folklore suggests, and that it shifts with the filters chosen. That exercise is the honest use of a deterministic pattern — as a measurable description, not a promise. Educational context only; no pattern removes the risk of loss.

Built an indicator from this? Run it through the Validator to catch look-ahead bias and repainting, or convert a strategy to Pine Script.

Educational only — not financial advice, not a recommendation to trade. No indicator is predictive; trading involves substantial risk of loss.

Catch the bug that compiles.Run auditGet Pro