This module opens only after a 100% score on the Boganster Final Test — thirty questions covering Chapters 1–7. Automation multiplies whatever you know, including the gaps. Close the gaps first.
Your free 60-second preview of Chapter 8 is used — one look, that's the deal. You've seen enough to know it's worth it. Buy in to unlock it for good, no more timers.
Part 2 of 4: how the big players actually move price, twelve complete strategy playbooks, and the graduate gift — a full SMC Liquidity Sweep Pro Pine Script indicator, tested and working.
Premium module · A$2,997 one-time, on top of your ongoing membership — buying Chapter 8 doesn't replace or pause your $39/month or $398/year plan, which keeps billing until you cancel by emailing poidabogan@gmail.com. Buy now → Score 100% on the Final Test and you get one free 60-second look before checkout. Already bought it? You're set, no timer, no redirect.
THE DISCLAIMER — professional edition: Nothing in this course is financial advice. Not one word. Crypto can go to zero; leverage can go below zero faster than your mate Davo's Commodore at the lights. A bot executes YOUR strategy — automating a bad plan just loses money without the manual labour. Take any of this as financial advice and you will end up with all your belongings in a shopping trolley, living from bus stop to bus stop — except the trolley will have been ordered automatically, with express shipping. Never trade money you can't afford to lose. Some links are affiliate/referral links.
Module 8.3
8.3 Smart Money Concepts
"Smart money" means the institutions — funds, market makers, whales — whose orders are so big they can't just click BUY like you do at the servo. They have to build positions sneakily, in pieces, and that sneakiness leaves footprints on the chart. SMC is learning to read the footprints instead of being the puddle they step in.
Liquidity
Liquidity is where the resting orders are — and the biggest, juiciest clusters are stop-losses. Under every "obvious" support sits a pile of sell-stops from longs; above every obvious high sits a pile of buy-stops from shorts. Big players need those pools: you can't buy $50 million of anything without a mob of sellers, and a stop cascade IS a mob of forced sellers, on special.
The reframe
Stop thinking of price as "moving randomly" and start asking: "whose stops just got taken?" Price doesn't wander — it gets walked from one liquidity pool to the next, like a kelpie moving sheep.
Order blocks
An order block is the last opposite-coloured candle before a big impulsive move — e.g. the final red candle before price rockets up. That candle marks where an institution loaded a serious position. Because big orders can't fill all at once, they often leave unfilled interest behind — so when price returns to that zone, it frequently reacts.
Valid order blocks come before genuinely impulsive moves, ideally moves that broke structure. A red candle before a mild wiggle is just a red candle.
Fresh (untested) order blocks are stronger than ones price has already revisited three times. Like a slab at a party — first visit, plenty left; fourth visit, warm cans and regret.
Fair value gaps (FVG)
When price moves so violently that one candle's wick doesn't overlap the wick two candles back, it leaves a gap — a stretch of prices where almost no trading happened. The market hates unfinished business: price very often comes back later to "fill" that gap (trade through it) before continuing.
FVGs act as magnets and as entry zones: in an uptrend, a pullback into an FVG that formed during the rally is a classic long entry.
Not every gap fills, and not on your schedule. FVGs mark zones of interest, not appointments.
Break of Structure (BOS)
A BOS is price breaking a structural swing point in the direction of the existing trend — an uptrend taking out its previous high. It's the trend showing its licence and rego: "still valid, carry on." After a BOS, pullbacks into order blocks or FVGs left by the breaking move are the textbook continuation entries.
Change of Character (CHoCH)
A CHoCH is the opposite: price breaking a structural point against the trend — an uptrend printing its first meaningful lower low. It's the first crack in the story. One CHoCH doesn't guarantee reversal, but it means the one-way traffic is over: tighten stops, take partials, stop adding. It's the market's "oi, we need to talk" text.
Premium and discount zones
Take any trading range and split it at the 50% mark (the "equilibrium"). Above half = premium — expensive. Below half = discount — on special. The smart-money habit is brutally simple: buy in discount, sell in premium. The average punter does the exact opposite — buys the top half because it "looks strong", shorts the bottom half because it "looks weak" — and then wonders why the market seems personally offended by them.
Mitigation blocks
When an institution's position goes underwater before working out, they often re-defend the zone where they entered — buying it again both to defend the position and to fill remaining size. That origin zone is a mitigation block: price returning to it frequently gets a reaction. In practice you treat it like an order block with a backstory — mark the zone, wait for a reaction, never just assume.
Liquidity sweeps
The signature move of the whole game. Price spikes through an obvious level — the equal lows everyone's watching — triggers the pile of stops sitting there, and then immediately reverses. The wick below support wasn't a breakdown; it was a harvest. The stops provided the sellers the big player needed to buy from.
Trading it
A sweep of an obvious low followed by a fast, powerful reclaim of the level is a high-quality long signal — the trap has sprung and you're on the right side of it for once. The corollary: don't put your stop exactly where every other galah puts theirs. Just beyond the "obvious" spot is the most-harvested real estate in crypto.
Institutional trading concepts — the big picture
Accumulation → Manipulation → Distribution. The market's three-act play: big money quietly loads in a boring range (accumulation), engineers a fake move to grab liquidity and shake out the impatient (manipulation), then marks price up and sells into the excited public (distribution). Learn to ask which act you're watching.
The retail trap cycle: the breakout that lures buyers right before the reversal isn't bad luck — it's the product. Someone had to buy the top; the chart just interviewed for the role.
Timeframe alignment: institutions build narratives on daily/weekly charts and execute on lower ones. Read structure top-down: weekly bias → daily zones → 4H/1H entries.
Poida's Pearler
"Smart money is like the bloke at the auction who never raises his hand — he's got a secret nod goin' with the auctioneer. You're out front bidding against yourself gettin' excited. SMC is learnin' the nod, mate. Once ya see it, ya can't unsee it."
🎁 Graduate gift: SMC Liquidity Sweep Pro
Everything you just read in this module, wired into one Pine Script indicator. This isn't a teaching toy like the EMA cross in 8.6 — it's the real sequence: sweep, displacement, structure break, fair value gap, retest, all watched automatically so you're not squinting at every wick trying to spot it live. Consider it your diploma with a power cord.
Detects both external and internal liquidity sweeps — the wick-through-then-reclaim pattern from this module, on major swings and minor ones separately.
Requires genuine displacement before it takes a sweep seriously — a candle sized against ATR, optionally backed by volume above its average. A weak, noisy sweep gets ignored, same discipline as 8.2's "location and volume make the pattern".
Confirms BOS and CHoCH automatically on the external swing structure, drawing the break line and label for you.
Waits for the retest of the resulting order block and fair value gap before it ever signals — it doesn't chase, it waits for the reaction, exactly like 8.3 teaches.
Optional multi-timeframe bias filter (a higher-timeframe EMA) and premium/discount filter — buys only in discount, sells only in premium, straight out of this module's playbook.
Optional session filter for London / New York / Asia, if you only want signals while the volume's actually there.
A live on-chart dashboard showing current structure, the last event, session, HTF bias, premium/discount zone, and exactly where each entry sequence is up to.
Built-in alerts — "SMC BUY" and "SMC SELL" conditions ready to wire into TradingView alerts or straight into a webhook bot (8.7).
//@version=6
indicator("SMC Liquidity Sweep Pro", "SMC-LSD", overlay = true, max_labels_count = 500, max_lines_count = 500, max_boxes_count = 500)
// ═══════════════════════════ Inputs ═══════════════════════════
grpStr = "Market Structure"
extLen = input.int(10, "External swing length", minval = 3, group = grpStr, tooltip = "Major swings (external liquidity). Confirmed this many bars after the extreme — non-repainting by design")
intLen = input.int(3, "Internal swing length", minval = 1, group = grpStr, tooltip = "Minor swings (internal liquidity)")
useExtSweep = input.bool(true, "External liquidity sweeps", group = grpStr)
useIntSweep = input.bool(true, "Internal liquidity sweeps", group = grpStr)
showStruct = input.bool(true, "Show BOS / CHoCH", group = grpStr)
grpDisp = "Displacement"
atrLen = input.int(14, "ATR length", minval = 1, group = grpDisp)
dispMult = input.float(1.2, "Candle range ≥ ATR ×", minval = 0.5, step = 0.1, group = grpDisp, tooltip = "Displacement is measured as full candle range vs ATR")
useVol = input.bool(true, "Volume confirmation", group = grpDisp)
volLen = input.int(20, "Volume SMA length", minval = 1, group = grpDisp)
volMult = input.float(1.3, "Volume ≥ SMA ×", minval = 0.5, step = 0.1, group = grpDisp)
grpSeq = "Entry Sequence"
seqTimeout = input.int(25, "Stage timeout (bars)", minval = 3, group = grpSeq, tooltip = "Max bars between sweep → displacement → BOS+FVG before the setup is abandoned")
retestBars = input.int(30, "Max bars to wait for FVG retest", minval = 3, group = grpSeq)
obLookback = input.int(10, "Order block lookback", minval = 1, maxval = 30, group = grpSeq)
showOB = input.bool(true, "Show order blocks", group = grpSeq)
showFVG = input.bool(true, "Show fair value gaps", group = grpSeq)
grpFilt = "Filters"
useSession = input.bool(false, "Session filter", group = grpFilt)
enLondon = input.bool(true, "London", inline = "ldn", group = grpFilt)
sessLondon = input.session("0200-1100", "", inline = "ldn", group = grpFilt)
enNY = input.bool(true, "New York", inline = "ny", group = grpFilt)
sessNY = input.session("0700-1600", "", inline = "ny", group = grpFilt)
enAsia = input.bool(false, "Asia", inline = "asia", group = grpFilt)
sessAsia = input.session("1900-0400", "", inline = "asia", group = grpFilt)
sessTz = input.string("America/New_York", "Session timezone", group = grpFilt)
useMtf = input.bool(true, "Multi-timeframe trend filter", group = grpFilt)
mtfTf = input.timeframe("D", "Higher timeframe", group = grpFilt)
mtfLen = input.int(50, "HTF EMA length", minval = 1, group = grpFilt)
usePD = input.bool(true, "Premium/Discount filter", group = grpFilt, tooltip = "Buys only in discount (below equilibrium of the external range), sells only in premium")
grpVis = "Visuals"
showDash = input.bool(true, "Dashboard", group = grpVis)
dashPos = input.string("Top right", "Position", options = ["Top right", "Top left", "Bottom right", "Bottom left"], group = grpVis)
bullCol = input.color(color.new(color.teal, 0), "Bullish", group = grpVis)
bearCol = input.color(color.new(color.maroon, 0), "Bearish", group = grpVis)
// ═══════════════════════════ Core series (top level, non-repainting) ═══════════════════════════
atrVal = ta.atr(atrLen)
volSma = ta.sma(volume, volLen)
// Confirmed HTF value only ([1] + lookahead_on) — classic non-repainting idiom
htfEma = request.security(syminfo.tickerid, mtfTf, ta.ema(close, mtfLen)[1], lookahead = barmerge.lookahead_on)
inLondon = not na(time(timeframe.period, sessLondon + ":1234567", sessTz))
inNY = not na(time(timeframe.period, sessNY + ":1234567", sessTz))
inAsia = not na(time(timeframe.period, sessAsia + ":1234567", sessTz))
sessionOk = not useSession or (enLondon and inLondon) or (enNY and inNY) or (enAsia and inAsia)
extH = ta.pivothigh(extLen, extLen)
extL = ta.pivotlow(extLen, extLen)
intH = ta.pivothigh(intLen, intLen)
intL = ta.pivotlow(intLen, intLen)
// ═══════════════════════════ Liquidity levels ═══════════════════════════
var float extHighLvl = na
var int extHighBar = 0
var float extLowLvl = na
var int extLowBar = 0
var float intHighLvl = na
var int intHighBar = 0
var float intLowLvl = na
var int intLowBar = 0
// Persistent external range for premium/discount (never consumed)
var float rngHigh = na
var float rngLow = na
if not na(extH)
extHighLvl := extH
extHighBar := bar_index - extLen
rngHigh := extH
if not na(extL)
extLowLvl := extL
extLowBar := bar_index - extLen
rngLow := extL
if not na(intH)
intHighLvl := intH
intHighBar := bar_index - intLen
if not na(intL)
intLowLvl := intL
intLowBar := bar_index - intLen
eqLvl = not na(rngHigh) and not na(rngLow) ? math.avg(rngHigh, rngLow) : na
inDiscount = not na(eqLvl) and close < eqLvl
inPremium = not na(eqLvl) and close > eqLvl
// ═══════════════════════════ State ═══════════════════════════
var int trend = 0 // 1 bull, -1 bear, 0 undefined (external structure)
var string lastEvent = "—"
// Sequence machines: 0 idle · 1 swept · 2 displaced (await BOS+FVG) · 3 armed (await retest)
var int bullStage = 0
var int bullStageBar = 0
var float bullSweepLvl = na
var float bullBosLvl = na
var bool bullBosDone = false
var bool bullFvgDone = false
var float bullFvgTop = na
var float bullFvgBot = na
var int bullFvgBar = 0
var bool bullSweepExt = false
var int bearStage = 0
var int bearStageBar = 0
var float bearSweepLvl = na
var float bearBosLvl = na
var bool bearBosDone = false
var bool bearFvgDone = false
var float bearFvgTop = na
var float bearFvgBot = na
var int bearFvgBar = 0
var bool bearSweepExt = false
var array<box> bullObBoxes = array.new<box>()
var array<box> bearObBoxes = array.new<box>()
var array<box> bullFvgBoxes = array.new<box>()
var array<box> bearFvgBoxes = array.new<box>()
// Per-bar event flags (for plotshape/barcolor/alerts)
newBullSweep = false
newBearSweep = false
dispBull = false
dispBear = false
buySignal = false
sellSignal = false
// ═══════════════════════════ Helpers ═══════════════════════════
volOk = not useVol or na(volume) or volume >= volMult * volSma
isDispBar = (high - low) >= dispMult * atrVal
dispBullOk = isDispBar and close > open and volOk
dispBearOk = isDispBar and close < open and volOk
drawStruct(int fromBar, float lvl, bool isBull, bool isChoch) =>
col = isBull ? bullCol : bearCol
line.new(fromBar, lvl, bar_index, lvl, color = color.new(col, 30), width = 1, style = line.style_dashed)
label.new(int(math.round(math.avg(fromBar, bar_index))), lvl, isChoch ? "CHoCH" : "BOS", style = isBull ? label.style_label_down : label.style_label_up, color = color.new(col, 80), textcolor = col, size = size.tiny)
findOrderBlock(bool isBull) =>
float obTop = na
float obBot = na
int obBar = 0
for j = 1 to obLookback
if (isBull ? close[j] < open[j] : close[j] > open[j])
obTop := high[j]
obBot := low[j]
obBar := bar_index - j
break
[obTop, obBot, obBar]
maintainBoxes(array<box> arr, bool isBull, bool isOb) =>
if arr.size() > 0
for i = arr.size() - 1 to 0
b = arr.get(i)
// OB dies on close through it; FVG dies when the gap is fully filled
dead = isOb ? (isBull ? close < b.get_bottom() : close > b.get_top()) : (isBull ? low <= b.get_bottom() : high >= b.get_top())
if dead
b.delete()
arr.remove(i)
else
b.set_right(bar_index)
if arr.size() > 12
b = arr.shift()
b.delete()
// ═══════════════════════════ Engine (confirmed bars only — non-repainting) ═══════════════════════════
if barstate.isconfirmed
// ── External structure: BOS / CHoCH ──
if not na(extHighLvl) and close > extHighLvl
if showStruct
drawStruct(extHighBar, extHighLvl, true, trend == -1)
lastEvent := trend == -1 ? "CHoCH ▲" : "BOS ▲"
trend := 1
extHighLvl := na
if not na(extLowLvl) and close < extLowLvl
if showStruct
drawStruct(extLowBar, extLowLvl, false, trend == 1)
lastEvent := trend == 1 ? "CHoCH ▼" : "BOS ▼"
trend := -1
extLowLvl := na
// Internal levels consumed on close-through (plain internal break, no event)
if not na(intHighLvl) and close > intHighLvl
intHighLvl := na
if not na(intLowLvl) and close < intLowLvl
intLowLvl := na
// ── Liquidity sweeps (wick through, close back inside) ──
float bullSwLvl = na
bool bullSwExt = false
if useExtSweep and not na(extLowLvl) and low < extLowLvl and close > extLowLvl
bullSwLvl := extLowLvl
bullSwExt := true
extLowLvl := na
else if useIntSweep and not na(intLowLvl) and low < intLowLvl and close > intLowLvl
bullSwLvl := intLowLvl
intLowLvl := na
if not na(bullSwLvl)
newBullSweep := true
float bearSwLvl = na
bool bearSwExt = false
if useExtSweep and not na(extHighLvl) and high > extHighLvl and close < extHighLvl
bearSwLvl := extHighLvl
bearSwExt := true
extHighLvl := na
else if useIntSweep and not na(intHighLvl) and high > intHighLvl and close < intHighLvl
bearSwLvl := intHighLvl
intHighLvl := na
if not na(bearSwLvl)
newBearSweep := true
// ── Bull sequence ──
if bullStage > 0 and bar_index - bullStageBar > (bullStage == 3 ? retestBars : seqTimeout)
bullStage := 0
if bullStage == 0 and newBullSweep
bullStage := 1
bullStageBar := bar_index
bullSweepLvl := bullSwLvl
bullSweepExt := bullSwExt
bullBosDone := false
bullFvgDone := false
if bullStage == 1 and dispBullOk and close > bullSweepLvl
bullStage := 2
bullStageBar := bar_index
dispBull := true
bullBosLvl := not na(intHighLvl) ? intHighLvl : not na(extHighLvl) ? extHighLvl : high
if showOB
[obTop, obBot, obBar] = findOrderBlock(true)
if not na(obTop)
bullObBoxes.push(box.new(obBar, obTop, bar_index, obBot, border_color = color.new(bullCol, 50), bgcolor = color.new(bullCol, 88), text = "OB", text_color = color.new(bullCol, 40), text_size = size.tiny))
if bullStage == 2
if not bullBosDone and close > bullBosLvl
bullBosDone := true
if not bullFvgDone and low > high[2] and close[1] > open[1]
bullFvgDone := true
bullFvgTop := low
bullFvgBot := high[2]
bullFvgBar := bar_index
if showFVG
bullFvgBoxes.push(box.new(bar_index - 2, low, bar_index, high[2], border_color = color.new(bullCol, 60), bgcolor = color.new(bullCol, 90), text = "FVG", text_color = color.new(bullCol, 40), text_size = size.tiny))
if bullBosDone and bullFvgDone
bullStage := 3
bullStageBar := bar_index
if bullStage == 3 and bar_index > bullFvgBar and low <= bullFvgTop and close >= bullFvgBot
mtfOk = not useMtf or close > htfEma
pdOk = not usePD or inDiscount
if sessionOk and mtfOk and pdOk
buySignal := true
label.new(bar_index, low, "BUY", style = label.style_label_up, color = bullCol, textcolor = color.white, size = size.small, tooltip = (bullSweepExt ? "External" : "Internal") + " sweep → displacement → BOS → FVG retest")
bullStage := 0
// ── Bear sequence ──
if bearStage > 0 and bar_index - bearStageBar > (bearStage == 3 ? retestBars : seqTimeout)
bearStage := 0
if bearStage == 0 and newBearSweep
bearStage := 1
bearStageBar := bar_index
bearSweepLvl := bearSwLvl
bearSweepExt := bearSwExt
bearBosDone := false
bearFvgDone := false
if bearStage == 1 and dispBearOk and close < bearSweepLvl
bearStage := 2
bearStageBar := bar_index
dispBear := true
bearBosLvl := not na(intLowLvl) ? intLowLvl : not na(extLowLvl) ? extLowLvl : low
if showOB
[obTop, obBot, obBar] = findOrderBlock(false)
if not na(obTop)
bearObBoxes.push(box.new(obBar, obTop, bar_index, obBot, border_color = color.new(bearCol, 50), bgcolor = color.new(bearCol, 88), text = "OB", text_color = color.new(bearCol, 40), text_size = size.tiny))
if bearStage == 2
if not bearBosDone and close < bearBosLvl
bearBosDone := true
if not bearFvgDone and high < low[2] and close[1] < open[1]
bearFvgDone := true
bearFvgTop := low[2]
bearFvgBot := high
bearFvgBar := bar_index
if showFVG
bearFvgBoxes.push(box.new(bar_index - 2, low[2], bar_index, high, border_color = color.new(bearCol, 60), bgcolor = color.new(bearCol, 90), text = "FVG", text_color = color.new(bearCol, 40), text_size = size.tiny))
if bearBosDone and bearFvgDone
bearStage := 3
bearStageBar := bar_index
if bearStage == 3 and bar_index > bearFvgBar and high >= bearFvgBot and close <= bearFvgTop
mtfOk = not useMtf or close < htfEma
pdOk = not usePD or inPremium
if sessionOk and mtfOk and pdOk
sellSignal := true
label.new(bar_index, high, "SELL", style = label.style_label_down, color = bearCol, textcolor = color.white, size = size.small, tooltip = (bearSweepExt ? "External" : "Internal") + " sweep → displacement → BOS → FVG retest")
bearStage := 0
// ── Box maintenance ──
maintainBoxes(bullObBoxes, true, true)
maintainBoxes(bearObBoxes, false, true)
maintainBoxes(bullFvgBoxes, true, false)
maintainBoxes(bearFvgBoxes, false, false)
// ═══════════════════════════ Plots ═══════════════════════════
plotshape(newBullSweep, "Low swept", shape.xcross, location.belowbar, color.new(bullCol, 40), size = size.tiny)
plotshape(newBearSweep, "High swept", shape.xcross, location.abovebar, color.new(bearCol, 40), size = size.tiny)
barcolor(dispBull ? bullCol : dispBear ? bearCol : na)
// ═══════════════════════════ Dashboard ═══════════════════════════
stageText(int st) =>
switch st
0 => "Idle"
1 => "Sweep ✓"
2 => "Disp ✓ → BOS+FVG"
3 => "Armed (retest)"
=> "?"
var table dash = na
if showDash and barstate.islast
pos = switch dashPos
"Top right" => position.top_right
"Top left" => position.top_left
"Bottom right" => position.bottom_right
=> position.bottom_left
if na(dash)
dash := table.new(pos, 2, 8, bgcolor = color.new(color.black, 20), border_color = color.new(color.gray, 60), border_width = 1)
txtCol = color.white
hdrCol = color.new(color.silver, 30)
table.cell(dash, 0, 0, "SMC-LSD", text_color = color.yellow, text_size = size.small)
table.cell(dash, 1, 0, syminfo.ticker + " · " + timeframe.period, text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 0, 1, "Structure", text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 1, 1, trend == 1 ? "Bullish" : trend == -1 ? "Bearish" : "—", text_color = trend == 1 ? bullCol : trend == -1 ? bearCol : txtCol, text_size = size.tiny)
table.cell(dash, 0, 2, "Last event", text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 1, 2, lastEvent, text_color = txtCol, text_size = size.tiny)
table.cell(dash, 0, 3, "Session", text_color = hdrCol, text_size = size.tiny)
sessTxt = inLondon ? "London" : inNY ? "New York" : inAsia ? "Asia" : "Off-session"
table.cell(dash, 1, 3, useSession ? sessTxt : sessTxt + " (off)", text_color = txtCol, text_size = size.tiny)
table.cell(dash, 0, 4, "HTF bias " + mtfTf, text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 1, 4, close > htfEma ? "Bullish" : "Bearish", text_color = close > htfEma ? bullCol : bearCol, text_size = size.tiny)
table.cell(dash, 0, 5, "Zone", text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 1, 5, inDiscount ? "Discount" : inPremium ? "Premium" : "—", text_color = inDiscount ? bullCol : inPremium ? bearCol : txtCol, text_size = size.tiny)
table.cell(dash, 0, 6, "Buy seq", text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 1, 6, stageText(bullStage), text_color = bullStage > 0 ? bullCol : txtCol, text_size = size.tiny)
table.cell(dash, 0, 7, "Sell seq", text_color = hdrCol, text_size = size.tiny)
table.cell(dash, 1, 7, stageText(bearStage), text_color = bearStage > 0 ? bearCol : txtCol, text_size = size.tiny)
// ═══════════════════════════ Alerts ═══════════════════════════
alertcondition(buySignal, "SMC BUY", "SMC-LSD BUY: sweep→displacement→BOS→FVG retest complete on {{ticker}} {{interval}}")
alertcondition(sellSignal, "SMC SELL", "SMC-LSD SELL: sweep→displacement→BOS→FVG retest complete on {{ticker}} {{interval}}")
Getting it running
Same eight steps as 8.6's walkthrough — Pine Editor → blank script → clear the default template before pasting (this is the step that throws an error if skipped) → paste → compile → add to chart. Then Alert → Condition → "SMC-LSD" → pick "SMC BUY" or "SMC SELL" to hook it into TradingView's alert system, or into the webhook pipeline from 8.7.
What this is and isn't
This automates pattern recognition, not the trading decision. A "SMC BUY" label is a trigger, not a trade — it still needs everything from 8.1 and 8.9: a sized position, a placed stop, a checked R:R, before it's allowed anywhere near size. Backtest it, paper trade it (8.6, 8.9) same as every other tool in this chapter before it touches a dollar. And in the spirit of the "has this been tested" conversation that produced it: this script was written and reviewed line-by-line against the Pine v6 spec — one genuine type-error bug was found and fixed (a float value being passed where a label needed an integer bar index) — then actually compiled and run live in TradingView to confirm it: zero errors, dashboard populating correctly, structure/order block/FVG drawing exactly as designed. Tested, not just reviewed.
Poida's Pearler
"Graduatin' this course and gettin' handed a script that watches for liquidity sweeps is like finishin' ya apprenticeship and the boss chucks ya the good torque wrench on the way out. Doesn't do the job FOR ya, mate — but it means ya never gotta eyeball a wick at 2am again wonderin' if that was the sweep or just noise."
Want more? Poida runs a private indicator suite on TradingView too. The gift above is free and it's yours — the invite-only set, the rest of what Poida actually has running on his own charts, is a separate one-time request: A$9,997. Find the public profile at tradingview.com/u/poidabogan, then sort access by emailing poidabogan@gmail.com — it's a request-and-pay arrangement, not something that comes bundled with the course.
Module 8.4
8.4 Trading Strategies
Twelve complete playbooks. Each one tells you when it works, when it doesn't, exactly where the stop goes, and the mistake that ruins it. Pick ONE, paper trade it for twenty trades (Assignment 4), and only then decide if it suits you. You don't need twelve strategies — you need one you can execute half-asleep.
Ground rules for every strategy below
Risk per trade: 1–2% of account, max (8.9). Minimum R:R 1:2. Stop-loss placed at order time, never "mentally". If the market conditions listed don't match, the strategy is switched OFF — a rain strategy in a drought is just losing with confidence.
1. Scalping — the seagull at the chippy
Overview Dozens of tiny trades capturing small moves on 1–5 minute charts. High skill, high stress, high fee sensitivity. Honest warning: the hardest style on this list, listed first so you know what you're skipping.
Entry rules Only on high-liquidity majors (BTC/ETH). Trade with the 5-min trend; enter on micro-pullbacks to VWAP or the 20 EMA with a momentum candle confirming.
Exit rules Fixed small targets (0.3–0.8%), taken mechanically. No "letting it run" — scalps that become "investments" are how scalpers die.
Stop-loss Tight, just beyond the micro-swing, roughly 1× the 5-min ATR. Hit = out, no debate.
Risk mgmt Hard daily stop: 3 losses or -2% account, whichever first, then the laptop closes. Maker orders wherever possible — at this frequency, fees are a second opponent.
Example BTC trending up on the 5-min, pulls back to VWAP, prints a bullish engulfing. Long at reclaim, stop 0.4% below, target 0.8% above. In and out inside twenty minutes.
Common mistakes Scalping sideways chop; ignoring fees (0.1% taker fee on a 0.5% target is a 20% tax); revenge-scalping after two stops.
Overview Hold for days to weeks, catching one "swing" of the higher-timeframe trend. Compatible with having a job, a family, and a sleep schedule. The recommended starting strategy of this entire course.
Entry rules Daily chart in a clear trend (above 50 SMA for longs). Wait for a pullback to a confluence zone — support + Fib golden pocket + rising 50 SMA. Enter on a daily reversal candle (hammer/engulfing) at the zone.
Exit rules First target at the prior swing high (take 50% off), remainder targets the next higher-timeframe resistance. Trail the rest under each new higher low.
Stop-loss Below the pullback low, at least 1.5× daily ATR from entry. Wide stop, small size — that's the swing trader's covenant.
Risk mgmt 1% risk per trade, max 3 open swings, never all in correlated coins (three altcoin longs is one trade wearing three hats).
Example ETH uptrend, pulls back 12% to the 0.618 Fib which sits right on old resistance-turned-support. Daily hammer prints. Long, stop below the hammer, first target the old high (1:2.5), runner held for the breakout.
Common mistakes Checking the position 45 times a day and getting shaken out by 4-hour noise; entering mid-range instead of at the zone; moving stops "just this once".
Best conditions Trending markets on the daily. Worst: dead sideways ranges — sit those out or range-trade (strategy 10).
3. Position trading — the slow-cooked brisket
Overview Weeks-to-months holds riding whole market cycles. One good decision a quarter instead of ten a day. Closest cousin to investing, but with defined exits.
Entry rules Weekly structure turning bullish (weekly CHoCH up / reclaim of 200-day SMA) after extended decline. Scale in across weeks in the discount half of the yearly range — three planned tranches, not one hero entry.
Exit rules Scale OUT in tranches into predefined levels of euphoria — prior all-time highs, extension targets. Sell when your barber starts giving crypto tips, not when he starts asking for them.
Stop-loss Weekly close below the accumulation range invalidates the idea. It's far away, so size accordingly (8.9 maths — wide stop = small size, always).
Risk mgmt Majors only. This is patient capital: money you won't need for a year, and never leveraged. Leverage plus months-long holds equals a liquidation appointment you've booked in advance.
Example BTC spends four months basing after a 60% drawdown, reclaims the 200-day, weekly higher low forms. Three buys over six weeks, stop under the base, first sell tranche planned at the prior ATH.
Common mistakes No exit plan (a position trade without sell targets is just bag-holding with a fancy name); panic-selling a normal 20% pullback; checking daily charts for a weekly thesis.
Best conditions Early bull cycle after long declines. Worst: buying "cheap" in a still-falling knife market — cheap can get 80% cheaper.
4. Breakout strategy — waiting for the gate to open
Overview Price coils in a tightening range; you buy the escape. Simple idea, ruined for most people by crypto's love of fake breakouts.
Entry rules Range must be obvious and mature (2+ weeks daily, or clear consolidation intraday), with volume drying up inside it. Enter on a candle CLOSE beyond the range — not a wick — with volume at least 1.5× recent average. Cautious version: wait for the retest of the broken level and enter there.
Exit rules Measured move: the height of the range projected from the breakout point. Take half there, trail the rest.
Stop-loss Back inside the range, below the breakout candle's midpoint. If price closes back inside the range, the breakout failed — you're out, no negotiating.
Risk mgmt Halve normal size on breakout entries (their failure rate is real) or use the retest entry for a tighter stop and better R:R.
Example BTC ranges $58k–$62k for three weeks, volume shrinking. Daily closes at $63.1k on huge volume. Long the retest of $62k, stop $60.9k, target $66k (range height projected). Roughly 1:3.5.
Common mistakes Buying wicks instead of closes; buying breakouts of minor 2-day "ranges"; ignoring volume — a silent breakout is usually a sweep (8.3) in disguise, and you're the harvest.
Best conditions After long, boring consolidations — post-boredom moves are the violent ones. Worst: mid-trend "ranges" that are actually just pauses, and news-driven spikes.
5. Pullback strategy — buying the dip, but with paperwork
Overview The professional version of "buy the dip": join an established trend at a discount, at a pre-mapped zone, with confirmation. Arguably the highest win-rate concept in this module.
Entry rules Trend must be established (HH/HL structure, price above rising 50 MA). Map the pullback zone in advance: prior structure + Fib 0.5–0.618 + dynamic MA support. Enter only on a reversal signal AT the zone — engulfing candle, sweep-and-reclaim, or lower-timeframe CHoCH back up.
Exit rules Target the prior high minimum; trend-extension targets beyond. Move stop to break-even once the prior high is reclaimed.
Stop-loss Below the pullback swing low — beyond it by a smidge, because that exact low is where the stop-hunters graze (8.3).
Risk mgmt Standard 1–2%. Skip the trade if the pullback exceeds 0.786 Fib — that's usually not a pullback anymore, that's a trend having a heart attack.
Example SOL up-trending, pulls back to the 0.618 at $138 which matches the last consolidation. Sweeps the level, reclaims with a 4H engulfing. Long $141, stop $135, targets $152 and $160.
Common mistakes Catching the knife with no confirmation candle ("it's at the level!" — levels break, mate); buying every red candle in a downtrend and calling it a pullback.
Best conditions Strong, clean trends. Worst: choppy ranges where every "pullback" is just the other side of the box.
6. EMA crossover strategy — the training-wheels system that still works
Overview Fast EMA crossing a slow EMA (9/21 intraday, 20/50 for swings) signals momentum shift. Mechanical, beginner-friendly, and the perfect first strategy to code into a bot (8.7) because there's zero judgement involved.
Entry rules Long when fast crosses above slow AND price is above the 200 EMA (the trend filter is not optional — it's the strategy's seatbelt). Enter on the close of the crossover candle.
Exit rules Exit on the opposite crossover, or at a fixed 2R target if you prefer tidy numbers. Pick one exit style and never mix mid-trade.
Stop-loss Below the most recent swing low, or 2× ATR — whichever is wider.
Risk mgmt Expect a mediocre win rate (35–45%) with occasional big trend winners paying for everything. You MUST take every signal — skip "obviously bad" ones and you'll skip the winner, guaranteed, because that's how comedy works.
Example ETH 4H: 20 EMA crosses above 50 EMA with price above the 200. Long at close, stop 2× ATR below, hold until the cross back down — catches a 19% run over two weeks.
Common mistakes Using it in ranges, where crossovers whipsaw you to death like a screen door in a cyclone; abandoning it after four straight small losses right before the trend trade that pays for all of them.
Best conditions Sustained trends. Worst: sideways chop — the crossover strategy's kryptonite, no exceptions.
7. VWAP strategy — trading at the fair-dinkum price
Overview Intraday mean-reversion and trend entries around the session's volume-weighted fair price. You're aligning with where institutions benchmark, instead of guessing.
Entry rules Trend day (price opens and holds above VWAP): buy the first and second pullbacks that tag VWAP and hold, with a reversal candle. Skip third-plus touches — each retest weakens the level, like reheating the same pie.
Exit rules Target the session high / measured extension. Scale out into strength; flat by session end — VWAP resets tomorrow, and so should you.
Stop-loss A structured distance below VWAP (0.5–1× intraday ATR). A genuine trend day shouldn't close meaningfully below VWAP; if it does, the premise died.
Risk mgmt Intraday only. Two VWAP losses in a session = the day is choppy, not trending = done for the day.
Example BTC gaps up at US open, holds above VWAP all morning. First pullback tags VWAP at $61,200, prints a 15-min hammer. Long, stop $60,700, exit $62,400 into the afternoon high.
Common mistakes Using VWAP on weekly swing trades (it's a session tool); fading a trend day by shorting "extended" price above VWAP — band walks will run you over.
Best conditions Clear directional sessions with volume. Worst: days where price braids itself around VWAP like a willow tree — that's chop, stand aside.
8. Trend-following strategy — the trend is your mate
Overview Don't predict — follow. Enter established trends, pyramid carefully, and stay in until the trend actually ends. Boring, old, and the engine behind more real fortunes than any other idea in finance.
Entry rules Daily above rising 50 & 200 MA, ADX above 25 (trend has a pulse — see 8.5). Enter on breakouts to new 20-day highs or on pullbacks to the 20 EMA. Optionally add ONE additional position after a fresh BOS, never averaging down.
Exit rules No target. Trail a stop under each new higher low, or under the 50 MA, and let the market tap you out. The whole edge lives in the fat right tail of the occasional monster trend.
Stop-loss Initial: 2× ATR. Then the trail. Never tighten the trail because you're nervous — the trail is the system; your nerves are not.
Risk mgmt Win rate runs 30–40% and drawdowns test your soul. Size so ten straight losses is survivable, because ten straight losses WILL happen and the strategy still wins the decade.
Example BTC crosses to new 20-day highs with ADX 31. Long, trail under each daily higher low. Stopped four months later 62% higher, having done precisely nothing in between except not touch it — the hardest skill in this book.
Common mistakes Taking profits early "because it's up a lot" (decapitates the only trades that pay); quitting during the inevitable choppy losing streak, i.e. paying the cover charge and leaving before the band.
Best conditions Bull or bear trends (works short too). Worst: extended ranges — expect death by a thousand papercuts and let position sizing keep the cuts shallow.
9. Mean reversion strategy — betting on the rubber band
Overview Price stretched violently away from its average tends to snap back toward it. You're selling drama and buying boredom — the contrarian's bread and butter.
Entry rules Overall market NOT strongly trending (ADX below 20). Price pokes outside the Bollinger Bands AND RSI is extreme (under 25 / over 75) AND you're at a genuine higher-timeframe level. All three. Two out of three is how mean-reversion traders get carried out.
Exit rules Target the mean itself — the 20-period MA / middle band. This is a snap-back trade, not a trend trade; take the money and go.
Stop-loss Beyond the extreme wick with room (1× ATR past it). Tight stops get eaten by the second flush that so often comes before the reversal.
Risk mgmt Half size, always. This strategy is fine 9 times and then the 10th time the "stretched" market keeps stretching into a full crash. NEVER average down into it, NEVER remove the stop — that's how "quick bounce trade" becomes "well, I'm a long-term investor now".
Example Range-bound BTC flushes 6% in an hour on a liquidation cascade, pierces the lower band, RSI 19, lands on the range low. Long the reclaim, stop below the wick, exit at the 20 MA for 3.5%.
Common mistakes Fading strong trends ("it HAS to pull back" — no it doesn't, it has to do nothing, it's a market not your employee); skipping the level requirement and buying every dip like it's a Boxing Day sale.
Best conditions Ranges and overreactions to non-fundamental news. Worst: genuine trend days and real bad news — a bank collapse is not a rubber band.
10. Range trading — milking the sideways cow
Overview Markets range most of the time. Buy the floor, sell the ceiling, repeat until the range breaks. Unglamorous, repeatable — the strategy the grid bots in 8.7 automate.
Entry rules Range must be tested at least twice on each side. Long only in the bottom quarter (discount, 8.3), short only in the top quarter, and ideally after a liquidity sweep of the boundary that snaps back inside — the highest-quality range entry there is.
Exit rules Longs from the floor target the mid first, ceiling second. Never hold a range long AT the ceiling hoping for a breakout — that's a different strategy (4), taken at the worst possible price.
Stop-loss Outside the range boundary past the sweep wicks. If a candle CLOSES outside the range, the range is finished and so is the strategy — flat, reassess, maybe flip to the breakout playbook.
Risk mgmt Standard 1–2%. Track how mature the range is: the tenth touch of a range floor is far more likely to break than the third — floors wear out like thongs.
Example ETH ranges $3,100–$3,400 for a month. Price wicks to $3,060, reclaims $3,100 within hours. Long $3,120, stop $3,040, targets $3,250 and $3,380. Both hit over five days.
Common mistakes Buying mid-range (no edge, maximum ambiguity — the beige of trading locations); refusing to accept the range broke; forgetting ranges are where trends are born and staying short through the launch.
Best conditions Consolidation phases, low-news periods. Worst: right before major scheduled events — ranges love to break on Fed day.
11. News trading — surfing the shockwave (advanced)
Overview Trading the volatility around scheduled events — CPI, Fed rate decisions, ETF rulings. Included for completeness with a hazard sticker: spreads blow out, slippage is savage, and the first move is often the fake one.
Entry rules Scheduled events only (calendar in 8.10) — never "someone tweeted something". Do NOT hold positions into the release. Trade the AFTERMATH: wait for the initial spike, the whipsaw, and then enter the retest of the post-news range in the direction of the post-news structure, 15–60 minutes after the print.
Exit rules Fast targets — news moves front-load. Take profits into momentum within the session; don't marry a headline.
Stop-loss Wider than normal (2–3× ATR) because post-news noise is huge — and size DOWN proportionally to keep dollar risk identical (8.9 maths).
Risk mgmt Half size minimum. One news trade per event. If the post-news structure is unreadable, the correct trade is a snag and a spectator seat.
Example CPI prints cooler than expected. BTC spikes 3%, retraces the whole move (trapping late longs), then reclaims and holds the pre-news high. Long the hold, stop under the reclaim, out 2.5% higher before the US close.
Common mistakes Positioning BEFORE the release (that's not trading, that's a coin flip with slippage); chasing the first spike — the first move is where the whipsaw lives; trading every minor headline like it's the moon landing.
Best conditions Major scheduled macro events with clear surprises. Worst: mixed/as-expected prints — no edge, all noise.
12. Multi-timeframe analysis — the strategy multiplier
Overview Not a standalone strategy — the discipline that upgrades every strategy above. Three lenses: HIGH timeframe for bias (weekly/daily), MID for the setup zone (4H/1H), LOW for the entry trigger (15m/5m). Like checking the weather map, the surf report, and then the actual beach.
Entry rules All three must agree. Daily uptrend + 4H pullback into a mapped zone + 15-min CHoCH back upward = full-quality entry. Two out of three = half size or skip. The low timeframe is ONLY a trigger — never let a spicy 5-min chart talk you into fighting the daily.
Exit rules Exits live on the timeframe of your BIAS, not your trigger. If the daily thesis is intact, a scary 15-min candle is static, not signal.
Stop-loss Placed on the setup timeframe (below the 4H zone), sized on the account. Entering on the 15-min lets your stop be tighter than a pure 4H entry — that's the whole R:R payoff of the method.
Risk mgmt The framework itself IS risk management: it filters out the counter-trend impulse trades that make up most beginner losses.
Example Weekly BTC bullish. Daily pulls into the golden pocket at $59k. 4H sweeps the low and reclaims. 15-min breaks its micro-downtrend. Long $59.6k with a stop at $58.4k — a stop one-third the size a daily-only entry would need, tripling the R:R on the same idea.
Common mistakes "Timeframe shopping" — hunting through charts until one agrees with the trade you already wanted (the chart equivalent of asking Mum after Dad said no); managing a daily trade off 1-minute candles.
Best conditions Always. This is the one entry in this module with no OFF switch.
Poida's Pearler
"Twelve strategies, and I can hear ya thinkin' 'I'll run all twelve at once, cover me bases.' Mate. That's like enterin' the Bathurst 1000 drivin' twelve cars simultaneously. Pick the ute — strategy 2 — learn it 'til it's boring, THEN look at the garage."
🐋 Bonus: Whale-Style DCA — Averaging All The Way To The Bottom
Chapter 6.2 gave you the basic version of DCA — buy a fixed amount on a fixed schedule, let the maths do the thinking. Here's the professional-grade upgrade: what happens when you keep doing that for the entire bear market, not just the first few buys, and why that's precisely how whales themselves accumulate — not despite being unable to time the bottom, but because they've accepted nobody can.
Why whales don't try to catch the bottom either
Back in 8.3: a whale's order is so big it can't be filled in one click without the market running away from it. So funds and market makers use execution algorithms (TWAP/VWAP-style) that slice a position into dozens or hundreds of small buys spread across days, weeks or months of an accumulation range — not one heroic entry at "the" low. They're not more patient than you. They're mathematically forced into exactly the schedule this course has been teaching since Chapter 6 — the accumulation zone is the strategy, not a single price inside it.
Illustrative 12-month bear market. Gold dots: Steve's $500 buy, every month, no predictions. The green line — Steve's running average cost — grinds downward through the whole decline, unbothered by the bounce that fooled Terry.
Meet the two Boganster archetypes of every bear market. Terry sits in cash for four months waiting to "buy the bottom", sees a sharp relief bounce in month 5 and declares victory — all $6,000 in, one shot, at $68,000. The bounce fails. Price makes a fresh, much lower low three months later. Terry has no dry powder left to average down, and no plan beyond "hold and hope". Steve never tries to call anything. He buys $500 on the same day every month, all the way down through the bounce, through the fresh low, and into the recovery — exactly the whale-style schedule above.
Month
Spot price
Steve buys
Coins bought
Running avg cost
1
$100,000
$500
0.00500
$100,000
2
$85,000
$500
0.00588
$91,892
3
$70,000
$500
0.00714
$83,217
4
$58,000
$500
0.00862
$75,058
5
$68,000 ← Terry: all-in here
$500
0.00735
$73,532
6
$55,000
$500
0.00909
$69,622
7
$42,000
$500
0.01190
$63,643
8
$30,000
$500
0.01667
$55,818
9
$22,000 ← actual bottom
$500
0.02273
$47,675
10
$27,000
$500
0.01852
$44,284
11
$34,000
$500
0.01471
$43,099
12
$41,000
$500
0.01220
$42,916
Steve — 12 months of DCA
$6,000
0.13981 BTC
$42,916 avg
Same $6,000. Same 12 months. Very different outcomes.
By month 12, Steve holds 0.13981 BTC for his average $42,916 — nearly 58% more coin than Terry's 0.08824 BTC, and a cost basis 37% cheaper than Terry's single guess. Mark both to the month-12 price of $41,000: Steve's stack is worth $5,732 — down just 4.5% on money invested. Terry's is worth $3,618 — down 39.7% — for the crime of being confident once instead of consistent twelve times.
The whale mindset, translated to a Boganster budget
The accumulation range is the target, never a single tick. Strategy 3 (Position trading) already has you scaling in across tranches through the discount zone — this is that same idea, run automatically, every week, without you having to decide anything mid-crash.
"I called the bottom" is a retail fantasy, not a whale habit. Nobody — not you, not a nine-figure fund — reliably identifies the low candle in real time. The whale-tracking tools in Part 4 (Whale Alert, Lookonchain, Arkham) mostly show accumulation after the fact, spread across weeks, precisely because that's how it actually happened, not because anyone timed it.
Every extra month you keep buying through the scary part drags your average further down. Stopping early because you think you've "called it" is the single most expensive mistake in this section — it's not the crash that hurts Terry, it's freezing once he thinks he's done.
The mechanism scales down as well as it scales up. A fund runs a TWAP order over its accumulation range; you run the recurring-buy feature from Chapter 1/6 over yours. Same discipline, six fewer zeros.
The stack grows fastest in the months everyone else is too scared to buy — which, not coincidentally, is exactly when whale wallets are shown adding the hardest once the on-chain data catches up.
Poida's Pearler
"Everyone wants to be the bloke who bought the exact bottom tick and skites about it at the barbie forever. Nobody remembers the blokes who just kept buyin' every payday for a year and quietly ended up with more coin AND a cheaper average. Boring wins. It always does."