OPEN-SOURCE SCRIPT

FVG Magic

2 657
FVG Magic — Fair Value Gaps with Smart Mitigation, Inversion & Auto-Clean-up

FVG Magic finds every tradable Fair Value Gap (FVG), shows who powered it, and then manages each gap intelligently as price interacts with it—so your chart stays actionable and clean.

Attribution

This tool is inspired by the idea popularized in “Volumatic Fair Value Gaps [BigBeluga]” by BigBeluga (licensed CC BY-NC-SA 4.0). Credit to BigBeluga for advancing FVG visualization in the community.

Important: This is a from-scratch implementation—no code was copied from the original. I expanded the concept substantially with a different detection stack, a gap state machine (ACTIVE → 50% SQ → MITIGATED → INVERSED), auto-clean up rules, lookback/nearest-per-side pruning, zoom-proof volume meters, and timeframe auto-tuning for 15m/H1/H4.

What makes this version more accurate

Full-coverage detection (no “missed” gaps)

Default ICT-minimal rule (Bullish: low > high[2], Bearish: high < low[2]) catches all valid 3-candle FVGs.

Optional Strict filter (stricter structure checks) for traders who prefer only “clean” gaps.

Optional size percentile filter—off by default so nothing is hidden unless you choose to filter.

Correct handling of confirmations (wick vs close)

Mitigation Source is user-selectable: high/low (wick-based) or close (strict).

This avoids false “misses” when you expect wick confirmations (50% or full fill) but your logic required closes.

State-aware labelling to prevent misleading data

The Bull%/Bear% meter is shown only while a gap is ACTIVE.

As soon as a gap is 50% SQ, MITIGATED, or INVERSED, the meter is hidden and replaced with a clear tag—so you never read stale participation stats.

Robust zoom behaviour

The meter uses a fixed bar-width (not pixels), so it stays proportional and readable at any zoom level.

Deterministic lifecycle (no stale boxes)

Remove on 50% SQ (instant or delayed).

Inversion window after first entry: if price enters but doesn’t invert within N bars, the box auto-removes once fully filled.

Inversion clean up: after a confirmed flip, keep for N bars (context) then delete (or 0 = immediate).

Result: charts auto-maintain themselves and never “lie” about relevance.

Clarity near current price

Nearest-per-side (keep N closest bullish & bearish gaps by distance to the midpoint) focuses attention where it matters without altering detection accuracy.

Lookback (bars) ensures reproducible behaviour across accounts with different data history.

Timeframe-aware defaults

Sensible auto-tuning for 15m / H1 / H4 (right-extension length, meter width, inversion windows, clean up bars) to reduce setup friction and improve consistency.

What it does (under the hood)

Detects FVGs using ICT-minimal (default) or a stricter rule.

Samples volume from a 10× lower timeframe to split participation into Bull % / Bear % (sum = 100%).

Manages each gap through a state machine:
ACTIVE → 50% SQ (midline) → MITIGATED (full) → INVERSED (SR flip after fill).

Auto-clean up keeps only relevant levels, per your rules.

Dashboard (top-right) displays counts by side and the active state tags.

How to use it

First run (show everything)

Use Strict FVG Filter: OFF

Enable Size Filter (percentile): OFF

Mitigation Source: high/low (wick-based) or close (stricter), as you prefer.

Remove on 50% SQ: ON, Delay: 0

Read the context

While ACTIVE, use the Bull%/Bear% meter to gauge demand/supply behind the impulse that created the gap.

Confluence with your HTF structure, sessions, VWAP, OB/FVG, RSI/MACD, etc.

Trade interactions

50% SQ: often the highest-quality interaction; if removal is ON, the box clears = “job done.”

Full mitigation then rejection through the other side → tag changes to INVERSED (acts like SR). Keep for N bars, then auto-remove.

Keep the chart tidy (optional)

If too busy, enable Size Filter or set Nearest per side to 2–4.

Use Lookback (bars) to make behaviour consistent across symbols and histories.

Inputs (key ones)

Use Strict FVG Filter: OFF(default)/ON

Enable Size Filter (percentile): OFF(default)/ON + threshold

Mitigation Source: high/low or close

Remove on 50% SQ + Delay

Inversion window after entry (bars)

Remove inversed after (bars)

Lookback (bars), Nearest per side (N)

Right Extension Bars, Max FVGs, Meter width (bars)

Colours: Bullish, Bearish, Inversed fill

Suggested defaults (per TF)

15m: Extension 50, Max 12, Inversion window 8, Clean up 8, Meter width 20

H1: Extension 25, Max 10, Inversion window 6, Clean up 6, Meter width 15

H4: Extension 15, Max 8, Inversion window 5, Clean up 5, Meter width 10

Notes & edge cases

If a wick hits 50% or the far edge but state doesn’t change, you’re likely on close mode—switch to high/low for wick-based behaviour.

If a gap disappears, it likely met a clean up condition (50% removal, inversion window, inversion clean up, nearest-per-side, lookback, or max-cap).

Meters are hidden after ACTIVE to avoid stale percentages.

Disclaimer

The information and publications are not meant to be, and do not constitute, financial, investment, trading, or other types of advice or recommendations supplied or endorsed by TradingView. Read more in the Terms of Use.