🔥Black Friday Sale: Get 25% OFF Premium with code BLACKFRIDAY — Sale ends December 1st!🎉
Smart Money Concepts (SMC) Trading — Complete Guide to Market Structure, Liquidity Grabs, and Order Blocks

Smart Money Concepts (SMC) Trading — Complete Guide to Market Structure, Liquidity Grabs, and Order Blocks

By HorizonAI Team

Smart Money Concepts (SMC) are everywhere right now—ICT‑style charts, liquidity grabs, order blocks, fair value gaps, kill zones.
But most explanations are either too vague (“trade with smart money”) or too complicated to actually use or automate.

This guide gives you a clear, practical SMC framework you can apply to Forex, indices, crypto, and stocks on 1m–D1 timeframes, including:

  • What SMC really is (ICT‑style BOS/CHOCH, liquidity hunts, FVGs, premium/discount)
  • How to read market structure with higher highs/lows and true changes of character
  • Where liquidity actually sits and how stop hunts fit into the picture
  • How order blocks and fair value gaps connect to entries and risk
  • How you’d start automating SMC ideas in Pine Script on EURUSD

By the end, you’ll understand SMC structure well enough to start testing and refining your own rules—and then use HorizonAI to generate the code and prebuilt SMC scripts for you.

What Are Smart Money Concepts (SMC)?

At its core, SMC is a way of reading price action through the lens of institutional behavior:

  • Price trends via higher highs / higher lows (bullish) or lower highs / lower lows (bearish)
  • Institutions need liquidity to enter big positions (they hunt stops and resting orders)
  • After taking liquidity, price often reprices back toward a “fair value” zone

ICT‑style SMC focuses on:

  • BOS (Break of Structure): trend continuation
  • CHOCH (Change of Character): early trend reversal
  • Liquidity grabs / stop hunts: wicks beyond obvious highs/lows
  • Order blocks: last opposing candle before a strong move
  • Fair value gaps (FVGs): 3‑candle imbalances where price “skipped” orders
  • Premium / discount: trading above/below the 50% level of a swing

SMC is not magic. It’s just a more precise vocabulary for things price has always done.

Market Structure 101 — HH/HL and LH/LL

Before you talk about BOS or CHOCH, you need a clear structure model.

Bullish Market Structure

Bullish structure is defined by:

  • Higher Highs (HH)
  • Higher Lows (HL)

In other words:

  • Each swing high takes out the previous swing high
  • Each pullback low stays above the previous low

Bearish Market Structure

Bearish structure is the mirror:

  • Lower Highs (LH)
  • Lower Lows (LL)

Price makes:

  • New lows below prior lows
  • Pullbacks that fail to break the prior high

BOS vs CHOCH (ICT Style)

  • BOS (Break of Structure):
    • A trend‑following break in the direction of the existing trend
    • Example: in a bullish trend (HH/HL), when price breaks the previous swing high, that’s a bullish BOS
  • CHOCH (Change of Character):
    • A first significant break against the current trend
    • Example: in a bullish trend, the first time price breaks the previous swing low, that’s a bearish CHOCH (potential trend reversal)

Key insight:
Don’t call every micro tick a BOS/CHOCH. You need a consistent swing definition (e.g., fractals, zigzag, or visual swing highs/lows).

Visualizing Structure in Pine Script (Simple)

You don’t need full SMC logic to start experimenting. You can visualize basic swings and structure with a simple script:

//@version=5
indicator("Simple Market Structure (Swings)", overlay = true)

leftBars  = input.int(2, "Left Bars")
rightBars = input.int(2, "Right Bars")

// Swing highs/lows using built-in functions
swHigh = ta.pivothigh(high, leftBars, rightBars)
swLow  = ta.pivotlow(low, leftBars, rightBars)

plotshape(not na(swHigh), title = "Swing High", style = shape.triangledown,
     location = location.abovebar, color = color.red, size = size.tiny)
plotshape(not na(swLow), title = "Swing Low", style = shape.triangleup,
     location = location.belowbar, color = color.green, size = size.tiny)

From here, you can start asking:
“When a swing high gets broken, how often does price continue vs reverse?”
That’s the kind of question HorizonAI can help you test quickly.

Liquidity, Stop Hunts, and Why Price Wicks Extremes

