The problem with most TradingView SMC indicators
They're either free-but-broken (static boxes, no mitigation tracking, no alerts), or they're $39.99/month subscriptions for features most traders use 20% of.
Here are three clean Pine Script v5 indicators you can paste directly into TradingView right now — a free TradingView account is all you need, no paid subscription.
The 3 SMC footprints that actually matter
Smart Money Concepts (SMC) is a popular retail trading framework that interprets price action as driven by institutional order flow. The theory holds that large players leave identifiable footprints when accumulating or distributing — though like all technical frameworks, its predictive validity is debated and results vary by market and timeframe. Three concepts dominate the methodology:
1. Fair Value Gaps (FVG)
A 3-candle pattern where the market moved so fast that not all orders filled — leaving a "gap" in price that tends to be revisited.
- Bullish FVG: current bar's low > 2-bars-ago high (up-gap)
- Bearish FVG: current bar's high < 2-bars-ago low (down-gap)
How to trade it: in an uptrend, wait for price to pull back into a Bullish FVG. Enter long as price touches the gap. Stop below the gap bottom.
2. Liquidity Zones (BSL / SSL)
Buy-Side Liquidity (BSL) pools above swing highs — retail stop-losses cluster there. Sell-Side Liquidity (SSL) pools below swing lows. Smart money sweeps these levels to grab liquidity before reversing.
A sweep = wick through the level, close back on the other side. Wait for the candle to close before entering — not the wick.
3. Order Blocks (OB)
The last bearish candle before a bullish impulse = Bullish OB. The last bullish candle before a bearish impulse = Bearish OB. Institutions leave unfilled orders in these zones and price frequently reacts when it returns.
Free code — all 3 indicators
Indicator 1: SMC FVG Lite
//@version=5
indicator("SMC FVG Lite", overlay=true, max_boxes_count=100)
showBull = input.bool(true, "Show Bullish FVGs")
showBear = input.bool(true, "Show Bearish FVGs")
extBars = input.int(30, "Extend (bars)", minval=5, maxval=100)
cBull = input.color(color.new(#26a69a, 80), "Bullish Color")
cBear = input.color(color.new(#ef5350, 80), "Bearish Color")
// 3-bar FVG detection
isBullFVG = low > high[2] // gap up
isBearFVG = high < low[2] // gap down
if isBullFVG and showBull
box.new(bar_index[2], low, bar_index + extBars, high[2],
bgcolor=cBull, border_color=color.new(#26a69a, 10), border_width=1)
if isBearFVG and showBear
box.new(bar_index[2], low[2], bar_index + extBars, high,
bgcolor=cBear, border_color=color.new(#ef5350, 10), border_width=1)
alertcondition(isBullFVG, "Bullish FVG", "🟢 Bullish FVG — {{ticker}} {{interval}} @ {{close}}")
alertcondition(isBearFVG, "Bearish FVG", "🔴 Bearish FVG — {{ticker}} {{interval}} @ {{close}}")
Install: Pine Script Editor (Alt+P) → paste → Add to chart. Works on any symbol and timeframe.
⚠️ Repaint note: FVG detection reads the current bar's low/high, which changes tick-by-tick until the bar closes. Always wait for a confirmed closed bar before acting on a signal — do not trade off a live forming candle.
Indicator 2: SMC Liquidity Zones Lite
//@version=5
indicator("SMC Liquidity Zones Lite", overlay=true,
max_lines_count=200, max_labels_count=100)
swingLen = input.int(10, "Swing Length", minval=3, maxval=50)
extBars = input.int(50, "Extend Lines (bars)", minval=5, maxval=200)
cBSL = input.color(#26a69a, "BSL Color (Buy-Side)")
cSSL = input.color(#ef5350, "SSL Color (Sell-Side)")
// Swing highs = Buy-Side Liquidity (BSL)
// Swing lows = Sell-Side Liquidity (SSL)
swHigh = ta.pivothigh(high, swingLen, swingLen)
swLow = ta.pivotlow(low, swingLen, swingLen)
if not na(swHigh)
pivBar = bar_index - swingLen
line.new(pivBar, swHigh, pivBar + extBars, swHigh,
color=cBSL, width=1, style=line.style_dashed)
label.new(pivBar, swHigh, "BSL", color=color.new(cBSL, 90),
textcolor=cBSL, style=label.style_label_down, size=size.tiny)
if not na(swLow)
pivBar = bar_index - swingLen
line.new(pivBar, swLow, pivBar + extBars, swLow,
color=cSSL, width=1, style=line.style_dashed)
label.new(pivBar, swLow, "SSL", color=color.new(cSSL, 90),
textcolor=cSSL, style=label.style_label_up, size=size.tiny)
// Sweep detection (wick through level, close back)
bullSweep = low < ta.lowest(low[1], 20) and close > ta.lowest(low[1], 20)
bearSweep = high > ta.highest(high[1], 20) and close < ta.highest(high[1], 20)
if bullSweep
label.new(bar_index, low, "SSL
Swept", color=color.new(#26a69a, 80),
textcolor=#26a69a, style=label.style_label_up, size=size.small)
if bearSweep
label.new(bar_index, high, "BSL
Swept", color=color.new(#ef5350, 80),
textcolor=#ef5350, style=label.style_label_down, size=size.small)
alertcondition(bullSweep, "Bullish Sweep", "🟢 SSL Swept — {{ticker}} {{interval}} @ {{close}}")
alertcondition(bearSweep, "Bearish Sweep", "🔴 BSL Swept — {{ticker}} {{interval}} @ {{close}}")
Tip: use swing length 5–7 for scalping, 15–20 for swing trading.
⚠️ Repaint note: sweep detection uses
ta.highest/ta.loweston the live bar — confirm signals on a closed bar only.
Indicator 3: SMC Order Blocks Lite
//@version=5
indicator("SMC Order Blocks Lite", overlay=true, max_boxes_count=100, max_labels_count=50)
minImpulse = input.float(0.5, "Min Impulse Move (%)", minval=0.1, maxval=5.0, step=0.1)
extBars = input.int(50, "Extend Boxes (bars)", minval=5, maxval=300)
obLen = input.int(3, "Impulse Lookback (bars)", minval=2, maxval=10)
cBull = input.color(color.new(#26a69a, 80), "Bullish OB")
cBear = input.color(color.new(#ef5350, 80), "Bearish OB")
// Impulse check: large body move over obLen bars
isImpulseBull = (close - close[obLen]) / close[obLen] * 100 >= minImpulse and close > open
isImpulseBear = (close[obLen] - close) / close[obLen] * 100 >= minImpulse and close < open
// OB = the candle exactly obLen bars before the impulse that had an opposing body
// (a bearish candle obLen bars ago before a bullish impulse = Bullish OB)
isBullOB = isImpulseBull and open[obLen] > close[obLen]
isBearOB = isImpulseBear and open[obLen] < close[obLen]
if isBullOB
obHigh = high[obLen]
obLow = low[obLen]
obBar = bar_index - obLen
box.new(obBar, obHigh, obBar + extBars, obLow,
bgcolor=cBull, border_color=color.new(#26a69a, 10), border_width=1)
label.new(obBar, obHigh, "BullOB",
color=color.new(#26a69a, 85), textcolor=#26a69a,
style=label.style_label_down, size=size.tiny)
if isBearOB
obHigh = high[obLen]
obLow = low[obLen]
obBar = bar_index - obLen
box.new(obBar, obHigh, obBar + extBars, obLow,
bgcolor=cBear, border_color=color.new(#ef5350, 10), border_width=1)
label.new(obBar, obLow, "BearOB",
color=color.new(#ef5350, 85), textcolor=#ef5350,
style=label.style_label_up, size=size.tiny)
alertcondition(isBullOB, "Bullish OB Formed", "📦 Bullish OB — {{ticker}} {{interval}} @ {{close}}")
alertcondition(isBearOB, "Bearish OB Formed", "📦 Bearish OB — {{ticker}} {{interval}} @ {{close}}")
Tip: lower minImpulse to 0.2% for forex, raise to 1–2% for volatile crypto.
⚠️ Repaint note:
closeandopenreference the live forming bar until it closes. Wait for a confirmed bar close before treating an OB as formed.
The 3-confluence rule (what actually works)
Single signals are for practice. Real trades come from at least 2 agreeing:
| Signal combo | Bias | Notes |
|---|---|---|
| SSL Swept + Bullish FVG in same zone | 🟢 Long | High probability reversal |
| BSL Swept + Bearish OB above | 🔴 Short | Smart money distributed above |
| Bullish OB inside Bullish FVG | 🟢 Long | Institutional confluence zone |
| HTF OB + LTF Sweep + FVG | ⭐ A+ | Strongest confluence; still requires your own risk management |
Recommended timeframe stack
| Purpose | TF | What to check |
|---|---|---|
| Bias & direction | 4H / Daily | OBs + major BSL/SSL levels |
| Setup ID | 1H / 15m | All 3 — look for confluence |
| Entry timing | 5m / 1m | FVG touch or sweep candle |
What the full Pro versions add
The code above is intentionally lite — no persistence, no mitigation tracking, no HTF overlay. The full Orion SMC Suite ($29 one-time) upgrades all three with:
- FVG Pro: mitigation tracking (gap fill detection), min size filter, live box extension, 3 alert conditions
- Liquidity Zones Pro: per-level sweep tracking (not a global approximation), equal high/low clustering, swept-level visual change
- Order Blocks MTF: HTF Order Block overlay (1H/4H/Daily), mitigation tracking, array-based persistence across bars
- Trading guide PDF: setup examples, alert configuration, recommended chart layouts
One-time payment vs $39.99/month. Code is yours permanently — no invite-only access needed.
→ Full suite for $29 (Gumroad)
Questions or issues with any of the indicators above? Drop them in the comments — happy to help.
Educational content. Past indicator signals are not a guarantee of future performance. Always trade with a defined risk management plan.
Top comments (0)