DEV Community

Orion
Orion

Posted on

3 SMC Pine Script indicators every TradingView trader needs (free code inside)

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}}")
Enter fullscreen mode Exit fullscreen mode

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}}")
Enter fullscreen mode Exit fullscreen mode

Tip: use swing length 5–7 for scalping, 15–20 for swing trading.

⚠️ Repaint note: sweep detection uses ta.highest/ta.lowest on 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}}")
Enter fullscreen mode Exit fullscreen mode

Tip: lower minImpulse to 0.2% for forex, raise to 1–2% for volatile crypto.

⚠️ Repaint note: close and open reference 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)