Graded FVG Indicator

Graded FVG Indicator — FVG + IFVG Quality Grading by ApexFlow
━━━━━━━━━━━━━━━━━━━━ ✍️ ORIGINALITY ━━━━━━━━━━━━━━━━━━━━
Written from scratch. The only shared element is the standard, public 3-candle Fair Value Gap definition used across ICT / SMC trading. The 5-factor grading model, quality gates, close-based lifecycle engine, IFVG flip logic, fill shading and per-side zone caps are original. No code from other published scripts is reused.
━━━━━━━━━━━━━━━━━━━━ 📊 WHAT THIS INDICATOR DOES ━━━━━━━━━━━━━━━━━━━━
Most FVG indicators draw every gap they find, and most of those gaps are noise. This one adds three layers on top of standard detection:
Grading: every FVG is scored 0–100 on five measurable factors and shown as a grade out of 10.
Filtering: only gaps that clear the grade threshold and two quality gates are drawn. Everything else is discarded.
Lifecycle: every drawn zone is tracked Fresh → Tested → Partial → Retired, and a zone that price closes through can flip into an Inversion FVG (IFVG).
A standard FVG indicator answers "where are the gaps?" This one also answers "which gaps are worth watching, and what has price done with them since?"
━━━━━━━━━━━━━━━━━━━━ 🔍 FVG DETECTION METHODOLOGY ━━━━━━━━━━━━━━━━━━━━
Candle 1 = bar[2], candle 2 (displacement) = bar[1], candle 3 = current bar. Evaluated on confirmed bars only.
Bullish FVG: low > high[2] → Top = low (candle 3's low), Bottom = high[2] (candle 1's high)
Bearish FVG: high < low[2] → Top = low[2] (candle 1's low), Bottom = high (candle 3's high)
Candle 2 creates the gap, but its own high and low are not part of the zone.
ATR yardstick: every size is measured as a multiple of ATR(14), so grades mean the same thing on any symbol and timeframe. The script uses ATR[2], the value from before the displacement candle, so a huge candle 2 can't inflate the ATR and make itself look smaller.
Ramp function: most factors convert a measurement to a 0–1 score with ramp(x, lo, hi) = clamp((x − lo) / (hi − lo), 0, 1) Below lo → 0, above hi → 1, linear in between.
━━━━━━━━━━━━━━━━━━━━ 🏅 GRADING SYSTEM (0–10) ━━━━━━━━━━━━━━━━━━━━
Each FVG is scored 0–100 at creation from five factors.
⚡ Displacement (max 30 pts): how forcefully price moved.
bodyATR = candle 2 body in the gap direction ÷ ATR[2] (zero if candle 2 closed against the gap)
bodyShare = body ÷ candle 2 range
closeLoc = where candle 2 closed within its range, measured toward the gap direction
legATR = (close − open[2]) in the gap direction ÷ ATR[2] disp = 0.40·ramp(bodyATR, 0.5, 2.0) + 0.25·ramp(bodyShare, 0.40, 0.85) + 0.15·ramp(closeLoc, 0.50, 0.90) + 0.20·ramp(legATR, 1.0, 3.0)
🏗️ Structure (max 25 pts): did the move break something that mattered?
Swings are tracked internally with pivots (3 bars each side). A swing stays "intact" until a candle closes beyond it. Nothing is drawn.
Swing break: candle 2 or 3 closed through the latest intact swing → +0.55
Range break: candle 3 closed beyond the highest high / lowest low of the 20 bars ending at candle 1 → +0.25
Squeeze bonus, only if a break happened: 0.20 × (1 − ramp(10-bar range ÷ ATR[2], 2.5, 6.0)). Breaking out of a tight base earns more.
No break, but the move agrees with the direction of the last swing break → 0.35 (continuation)
Otherwise → 0
📈 Relative Volume (max 15 pts): was there participation?
rvol = volume[1] ÷ SMA(volume, 20)[2]
vol = ramp(rvol, 0.8, 2.2). Capped, so a 10× spike counts no more than 2.2×.
📐 Gap Size (max 15 pts): is the gap meaningful?
gapATR = (top − bottom) ÷ ATR[2]
< 0.10 → 0 (noise) | 0.10–0.50 → ramps up to 1 | 0.50–1.50 → 1 | > 1.50 → declines to 0.4 at 3.0
Abnormally large gaps (news, thin liquidity) are scored down rather than rewarded.
🗺️ Context (max 15 pts): is it in a meaningful location?
traffic = share of the 50 bars before candle 1 whose high–low range overlaps the gap
fresh = 1 − ramp(traffic, 0.05, 0.40). Untouched territory scores high; congestion scores low.
pos = gap midpoint's position inside the 50-bar high–low range (0 = range low, 1 = range high)
edge = min(1, |pos − 0.5| × 2). The middle of the range scores 0; the edge or beyond scores 1.
ctx = 0.55·fresh + 0.45·edge
Final score score = 30·disp + 25·struct + 15·volEff + 15·size + 15·ctx grade = floor(score) ÷ 10, so 69.9 displays as 6.9, never 7.0
Grade thresholds:
🟩 HIGH ≥ 7.0 | 🟨 MEDIUM ≥ 5.0 | ⬜ LOW < 5.0
Default display: HIGH only
Hover any zone's tag to see its full breakdown: every sub-score, the RVOL multiple, gap size in ATR, and which gate capped it, if any.
━━━━━━━━━━━━━━━━━━━━ 🛡️ QUALITY GATES (VOLUME CAN'T RESCUE A WEAK GAP) ━━━━━━━━━━━━━━━━━━━━
Quality-scaled volume:
core = (30·disp + 25·struct + 15·size + 15·ctx) ÷ 85
volEff = vol × ramp(core, 0, 0.60) Volume only counts in full when the other four factors are already solid (core ≥ 0.60). At core 0.30 it counts half.
Hard gates for HIGH:
Displacement sub-grade ≥ 4.5/10
gapATR ≥ 0.25 Fail one → capped at MEDIUM. Fail both → LOW, regardless of volume.
No-volume symbols: when volume is missing (some indices, FX feeds), score = 100 × core. The other four factors fill the full scale. Volume = "Ignore" forces this mode.
Example: candle 2 = 1.8 ATR closing near its high, breaks a swing high out of a 4-ATR base, 0.6 ATR gap in fresh territory, 1.8× RVOL → 27.2 + 22.9 + 10.7 + 15 + 15 = 90.8 → 9.0/10 HIGH. Weak candle 2 + 5× volume spike → core ≈ 0.28, volume counts less than half → ≈ 3/10 LOW.
━━━━━━━━━━━━━━━━━━━━ 🔄 ZONE LIFECYCLE ━━━━━━━━━━━━━━━━━━━━
Each zone stores two fill depths, updated on every confirmed bar:
wickDepth = how far a wick has reached into the zone (0–1 of its height)
closeDepth = how far a candle close has reached into the zone
States:
🆕 FRESH: untouched
👆 TESTED: wickDepth > 0. A deep wick that closes back out stays TESTED: it's a rejection, not a fill.
🌗 PARTIAL: closeDepth ≥ 0.5, a close past the 50% line (switchable to wick-based)
❌ Retired, per the Mitigation Rule: → Close Through (default): a close beyond the far edge → INVALIDATED → Full Wick Fill: wickDepth reaches 1 → MITIGATED → Close Beyond CE: a close past 50% → MITIGATED A close beyond the far edge always invalidates. Zones are never checked on their own creation bar.
━━━━━━━━━━━━━━━━━━━━ 🟣 INVERSION FVG (IFVG) ━━━━━━━━━━━━━━━━━━━━
When a zone is closed through, the same price range can flip role:
Broken bullish FVG → IFVG ▼ (resistance)
Broken bearish FVG → IFVG ▲ (support)
Break Requirement:
Displacement Gap (default): the breaking candle must itself be candle 3 of a new FVG in the opposite direction, i.e. a real displacement, not a drift
Strong Body: breaking body ≥ 1.0 × ATR
Any Close Through: every close-through flips
IFVG grade:
brkBody = breaking candle body in the break direction ÷ ATR
ifvgScore = score × (0.70 + 0.30·ramp(brkBody, 0.3, 1.5)) If the new grade falls below the display tier, the zone is retired instead.
After the flip, the zone is redrawn in purple from the breaking candle onward and restarts as FRESH. A zone flips only once; closing back through an IFVG retires it.
IFVG ≠ BPR: a Balanced Price Range is only the overlap of a bullish and a bearish FVG. An IFVG is the whole failed zone with its role reversed.
━━━━━━━━━━━━━━━━━━━━ 🔗 MERGING & ZONE LIMITS ━━━━━━━━━━━━━━━━━━━━
Merge: if overlap ÷ smaller zone height ≥ 50%, a new same-direction FVG merges into the existing zone (union of both ranges, better grade kept, reset to FRESH).
Per-side caps: support zones (bullish FVG, IFVG ▲) and resistance zones (bearish FVG, IFVG ▼) are capped separately, 4 each. The oldest zone on a side is removed first, so a strong trend never pushes the other side off the chart.
Only drawn zones are stored. Lower grades are discarded on the spot, which keeps the script well inside TradingView's drawing limits.
━━━━━━━━━━━━━━━━━━━━ 🎨 VISUALS ━━━━━━━━━━━━━━━━━━━━
Two layers per zone: a faint ghost box shows the full original zone, and a solid box shows only the unfilled remainder. The solid box shrinks as price fills the zone.
Opacity drops at each lifecycle step and with lower grades, so a FRESH 9/10 zone stands out most.
Tag at the right edge, e.g. "FVG 8.4/10 · FRESH" or "IFVG ▼ 7.6/10 · TESTED". Hover it for the breakdown.
🟢 Bullish | 🔴 Bearish | 🟣 IFVG. All colours are adjustable.
━━━━━━━━━━━━━━━━━━━━ 🔔 ALERTS ━━━━━━━━━━━━━━━━━━━━
New HIGH bullish FVG / new HIGH bearish FVG
First test of a bullish FVG / a bearish FVG
New IFVG / first test of an IFVG
One "Any alert() function call" alert whose message includes the grade and the zone's price levels All alerts fire once per bar close.
━━━━━━━━━━━━━━━━━━━━ 💡 WHAT IS ORIGINAL ━━━━━━━━━━━━━━━━━━━━
A 5-factor 0–100 FVG grade (displacement, structure, RVOL, size, context), shown out of 10
Quality-scaled volume plus hard gates, so volume can never promote a weak gap
Pre-displacement ATR, so a big candle can't distort its own measurement
A congestion measure that counts prior bars already traded inside the gap
Separate wick and close fill depths, so wick rejections aren't counted as fills
Graded IFVG flip with a selectable break requirement, drawn from the breaking candle onward
Two-layer fill shading, per-side zone caps, and a hover breakdown for every zone
━━━━━━━━━━━━━━━━━━━━ 🧭 HOW TO USE ━━━━━━━━━━━━━━━━━━━━
Focus on FRESH zones with high grades (8+/10).
Hover the tag to see why a zone scored well. Strong displacement + structure is the core.
Watch the first return: a wick rejection keeps a zone TESTED, while a close past 50% shows the imbalance being absorbed.
Treat purple IFVGs as flipped context: former support acting as resistance, or the reverse.
Combine with your own bias, session and risk rules. The grade ranks zones; it does not time entries.
━━━━━━━━━━━━━━━━━━━━ ⚙️ RECOMMENDED SETTINGS ━━━━━━━━━━━━━━━━━━━━
Stocks / Futures: defaults
Crypto / FX: HIGH Grade 7.5 (these markets print more strong gaps)
Indices / no-volume feeds: Volume = Ignore
Scalping (1–5m): Context Range 30, Max Zones per Side 3
Swing (4H–D): defaults
Cleaner chart: Labels = Off, Shade Filled Portion = On
More zones: Display = HIGH + MEDIUM
━━━━━━━━━━━━━━━━━━━━
No repainting. No lookahead. No request.security(). Zones are created, graded and updated only on barstate.isconfirmed, using the chart's own timeframe. The only thing that changes on the live bar is the boxes' right edge.
━━━━━━━━━━━━━━━━━━━━ 🧩 WHY THESE COMPONENTS WORK TOGETHER ━━━━━━━━━━━━━━━━━━━━
An FVG on its own only says price moved fast enough to leave a gap. Each factor checks a different question:
Displacement: was the move forceful?
Structure: did it break anything?
Volume: was there participation?
Size: is the gap meaningful?
Context: is it in fresh territory, at a relevant location?
No single factor separates a meaningful imbalance from a random gap; the combined grade does that ranking. The lifecycle and IFVG layers then show what price has done with the zone since. The result is fewer zones on the chart, each with a clear reason for being there.
━━━━━━━━━━━━━━━━━━━━ ⚠️ LIMITATIONS ━━━━━━━━━━━━━━━━━━━━
A grade measures how significant an imbalance was when it formed. It is not a probability that price will react, and not an entry signal.
Weights and thresholds are fixed heuristics. Tune the grade thresholds for your market.
Volume scoring is only as good as your data feed.
Educational purposes only. Not financial advice.
━━━━━━━━━━━━━━━━━━━━ ✍️ ORIGINALITY ━━━━━━━━━━━━━━━━━━━━
Written from scratch. The only shared element is the standard, public 3-candle Fair Value Gap definition used across ICT / SMC trading. The 5-factor grading model, quality gates, close-based lifecycle engine, IFVG flip logic, fill shading and per-side zone caps are original. No code from other published scripts is reused.
━━━━━━━━━━━━━━━━━━━━ 📊 WHAT THIS INDICATOR DOES ━━━━━━━━━━━━━━━━━━━━
Most FVG indicators draw every gap they find, and most of those gaps are noise. This one adds three layers on top of standard detection:
Grading: every FVG is scored 0–100 on five measurable factors and shown as a grade out of 10.
Filtering: only gaps that clear the grade threshold and two quality gates are drawn. Everything else is discarded.
Lifecycle: every drawn zone is tracked Fresh → Tested → Partial → Retired, and a zone that price closes through can flip into an Inversion FVG (IFVG).
A standard FVG indicator answers "where are the gaps?" This one also answers "which gaps are worth watching, and what has price done with them since?"
━━━━━━━━━━━━━━━━━━━━ 🔍 FVG DETECTION METHODOLOGY ━━━━━━━━━━━━━━━━━━━━
Candle 1 = bar[2], candle 2 (displacement) = bar[1], candle 3 = current bar. Evaluated on confirmed bars only.
Bullish FVG: low > high[2] → Top = low (candle 3's low), Bottom = high[2] (candle 1's high)
Bearish FVG: high < low[2] → Top = low[2] (candle 1's low), Bottom = high (candle 3's high)
Candle 2 creates the gap, but its own high and low are not part of the zone.
ATR yardstick: every size is measured as a multiple of ATR(14), so grades mean the same thing on any symbol and timeframe. The script uses ATR[2], the value from before the displacement candle, so a huge candle 2 can't inflate the ATR and make itself look smaller.
Ramp function: most factors convert a measurement to a 0–1 score with ramp(x, lo, hi) = clamp((x − lo) / (hi − lo), 0, 1) Below lo → 0, above hi → 1, linear in between.
━━━━━━━━━━━━━━━━━━━━ 🏅 GRADING SYSTEM (0–10) ━━━━━━━━━━━━━━━━━━━━
Each FVG is scored 0–100 at creation from five factors.
⚡ Displacement (max 30 pts): how forcefully price moved.
bodyATR = candle 2 body in the gap direction ÷ ATR[2] (zero if candle 2 closed against the gap)
bodyShare = body ÷ candle 2 range
closeLoc = where candle 2 closed within its range, measured toward the gap direction
legATR = (close − open[2]) in the gap direction ÷ ATR[2] disp = 0.40·ramp(bodyATR, 0.5, 2.0) + 0.25·ramp(bodyShare, 0.40, 0.85) + 0.15·ramp(closeLoc, 0.50, 0.90) + 0.20·ramp(legATR, 1.0, 3.0)
🏗️ Structure (max 25 pts): did the move break something that mattered?
Swings are tracked internally with pivots (3 bars each side). A swing stays "intact" until a candle closes beyond it. Nothing is drawn.
Swing break: candle 2 or 3 closed through the latest intact swing → +0.55
Range break: candle 3 closed beyond the highest high / lowest low of the 20 bars ending at candle 1 → +0.25
Squeeze bonus, only if a break happened: 0.20 × (1 − ramp(10-bar range ÷ ATR[2], 2.5, 6.0)). Breaking out of a tight base earns more.
No break, but the move agrees with the direction of the last swing break → 0.35 (continuation)
Otherwise → 0
📈 Relative Volume (max 15 pts): was there participation?
rvol = volume[1] ÷ SMA(volume, 20)[2]
vol = ramp(rvol, 0.8, 2.2). Capped, so a 10× spike counts no more than 2.2×.
📐 Gap Size (max 15 pts): is the gap meaningful?
gapATR = (top − bottom) ÷ ATR[2]
< 0.10 → 0 (noise) | 0.10–0.50 → ramps up to 1 | 0.50–1.50 → 1 | > 1.50 → declines to 0.4 at 3.0
Abnormally large gaps (news, thin liquidity) are scored down rather than rewarded.
🗺️ Context (max 15 pts): is it in a meaningful location?
traffic = share of the 50 bars before candle 1 whose high–low range overlaps the gap
fresh = 1 − ramp(traffic, 0.05, 0.40). Untouched territory scores high; congestion scores low.
pos = gap midpoint's position inside the 50-bar high–low range (0 = range low, 1 = range high)
edge = min(1, |pos − 0.5| × 2). The middle of the range scores 0; the edge or beyond scores 1.
ctx = 0.55·fresh + 0.45·edge
Final score score = 30·disp + 25·struct + 15·volEff + 15·size + 15·ctx grade = floor(score) ÷ 10, so 69.9 displays as 6.9, never 7.0
Grade thresholds:
🟩 HIGH ≥ 7.0 | 🟨 MEDIUM ≥ 5.0 | ⬜ LOW < 5.0
Default display: HIGH only
Hover any zone's tag to see its full breakdown: every sub-score, the RVOL multiple, gap size in ATR, and which gate capped it, if any.
━━━━━━━━━━━━━━━━━━━━ 🛡️ QUALITY GATES (VOLUME CAN'T RESCUE A WEAK GAP) ━━━━━━━━━━━━━━━━━━━━
Quality-scaled volume:
core = (30·disp + 25·struct + 15·size + 15·ctx) ÷ 85
volEff = vol × ramp(core, 0, 0.60) Volume only counts in full when the other four factors are already solid (core ≥ 0.60). At core 0.30 it counts half.
Hard gates for HIGH:
Displacement sub-grade ≥ 4.5/10
gapATR ≥ 0.25 Fail one → capped at MEDIUM. Fail both → LOW, regardless of volume.
No-volume symbols: when volume is missing (some indices, FX feeds), score = 100 × core. The other four factors fill the full scale. Volume = "Ignore" forces this mode.
Example: candle 2 = 1.8 ATR closing near its high, breaks a swing high out of a 4-ATR base, 0.6 ATR gap in fresh territory, 1.8× RVOL → 27.2 + 22.9 + 10.7 + 15 + 15 = 90.8 → 9.0/10 HIGH. Weak candle 2 + 5× volume spike → core ≈ 0.28, volume counts less than half → ≈ 3/10 LOW.
━━━━━━━━━━━━━━━━━━━━ 🔄 ZONE LIFECYCLE ━━━━━━━━━━━━━━━━━━━━
Each zone stores two fill depths, updated on every confirmed bar:
wickDepth = how far a wick has reached into the zone (0–1 of its height)
closeDepth = how far a candle close has reached into the zone
States:
🆕 FRESH: untouched
👆 TESTED: wickDepth > 0. A deep wick that closes back out stays TESTED: it's a rejection, not a fill.
🌗 PARTIAL: closeDepth ≥ 0.5, a close past the 50% line (switchable to wick-based)
❌ Retired, per the Mitigation Rule: → Close Through (default): a close beyond the far edge → INVALIDATED → Full Wick Fill: wickDepth reaches 1 → MITIGATED → Close Beyond CE: a close past 50% → MITIGATED A close beyond the far edge always invalidates. Zones are never checked on their own creation bar.
━━━━━━━━━━━━━━━━━━━━ 🟣 INVERSION FVG (IFVG) ━━━━━━━━━━━━━━━━━━━━
When a zone is closed through, the same price range can flip role:
Broken bullish FVG → IFVG ▼ (resistance)
Broken bearish FVG → IFVG ▲ (support)
Break Requirement:
Displacement Gap (default): the breaking candle must itself be candle 3 of a new FVG in the opposite direction, i.e. a real displacement, not a drift
Strong Body: breaking body ≥ 1.0 × ATR
Any Close Through: every close-through flips
IFVG grade:
brkBody = breaking candle body in the break direction ÷ ATR
ifvgScore = score × (0.70 + 0.30·ramp(brkBody, 0.3, 1.5)) If the new grade falls below the display tier, the zone is retired instead.
After the flip, the zone is redrawn in purple from the breaking candle onward and restarts as FRESH. A zone flips only once; closing back through an IFVG retires it.
IFVG ≠ BPR: a Balanced Price Range is only the overlap of a bullish and a bearish FVG. An IFVG is the whole failed zone with its role reversed.
━━━━━━━━━━━━━━━━━━━━ 🔗 MERGING & ZONE LIMITS ━━━━━━━━━━━━━━━━━━━━
Merge: if overlap ÷ smaller zone height ≥ 50%, a new same-direction FVG merges into the existing zone (union of both ranges, better grade kept, reset to FRESH).
Per-side caps: support zones (bullish FVG, IFVG ▲) and resistance zones (bearish FVG, IFVG ▼) are capped separately, 4 each. The oldest zone on a side is removed first, so a strong trend never pushes the other side off the chart.
Only drawn zones are stored. Lower grades are discarded on the spot, which keeps the script well inside TradingView's drawing limits.
━━━━━━━━━━━━━━━━━━━━ 🎨 VISUALS ━━━━━━━━━━━━━━━━━━━━
Two layers per zone: a faint ghost box shows the full original zone, and a solid box shows only the unfilled remainder. The solid box shrinks as price fills the zone.
Opacity drops at each lifecycle step and with lower grades, so a FRESH 9/10 zone stands out most.
Tag at the right edge, e.g. "FVG 8.4/10 · FRESH" or "IFVG ▼ 7.6/10 · TESTED". Hover it for the breakdown.
🟢 Bullish | 🔴 Bearish | 🟣 IFVG. All colours are adjustable.
━━━━━━━━━━━━━━━━━━━━ 🔔 ALERTS ━━━━━━━━━━━━━━━━━━━━
New HIGH bullish FVG / new HIGH bearish FVG
First test of a bullish FVG / a bearish FVG
New IFVG / first test of an IFVG
One "Any alert() function call" alert whose message includes the grade and the zone's price levels All alerts fire once per bar close.
━━━━━━━━━━━━━━━━━━━━ 💡 WHAT IS ORIGINAL ━━━━━━━━━━━━━━━━━━━━
A 5-factor 0–100 FVG grade (displacement, structure, RVOL, size, context), shown out of 10
Quality-scaled volume plus hard gates, so volume can never promote a weak gap
Pre-displacement ATR, so a big candle can't distort its own measurement
A congestion measure that counts prior bars already traded inside the gap
Separate wick and close fill depths, so wick rejections aren't counted as fills
Graded IFVG flip with a selectable break requirement, drawn from the breaking candle onward
Two-layer fill shading, per-side zone caps, and a hover breakdown for every zone
━━━━━━━━━━━━━━━━━━━━ 🧭 HOW TO USE ━━━━━━━━━━━━━━━━━━━━
Focus on FRESH zones with high grades (8+/10).
Hover the tag to see why a zone scored well. Strong displacement + structure is the core.
Watch the first return: a wick rejection keeps a zone TESTED, while a close past 50% shows the imbalance being absorbed.
Treat purple IFVGs as flipped context: former support acting as resistance, or the reverse.
Combine with your own bias, session and risk rules. The grade ranks zones; it does not time entries.
━━━━━━━━━━━━━━━━━━━━ ⚙️ RECOMMENDED SETTINGS ━━━━━━━━━━━━━━━━━━━━
Stocks / Futures: defaults
Crypto / FX: HIGH Grade 7.5 (these markets print more strong gaps)
Indices / no-volume feeds: Volume = Ignore
Scalping (1–5m): Context Range 30, Max Zones per Side 3
Swing (4H–D): defaults
Cleaner chart: Labels = Off, Shade Filled Portion = On
More zones: Display = HIGH + MEDIUM
━━━━━━━━━━━━━━━━━━━━
No repainting. No lookahead. No request.security(). Zones are created, graded and updated only on barstate.isconfirmed, using the chart's own timeframe. The only thing that changes on the live bar is the boxes' right edge.
━━━━━━━━━━━━━━━━━━━━ 🧩 WHY THESE COMPONENTS WORK TOGETHER ━━━━━━━━━━━━━━━━━━━━
An FVG on its own only says price moved fast enough to leave a gap. Each factor checks a different question:
Displacement: was the move forceful?
Structure: did it break anything?
Volume: was there participation?
Size: is the gap meaningful?
Context: is it in fresh territory, at a relevant location?
No single factor separates a meaningful imbalance from a random gap; the combined grade does that ranking. The lifecycle and IFVG layers then show what price has done with the zone since. The result is fewer zones on the chart, each with a clear reason for being there.
━━━━━━━━━━━━━━━━━━━━ ⚠️ LIMITATIONS ━━━━━━━━━━━━━━━━━━━━
A grade measures how significant an imbalance was when it formed. It is not a probability that price will react, and not an entry signal.
Weights and thresholds are fixed heuristics. Tune the grade thresholds for your market.
Volume scoring is only as good as your data feed.
Educational purposes only. Not financial advice.
Clause de non-responsabilité
Les informations et publications ne sont pas destinées à être, et ne constituent pas, des conseils ou recommandations financiers, d'investissement, de trading ou autres fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.
Clause de non-responsabilité
Les informations et publications ne sont pas destinées à être, et ne constituent pas, des conseils ou recommandations financiers, d'investissement, de trading ou autres fournis ou approuvés par TradingView. Pour en savoir plus, consultez les Conditions d'utilisation.