Technical Analysis · Structure

Support / Resistance / Supply & Demand Zones
Why some prices really matter

2026-06-03·11 min read·Technical Analysis

Price always stops or turns at certain levels that are invisible but someone cares about. Those levels are support and resistance. This guide covers how to draw them objectively, how they differ from supply and demand zones (the Smart Money concept), and how to tell a real breakout from a fake one.

1. What S/R Actually Is

Support: a price level below where a stack of buy orders is waiting → when price drops there, it bounces.

Resistance: a price level above where a stack of sell orders is waiting → when price rises there, it stalls.

1.1 Why They Form

  • Trapped longs: people who bought at a level and are now underwater want to exit at break-even → becomes overhead resistance.
  • Missed-the-bus crowd: people who didn't buy the prior low → they'll bid the next retest → becomes support.
  • Institutional orders: large players park bids/offers at meaningful psychological levels (round numbers, ATH, ATL).
  • Round-number psychology: BTC $50k / $60k / $70k — human brains lock onto round numbers.

2. How to Draw S/R Objectively

2.1 Swing High / Low Method

Find recent meaningful highs and lows (higher / lower than N bars on each side). Typical N = 5, 10, 20, corresponding to different strength tiers.

# Pine 5-bar Swing detection
swingHigh = high == ta.highest(high, 11)[5]  # highest among 11 bars, centered
swingLow  = low  == ta.lowest(low, 11)[5]    # lowest among 11 bars, centered

# Connect these points → real-time S/R lines

2.2 Horizontal vs Trendline

  • Horizontal S/R: fixed price level (e.g. BTC $60k).
  • Trendline S/R: angled, connecting multiple highs / lows.

3. Strength Tiers

Not all S/R levels matter equally. Dimensions for judging strength:

  1. Touch count: tagged 3+ times and bounced every time = strong support.
  2. Timeframe: monthly-chart S/R is stronger than hourly.
  3. Volume: bigger volume on the touch → institutions are defending it.
  4. Psychological location: ATH / round number / prior crash low / 1-year high.
  5. Volume Profile overlap: lines up with a POC or HVN → double confirmation.

4. From "Lines" to "Zones": Supply / Demand

Classic S/R is a single line. But in real markets, support and resistance are a range — anywhere from 0.5% to 2% wide. That's the supply / demand zone concept.

4.1 How to Define a Zone

A valid demand zone / supply zone forms when:

1. Price enters the area
2. It <<consolidates or builds a base>> there (basing pattern, 2-10 small candles)
3. Then <<leaves with force>> (one or more big candles + notable volume)

Demand zone: basing then strong move up → mark the basing area as "demand zone"
Supply zone: basing then strong move down → mark the basing area as "supply zone"

4.2 Why Zones Beat Lines

  • Wick-resistant: price entering the zone is enough to trigger, no need to hit a precise line.
  • Closer to how institutions actually fill: large players don't park everything at one price — orders are spread across a range.
  • Bakes in directional momentum via the strong-candle-exit rule.

5. Smart Money Concepts (SMC)

ICT (Inner Circle Trader) and related schools extend the supply/demand idea into "Order Blocks", "Liquidity Pools", and "Fair Value Gaps".

  • Order Block: the last opposite-direction candle before a strong trend — where institutions accumulated.
  • Liquidity Pool: stop clusters sitting just below / above an S/R line — institutions "sweep" them before reversing.
  • Fair Value Gap (FVG): an imbalance gap — price tends to come back and fill it.
SMC is mostly old playbooks with new labels
The core logic of SMC overlaps heavily with classic supply/demand. What ICT did was systematize it, name it, and pair it with the "liquidity sweep" framework — which makes it especially useful for swing trading. Just note: SMC communities love conspiracy talk about "institutional manipulators." Filter that out — the method itself works.

6. Real vs Fake Breakouts

After price punches through an S/R, two things can happen:

  • Real breakout: trend continues; old S/R becomes new S/R (role reversal).
  • Fake breakout: brief poke through, then snap back — the reverse move is even stronger.

6.1 Conditions to Confirm a Real Breakout

  1. Close through the level, not just a wick.
  2. Volume noticeably increases (at least 1.5–2x average).
  3. Breakout distance ≥ 1 ATR (avoid noise-level pokes).
  4. One follow-through candle that doesn't immediately retrace.
  5. Multi-timeframe agreement: a daily breakout should also be confirmed on the weekly.

7. Crypto-Specific Quirks

7.1 Perp vs Spot S/R

Perp S/R is influenced by liquidation prices. Levels with stacked liqs get "swept" by the market — a quick wick through followed by a snap-back. In those moments, spot-price S/R is more reliable than perp.

7.2 Liquidity Sweep Events

BTC breaking a key S/R and then fully recovering within 5–10 minutes is a textbook liquidity sweep: institutions push price through to trigger a stack of stops, absorb the cheap supply, then reverse back.

7.3 Major Psychological Levels

BTC round numbers — $50k / $60k / $70k / $80k / $100k — are powerful psychological S/R. Million-dollar-scale round numbers (ATH, prior cycle lows) can be even stronger.

8. Pine: Auto S/R + Supply / Demand Zones

//@version=5
indicator("S/R + Demand/Supply", overlay=true, max_lines_count=20)

// Swing high/low detection (11-bar window)
n = input.int(5, "Swing window (N bars each side)")
isSwingHigh = high[n] == ta.highest(high, n*2+1)
isSwingLow  = low[n] == ta.lowest(low, n*2+1)

if isSwingHigh
    line.new(bar_index[n], high[n], bar_index, high[n], color=color.red, extend=extend.right)
if isSwingLow
    line.new(bar_index[n], low[n], bar_index, low[n], color=color.green, extend=extend.right)

// Zone detection: strong exit candle (size >= 2 × avg of prior 5)
avgRange = ta.sma(high - low, 5)
strongBull = (close - open) > avgRange * 2 and close > open
strongBear = (open - close) > avgRange * 2 and close < open

if strongBull
    box.new(bar_index[2], math.max(open[1], close[1]),
            bar_index, math.min(open[2], close[2]),
            border_color=color.green, bgcolor=color.new(color.green, 90))
if strongBear
    box.new(bar_index[2], math.max(open[2], close[2]),
            bar_index, math.min(open[1], close[1]),
            border_color=color.red, bgcolor=color.new(color.red, 90))

Get started

Ready to ship what you just learned?

Want to auto-enter and exit at S/R or supply/demand zones? Write the trigger in Pine → TVSBot executes it for you. You can even set liquidity sweeps as bounce-entry triggers.

Start free trial

9. Three Key Takeaways

  1. Treat S/R as zones, not lines. Supply/demand zones are more practical than a fixed price and don't get faked out by wicks.
  2. Confirm breakouts: close + volume + 1 ATR + multi-timeframe alignment. Miss one and it may be a fake.
  3. Crypto S/R levels get swept constantly — BTC round-number battles are the most common spot.