In SMC, liquidity is simply orders waiting to be filled:

  • Retail stops above equal highs / below equal lows
  • Breakout orders at obvious levels
  • Resting limit orders from larger players

Liquidity Pools

Common liquidity pools:

  • Equal highs / equal lows (clusters of stops)
  • Previous day high/low
  • Session highs/lows (London, New York)
  • Big round numbers (1.1000 on EURUSD, 4000 on ES, etc.)

Liquidity Grabs / Stop Hunts

A liquidity grab (stop hunt, stop run) is when price:

  1. Pushes beyond an obvious high/low (triggering stops/entries)
  2. Leaves a wick or short‑lived break
  3. Then reverses back into the prior range

In SMC, this is often seen as smart money filling large orders against late retail entries.

Example: Session Liquidity Grab on EURUSD (Conceptual)

On a 15m EURUSD chart:

  • Price forms equal highs into London open
  • New York session pushes price just above that high
  • A large wick appears, then price sells off

You don’t need to code the full logic yet—you can mark these zones manually and later have HorizonAI help you test:

  • “What happens after EURUSD takes out prior day’s high between 13:00–16:00 UTC?”

Order Blocks — Where Institutions Leave Footprints

An order block (OB) is usually defined as:

The last opposite‑colored candle before a strong directional move that breaks structure.

In practice:

  • Bullish order block: last down candle before a sharp move up that breaks a significant high
  • Bearish order block: last up candle before a sharp move down that breaks a significant low

Different traders require:

  • Clear displacement (strong move with big candles)
  • Actual BOS caused by that move
  • Sometimes mitigation (price returning to the block and reacting)

For this guide, you can think of OBs as price zones where big orders likely sat, and where price may later react.

Using Order Blocks with Premium/Discount

Once you identify a swing:

  • Draw the 0–100% range from swing low to swing high
  • Discount zone: 0–50% (below the 50% mean)
  • Premium zone: 50–100% (above the 50% mean)

General SMC idea:

  • In a bullish context, you want to buy in discount, ideally at or near a bullish OB
  • In a bearish context, you want to sell in premium, near a bearish OB

This is a mean reversion concept inside the SMC framework: you’re entering away from extremes, back toward fair value.

Fair Value Gaps (FVG) — Imbalances in Price

A fair value gap is usually defined using a 3‑candle pattern:

  • Candle 1 high and Candle 3 low don’t overlap Candle 2’s range
  • Price “skips” levels, leaving an imbalance where very few trades occurred

In bullish moves:

  • A big up candle often leaves a bullish FVG beneath current price
  • Price may later retrace into this gap before continuing higher

In bearish moves:

  • A big down candle leaves a bearish FVG above

We don’t need a hyper‑strict rule here. For most SMC traders it’s enough to see:

  • A strong displacement candle
  • A “gap‑like” space where price could later rebalance

Simple Pine Example: Visual Premium/Discount on EURUSD

Here’s a simple, non‑SMC‑specific script that shows how you might think about premium/discount and “mean”:

//@version=5
indicator("Premium / Discount Zone (Swing-Based)", overlay = true)

length = input.int(50, "Swing Lookback (Bars)")

swHigh = ta.highest(high, length)
swLow  = ta.lowest(low, length)

mid   = (swHigh + swLow) / 2.0
inDisc = close < mid
inPrem = close > mid

plot(swHigh, "Swing High", color = color.red)
plot(swLow,  "Swing Low",  color = color.green)
plot(mid,    "Mean (50%)", color = color.yellow, style = plot.style_dashed)

// Color background based on premium/discount
bgcolor(inDisc ? color.new(color.green, 92) : inPrem ? color.new(color.red, 92) : na)

This isn’t a full SMC tool—but it mirrors the logic you’d use:

  • Identify a swing
  • Mark the 50% level (mean)
  • Observe how often price reacts differently in premium vs discount

From there, HorizonAI can help you say:

“Create a Pine Script that only takes long entries when EURUSD is in discount relative to the last 50‑bar swing.”

Putting SMC Together: A Simple Trade Narrative

On a 15m EURUSD chart:

  1. Identify bias
    • 4H structure is bullish (HH/HL, prior bearish CHOCH invalidated by new BOS up)
  2. Mark liquidity
    • Prior day high and low
    • Equal highs before London open
  3. Wait for liquidity grab
    • New York pushes above prior day high (stop hunt) and quickly rejects
  4. Watch structure
    • On 5m, a clear bearish CHOCH (first break of a prior HL) forms after the wick
  5. Find your OB / FVG in discount
    • Price pulls back into a 5m bearish OB / FVG in premium relative to the new 5m swing
  6. Enter with risk management
    • Short from the OB, stop above the wick high, target discount or opposing liquidity

You can trade this discretionary, or you can codify pieces:

  • Only trade around certain sessions (London/NY kill zones)
  • Require volatility thresholds or ATR filters
  • Log what happens after specific liquidity grabs

HorizonAI can help you turn this narrative into testable Pine Script rules without you hand‑coding every nuance.

Common SMC Mistakes to Avoid

❌ Mistake #1: Forcing SMC Onto Every Move

Not every wick is “smart money,” and not every candle is an order block.

  • Sometimes price is just random chop
  • Don’t label every tiny swing as BOS/CHOCH

❌ Mistake #2: Ignoring Time and Context

Liquidity behavior is different in:

  • Asia vs London vs New York sessions
  • Trend vs range
  • Major news days vs quiet sessions

Blindly taking every “OB + FVG” setup will overfit you to screenshots, not reality.

❌ Mistake #3: No Backtesting, Only Screenshot Bias

Most SMC content online is cherry‑picked charts.
You need to ask:

  • Over 100+ trades, what’s the actual win rate and RR of this pattern?
  • How does it behave across Forex, indices, crypto, and stocks?
  • Does it still work when you change timeframe (5m vs 15m vs 1H)?

That’s where systematic backtesting on TradingView matters.

How to Start Testing SMC Ideas (Without Going Crazy)

You don’t need a perfect, fully automated SMC indicator to start.

Begin with simple, testable rules like:

  • “After EURUSD takes out prior day’s high during New York, short if price closes back inside the range with a stop above the wick.”
  • “Only take longs in discount (below the 50% mean of the last 50 bars) when 4H structure is bullish.”
  • “Avoid trades when price is exactly at the mean; wait for premium/discount extremes.”

Then test:

  • Win rate
  • Average RR
  • Max drawdown
  • Behavior in different sessions and regimes

You can prototype these rules in plain English and let HorizonAI generate Pine Script v6 to run in TradingView.

Use HorizonAI to Automate SMC Experiments

Instead of hand‑coding BOS/CHOCH, OB, and FVG detection from scratch, you can:

  • Describe your SMC logic in plain English
  • Let HorizonAI generate Pine Script strategies and indicators
  • Access prebuilt SMC scripts (structure, liquidity, FVG helpers) as a starting point

Example prompts:

"Create a Pine Script v6 strategy for EURUSD 15m that only goes long when price is in discount relative to the last 50‑bar swing and a bullish FVG has just been filled."

"Build an indicator that marks potential liquidity grabs when price takes out the previous day’s high or low during London or New York session and then closes back inside the range."

"Generate a basic market structure tool that labels HH, HL, LH, LL and highlights the first CHOCH after a trend."

HorizonAI gives you:

  • ✅ Clean Pine Script v6 code you can paste into TradingView
  • ✅ Variations you can iterate on quickly
  • ✅ A library of SMC‑oriented helpers you can build on
Try HorizonAI and unlock SMC scripts →

Final Thoughts

Smart Money Concepts give you a structured way to read price, not a cheat code:

  1. Start with clear market structure (HH/HL, LH/LL, BOS vs CHOCH)
  2. Understand where liquidity actually sits (highs/lows, sessions, equal levels)
  3. Use order blocks, FVGs, and premium/discount as tools to define zones—not as magical reversal buttons
  4. Focus on simple, testable rules, not screenshots
  5. Use automation and backtesting to separate what feels good from what actually works

If you want to experiment with SMC on EURUSD (or any other market) without writing every line of code yourself, you can use HorizonAI to generate and refine your Pine scripts—and access prebuilt SMC tools to get started faster.

Questions about SMC structure, BOS/CHOCH, or how to test these ideas? Join our Discord community to discuss with other traders exploring SMC and automation.