Indicator · Pine Script v6 · On the chart

SMC Context Overlay

by skipp-dev· code credited to preuss_steffen

SMC Context Overlay ingests context data inputs to render Smart Money Concepts elements directly on the price chart.

View on GitHub

GitHub stars1on the repository
Pine versionv6current
Lines of code213
Settings40inputs
LicenceNone statedfile: MPL-2.0
Last update2 days ago26 Oct 2026

Add It to Your TradingView Chart

  1. 1Copy the scriptPress Copy script above, or the copy button on the code below.
  2. 2Open the Pine EditorOpen a TradingView chart and choose Pine Editor at the bottom of the screen.
  3. 3Paste over the templateCreate a new indicator, select all of the template text and paste. Press Save and give it a name.
  4. 4Add it to the chartPress Add to chart, then adjust the settings with the gear icon next to its name.

Source Code

213 lines of Pine Script v6 from SMC_Context_Overlay.pine, published under MPL-2.0 (file header). Keep the author's credit and licence lines when you reuse it.

SMC_Context_Overlay.pine
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © preuss_steffen

//@version=6

// Shadow-only Context BUS v3 consumer.  It contains no detector and cannot
// affect Suite decisions.  Wrong schema, unready producer, stale live data, or
// incoherent geometry fails closed.
indicator("SMC Context Overlay", overlay = true)

const int SCHEMA_VERSION = 8001

var g_meta = "Context BUS · Meta"
src_schema = input.source(close, "CTX SchemaVersion", group = g_meta, display = display.none)
src_ready = input.source(close, "CTX Ready", group = g_meta, display = display.none)
src_mask = input.source(close, "CTX AvailabilityMask", group = g_meta, display = display.none)
src_epoch = input.source(close, "CTX ConfirmedEpoch", group = g_meta, display = display.none)
src_bias = input.source(close, "CTX Bias", group = g_meta, display = display.none)
src_domains = input.source(close, "CTX AvailableDomains", group = g_meta, display = display.none)
src_quality = input.source(close, "CTX QualityScore", group = g_meta, display = display.none)
max_age_minutes = input.int(240, "Maximum live producer age (minutes)", minval = 1, group = g_meta)

var g_structure = "Context BUS · Structure"
show_structure = input.bool(true, "Show structure", group = g_structure)
src_structure_trend = input.source(close, "CTX StructureTrend", group = g_structure, display = display.none)
src_structure_bos = input.source(close, "CTX StructureBos", group = g_structure, display = display.none)
src_structure_choch = input.source(close, "CTX StructureChoch", group = g_structure, display = display.none)
src_structure_dir = input.source(close, "CTX StructureEventDirection", group = g_structure, display = display.none)
src_resistance = input.source(close, "CTX StructureResistance", group = g_structure, display = display.none)
src_support = input.source(close, "CTX StructureSupport", group = g_structure, display = display.none)
src_structure_age = input.source(close, "CTX StructureEventAgeBars", group = g_structure, display = display.none)

var g_imbalance = "Context BUS · Imbalance"
show_imbalance = input.bool(true, "Show FVG / BPR / liquidity void", group = g_imbalance)
src_imbalance_state = input.source(close, "CTX ImbalanceState", group = g_imbalance, display = display.none)
src_fvg_bias = input.source(close, "CTX FvgBias", group = g_imbalance, display = display.none)
src_bull_fvg_active = input.source(close, "CTX BullFvgActive", group = g_imbalance, display = display.none)
src_bear_fvg_active = input.source(close, "CTX BearFvgActive", group = g_imbalance, display = display.none)
src_bull_fvg_top = input.source(close, "CTX BullFvgTop", group = g_imbalance, display = display.none)
src_bull_fvg_bottom = input.source(close, "CTX BullFvgBottom", group = g_imbalance, display = display.none)
src_bear_fvg_top = input.source(close, "CTX BearFvgTop", group = g_imbalance, display = display.none)
src_bear_fvg_bottom = input.source(close, "CTX BearFvgBottom", group = g_imbalance, display = display.none)
src_bpr_active = input.source(close, "CTX BprActive", group = g_imbalance, display = display.none)
src_bpr_dir = input.source(close, "CTX BprDirection", group = g_imbalance, display = display.none)
src_bpr_top = input.source(close, "CTX BprTop", group = g_imbalance, display = display.none)
src_bpr_bottom = input.source(close, "CTX BprBottom", group = g_imbalance, display = display.none)
src_void_active = input.source(close, "CTX LiquidityVoidActive", group = g_imbalance, display = display.none)
src_void_top = input.source(close, "CTX LiquidityVoidTop", group = g_imbalance, display = display.none)
src_void_bottom = input.source(close, "CTX LiquidityVoidBottom", group = g_imbalance, display = display.none)

var g_zone = "Context BUS · Zones"
show_zones = input.bool(true, "Show order-block zones", group = g_zone)
src_zone_state = input.source(close, "CTX ZoneState", group = g_zone, display = display.none)
src_ob_bias = input.source(close, "CTX ObBias", group = g_zone, display = display.none)
src_bull_ob_top = input.source(close, "CTX BullObTop", group = g_zone, display = display.none)
src_bull_ob_bottom = input.source(close, "CTX BullObBottom", group = g_zone, display = display.none)
src_bear_ob_top = input.source(close, "CTX BearObTop", group = g_zone, display = display.none)
src_bear_ob_bottom = input.source(close, "CTX BearObBottom", group = g_zone, display = display.none)
src_bull_ob_new = input.source(close, "CTX BullObNew", group = g_zone, display = display.none)
src_bear_ob_new = input.source(close, "CTX BearObNew", group = g_zone, display = display.none)
src_bull_ob_broken = input.source(close, "CTX BullObBroken", group = g_zone, display = display.none)
src_bear_ob_broken = input.source(close, "CTX BearObBroken", group = g_zone, display = display.none)

var g_sweep = "Context BUS · Sweeps"
show_sweeps = input.bool(true, "Show sweeps and reclaims", group = g_sweep)
src_sweep_dir = input.source(close, "CTX SweepDirection", group = g_sweep, display = display.none)
src_sweep_type = input.source(close, "CTX SweepType", group = g_sweep, display = display.none)
src_sweep_top = input.source(close, "CTX SweepZoneTop", group = g_sweep, display = display.none)
src_sweep_bottom = input.source(close, "CTX SweepZoneBottom", group = g_sweep, display = display.none)
src_sweep_reclaim = input.source(close, "CTX SweepReclaimActive", group = g_sweep, display = display.none)
src_sweep_quality = input.source(close, "CTX SweepQualityScore", group = g_sweep, display = display.none)
src_sweep_age = input.source(close, "CTX SweepEventAgeBars", group = g_sweep, display = display.none)

var g_pool = "Context BUS · Pools"
show_pools = input.bool(true, "Show liquidity pools", group = g_pool)
src_buy_pool = input.source(close, "CTX BuyPoolLevel", group = g_pool, display = display.none)
src_sell_pool = input.source(close, "CTX SellPoolLevel", group = g_pool, display = display.none)
src_buy_strength = input.source(close, "CTX BuyPoolStrength", group = g_pool, display = display.none)
src_sell_strength = input.source(close, "CTX SellPoolStrength", group = g_pool, display = display.none)
src_pool_magnet = input.source(close, "CTX PoolMagnetDirection", group = g_pool, display = display.none)
src_pool_imbalance = input.source(close, "CTX PoolImbalance", group = g_pool, display = display.none)

var g_session = "Context BUS · Session"
show_session = input.bool(true, "Show session and opening range", group = g_session)
src_session_code = input.source(close, "CTX SessionCode", group = g_session, display = display.none)
src_killzone = input.source(close, "CTX SessionKillzone", group = g_session, display = display.none)
src_session_top = input.source(close, "CTX SessionRangeTop", group = g_session, display = display.none)
src_session_bottom = input.source(close, "CTX SessionRangeBottom", group = g_session, display = display.none)
src_or_active = input.source(close, "CTX OpeningRangeActive", group = g_session, display = display.none)
src_or_top = input.source(close, "CTX OpeningRangeTop", group = g_session, display = display.none)
src_or_bottom = input.source(close, "CTX OpeningRangeBottom", group = g_session, display = display.none)
src_session_dir = input.source(close, "CTX SessionDirection", group = g_session, display = display.none)
src_session_mss_bull = input.source(close, "CTX SessionMssBull", group = g_session, display = display.none)
src_session_mss_bear = input.source(close, "CTX SessionMssBear", group = g_session, display = display.none)

mask_has(float mask_value, simple int flag) =>
    int(math.floor(math.max(mask_value, 0.0) / flag)) % 2 == 1

dir_text(float value) =>
    value > 0.5 ? "BULL" : value < -0.5 ? "BEAR" : "NEUTRAL"

bool schema_ok = int(math.round(src_schema)) == SCHEMA_VERSION
bool mask_is_integer = math.abs(src_mask - math.round(src_mask)) < 0.001
int mask_domain_count = (mask_has(src_mask, 1) ? 1 : 0) +
     (mask_has(src_mask, 2) ? 1 : 0) +
     (mask_has(src_mask, 4) ? 1 : 0) +
     (mask_has(src_mask, 8) ? 1 : 0) +
     (mask_has(src_mask, 16) ? 1 : 0) +
     (mask_has(src_mask, 32) ? 1 : 0)
bool meta_values_ok = (src_ready == 0 or src_ready == 1) and
     mask_is_integer and src_mask >= 0 and src_mask <= 63 and
     math.abs(src_bias - math.round(src_bias)) < 0.001 and src_bias >= -1 and src_bias <= 1 and
     math.abs(src_domains - math.round(src_domains)) < 0.001 and src_domains >= 1 and src_domains <= 6 and
     mask_domain_count == int(math.round(src_domains)) and
     src_quality >= 0 and src_quality <= 100 and
     math.abs(src_epoch - math.round(src_epoch)) < 0.001 and
     src_epoch >= 1577836800 and src_epoch <= int(timenow / 1000) + 60
bool producer_ready = src_ready == 1 and meta_values_ok
int producer_age_seconds = not na(src_epoch) ? math.max(0, int(timenow / 1000) - int(math.round(src_epoch))) : na
bool producer_fresh = not barstate.islast or (not na(producer_age_seconds) and producer_age_seconds <= max_age_minutes * 60)
bool transport_ok = schema_ok and producer_ready and producer_fresh

bool structure_ok = transport_ok and mask_has(src_mask, 1)
bool imbalance_ok = transport_ok and mask_has(src_mask, 2)
bool zone_ok = transport_ok and mask_has(src_mask, 4)
bool sweep_ok = transport_ok and mask_has(src_mask, 8)
bool pool_ok = transport_ok and mask_has(src_mask, 16)
bool session_ok = transport_ok and mask_has(src_mask, 32)

bool bull_fvg_geometry_ok = src_bull_fvg_active >= 0.5 and not na(src_bull_fvg_top) and not na(src_bull_fvg_bottom) and src_bull_fvg_top >= src_bull_fvg_bottom
bool bear_fvg_geometry_ok = src_bear_fvg_active >= 0.5 and not na(src_bear_fvg_top) and not na(src_bear_fvg_bottom) and src_bear_fvg_top >= src_bear_fvg_bottom
bool bpr_geometry_ok = src_bpr_active >= 0.5 and not na(src_bpr_top) and not na(src_bpr_bottom) and src_bpr_top >= src_bpr_bottom
bool void_geometry_ok = src_void_active >= 0.5 and not na(src_void_top) and not na(src_void_bottom) and src_void_top >= src_void_bottom
bool bull_ob_geometry_ok = not na(src_bull_ob_top) and not na(src_bull_ob_bottom) and src_bull_ob_top >= src_bull_ob_bottom
bool bear_ob_geometry_ok = not na(src_bear_ob_top) and not na(src_bear_ob_bottom) and src_bear_ob_top >= src_bear_ob_bottom
bool sweep_geometry_ok = not na(src_sweep_top) and not na(src_sweep_bottom) and src_sweep_top >= src_sweep_bottom
bool session_geometry_ok = not na(src_session_top) and not na(src_session_bottom) and src_session_top >= src_session_bottom
bool opening_geometry_ok = not na(src_or_top) and not na(src_or_bottom) and src_or_top >= src_or_bottom

color bull = color.new(color.lime, 15)
color bear = color.new(color.red, 15)
color neutral = color.new(color.gray, 35)

plotshape(show_structure and structure_ok and src_structure_bos >= 0.5 and src_structure_dir > 0, "BOS Bull", shape.triangleup, location.belowbar, bull, text = "BOS", size = size.tiny)
plotshape(show_structure and structure_ok and src_structure_bos >= 0.5 and src_structure_dir < 0, "BOS Bear", shape.triangledown, location.abovebar, bear, text = "BOS", size = size.tiny)
plotshape(show_structure and structure_ok and src_structure_choch >= 0.5 and src_structure_dir > 0, "CHoCH Bull", shape.triangleup, location.belowbar, bull, text = "CH", size = size.small)
plotshape(show_structure and structure_ok and src_structure_choch >= 0.5 and src_structure_dir < 0, "CHoCH Bear", shape.triangledown, location.abovebar, bear, text = "CH", size = size.small)
plot(show_structure and structure_ok ? src_resistance : na, "Context Resistance", bear, 1, plot.style_linebr)
plot(show_structure and structure_ok ? src_support : na, "Context Support", bull, 1, plot.style_linebr)

p_bull_fvg_top = plot(show_imbalance and imbalance_ok and bull_fvg_geometry_ok ? src_bull_fvg_top : na, "Bull FVG Top", color.new(bull, 25), 1, plot.style_linebr)
p_bull_fvg_bottom = plot(show_imbalance and imbalance_ok and bull_fvg_geometry_ok ? src_bull_fvg_bottom : na, "Bull FVG Bottom", color.new(bull, 25), 1, plot.style_linebr)
fill(p_bull_fvg_top, p_bull_fvg_bottom, color.new(color.lime, 90), "Bull FVG")
p_bear_fvg_top = plot(show_imbalance and imbalance_ok and bear_fvg_geometry_ok ? src_bear_fvg_top : na, "Bear FVG Top", color.new(bear, 25), 1, plot.style_linebr)
p_bear_fvg_bottom = plot(show_imbalance and imbalance_ok and bear_fvg_geometry_ok ? src_bear_fvg_bottom : na, "Bear FVG Bottom", color.new(bear, 25), 1, plot.style_linebr)
fill(p_bear_fvg_top, p_bear_fvg_bottom, color.new(color.red, 90), "Bear FVG")
p_bpr_top = plot(show_imbalance and imbalance_ok and bpr_geometry_ok ? src_bpr_top : na, "BPR Top", color.purple, 1, plot.style_linebr)
p_bpr_bottom = plot(show_imbalance and imbalance_ok and bpr_geometry_ok ? src_bpr_bottom : na, "BPR Bottom", color.purple, 1, plot.style_linebr)
fill(p_bpr_top, p_bpr_bottom, color.new(color.purple, 88), "BPR")
p_void_top = plot(show_imbalance and imbalance_ok and void_geometry_ok ? src_void_top : na, "Liquidity Void Top", color.orange, 1, plot.style_linebr)
p_void_bottom = plot(show_imbalance and imbalance_ok and void_geometry_ok ? src_void_bottom : na, "Liquidity Void Bottom", color.orange, 1, plot.style_linebr)
fill(p_void_top, p_void_bottom, color.new(color.orange, 90), "Liquidity Void")

p_bull_ob_top = plot(show_zones and zone_ok and bull_ob_geometry_ok ? src_bull_ob_top : na, "Bull OB Top", bull, 2, plot.style_linebr)
p_bull_ob_bottom = plot(show_zones and zone_ok and bull_ob_geometry_ok ? src_bull_ob_bottom : na, "Bull OB Bottom", bull, 2, plot.style_linebr)
fill(p_bull_ob_top, p_bull_ob_bottom, color.new(color.green, 88), "Bull OB")
p_bear_ob_top = plot(show_zones and zone_ok and bear_ob_geometry_ok ? src_bear_ob_top : na, "Bear OB Top", bear, 2, plot.style_linebr)
p_bear_ob_bottom = plot(show_zones and zone_ok and bear_ob_geometry_ok ? src_bear_ob_bottom : na, "Bear OB Bottom", bear, 2, plot.style_linebr)
fill(p_bear_ob_top, p_bear_ob_bottom, color.new(color.red, 88), "Bear OB")
plotshape(show_zones and zone_ok and src_bull_ob_new >= 0.5, "New Bull OB", shape.circle, location.belowbar, bull, text = "OB+", size = size.tiny)
plotshape(show_zones and zone_ok and src_bear_ob_new >= 0.5, "New Bear OB", shape.circle, location.abovebar, bear, text = "OB+", size = size.tiny)
plotshape(show_zones and zone_ok and src_bull_ob_broken >= 0.5, "Broken Bull OB", shape.xcross, location.belowbar, bear, text = "OB×", size = size.tiny)
plotshape(show_zones and zone_ok and src_bear_ob_broken >= 0.5, "Broken Bear OB", shape.xcross, location.abovebar, bull, text = "OB×", size = size.tiny)

p_sweep_top = plot(show_sweeps and sweep_ok and sweep_geometry_ok ? src_sweep_top : na, "Sweep Zone Top", color.fuchsia, 1, plot.style_linebr)
p_sweep_bottom = plot(show_sweeps and sweep_ok and sweep_geometry_ok ? src_sweep_bottom : na, "Sweep Zone Bottom", color.fuchsia, 1, plot.style_linebr)
fill(p_sweep_top, p_sweep_bottom, color.new(color.fuchsia, 90), "Sweep Zone")
plotshape(show_sweeps and sweep_ok and src_sweep_reclaim >= 0.5 and src_sweep_dir > 0, "Bull Sweep Reclaim", shape.diamond, location.belowbar, bull, text = "R", size = size.tiny)
plotshape(show_sweeps and sweep_ok and src_sweep_reclaim >= 0.5 and src_sweep_dir < 0, "Bear Sweep Reclaim", shape.diamond, location.abovebar, bear, text = "R", size = size.tiny)

plot(show_pools and pool_ok ? src_buy_pool : na, "Buy-side Liquidity", color.new(color.red, 5), 2, plot.style_linebr)
plot(show_pools and pool_ok ? src_sell_pool : na, "Sell-side Liquidity", color.new(color.lime, 5), 2, plot.style_linebr)

plot(show_session and session_ok and session_geometry_ok ? src_session_top : na, "Session High", color.new(color.blue, 10), 1, plot.style_linebr)
plot(show_session and session_ok and session_geometry_ok ? src_session_bottom : na, "Session Low", color.new(color.blue, 10), 1, plot.style_linebr)
color opening_color = src_or_active >= 0.5 ? color.new(color.yellow, 10) : color.new(color.yellow, 55)
plot(show_session and session_ok and opening_geometry_ok ? src_or_top : na, "Opening Range High", opening_color, 1, plot.style_linebr)
plot(show_session and session_ok and opening_geometry_ok ? src_or_bottom : na, "Opening Range Low", opening_color, 1, plot.style_linebr)
// Session-level MSS: the confirmed close crossed the PREVIOUS session's
// extreme (producer-computed one-bar pulse; see the v3 contract).
plotshape(show_session and session_ok and src_session_mss_bull >= 0.5, "Session MSS Bull", shape.triangleup, location.belowbar, color.new(color.green, 10), text = "sMSS", size = size.tiny)
plotshape(show_session and session_ok and src_session_mss_bear >= 0.5, "Session MSS Bear", shape.triangledown, location.abovebar, color.new(color.red, 10), text = "sMSS", size = size.tiny)
bgcolor(show_session and session_ok and src_killzone >= 0.5 ? color.new(color.blue, 94) : na, title = "Context Killzone")

var table summary = table.new(position.top_right, 2, 8, border_width = 1)
if barstate.islast
    color status_color = transport_ok ? color.new(color.green, 75) : color.new(color.red, 65)
    table.cell(summary, 0, 0, "Context BUS", text_color = chart.fg_color, bgcolor = status_color)
    table.cell(summary, 1, 0, transport_ok ? "READY · " + str.tostring(producer_age_seconds) + "s" : schema_ok ? "STALE/INVALID" : "UNBOUND", text_color = chart.fg_color, bgcolor = status_color)
    table.cell(summary, 0, 1, "Aggregate", text_color = chart.fg_color)
    table.cell(summary, 1, 1, transport_ok ? dir_text(src_bias) + " · " + str.tostring(int(math.round(src_quality))) + "% · " + str.tostring(int(math.round(src_domains))) + "/6" : "—", text_color = transport_ok ? (src_bias > 0 ? bull : src_bias < 0 ? bear : neutral) : neutral)
    table.cell(summary, 0, 2, "Structure", text_color = chart.fg_color)
    table.cell(summary, 1, 2, structure_ok ? dir_text(src_structure_trend) + " · age " + str.tostring(int(math.round(src_structure_age))) : "—", text_color = chart.fg_color)
    table.cell(summary, 0, 3, "Imbalance", text_color = chart.fg_color)
    table.cell(summary, 1, 3, imbalance_ok ? "S" + str.tostring(int(math.round(src_imbalance_state))) + " · " + dir_text(src_fvg_bias) + (src_bpr_active >= 0.5 ? " · BPR " + dir_text(src_bpr_dir) : "") : "—", text_color = chart.fg_color)
    table.cell(summary, 0, 4, "Zones", text_color = chart.fg_color)
    table.cell(summary, 1, 4, zone_ok ? "S" + str.tostring(int(math.round(src_zone_state))) + " · " + dir_text(src_ob_bias) : "—", text_color = chart.fg_color)
    table.cell(summary, 0, 5, "Sweep", text_color = chart.fg_color)
    table.cell(summary, 1, 5, sweep_ok ? "T" + str.tostring(int(math.round(src_sweep_type))) + " · Q" + str.tostring(int(math.round(src_sweep_quality))) + " · age " + str.tostring(int(math.round(src_sweep_age))) : "—", text_color = chart.fg_color)
    table.cell(summary, 0, 6, "Pools", text_color = chart.fg_color)
    table.cell(summary, 1, 6, pool_ok ? dir_text(src_pool_magnet) + " · " + str.tostring(src_pool_imbalance, "#.##") + " · " + str.tostring(int(math.round(src_buy_strength))) + "/" + str.tostring(int(math.round(src_sell_strength))) : "—", text_color = chart.fg_color)
    table.cell(summary, 0, 7, "Session", text_color = chart.fg_color)
    table.cell(summary, 1, 7, session_ok ? "S" + str.tostring(int(math.round(src_session_code))) + " · " + dir_text(src_session_dir) + (src_killzone >= 0.5 ? " · KZ" : "") : "—", text_color = chart.fg_color)

Overview

SMC Context Overlay visualizes market structure events such as Break of Structure (BOS), Change of Character (CHOCH), support and resistance levels, as well as liquidity imbalances including Fair Value Gaps (FVG), Balanced Price Ranges (BPR), and liquidity voids. Input settings allow users to toggle structure and imbalance overlays, set data source links, and constrain maximum data age. It acts as a passive visualizer for external data pipelines without generating independent trading signals.

Details

Published by

skipp-dev on GitHub

Code credit

preuss_steffen, as written in the script's header

Type

Indicator, Pine Script v6

Draws

On the price chart

Category

SMC / ICT / price action, Support & resistance

Markets

Any symbol

Timeframes

Any timeframe

Risk Notes

No repainting, lookahead or stacked entries were found in its code or README. That says nothing about how well it works: test it first.

Settings

The inputs you can change from the gear icon on the chart. Defaults are the author's.

SettingTypeDefaultVariable
CTX SchemaVersionsourceclosesrc_schema
CTX Readysourceclosesrc_ready
CTX AvailabilityMasksourceclosesrc_mask
CTX ConfirmedEpochsourceclosesrc_epoch
CTX Biassourceclosesrc_bias
CTX AvailableDomainssourceclosesrc_domains
CTX QualityScoresourceclosesrc_quality
Maximum live producer age (minutes)int240max_age_minutes
Show structurebooltrueshow_structure
CTX StructureTrendsourceclosesrc_structure_trend
CTX StructureBossourceclosesrc_structure_bos
CTX StructureChochsourceclosesrc_structure_choch
Show all 40 settings
SettingTypeDefaultVariable
CTX StructureEventDirectionsourceclosesrc_structure_dir
CTX StructureResistancesourceclosesrc_resistance
CTX StructureSupportsourceclosesrc_support
CTX StructureEventAgeBarssourceclosesrc_structure_age
Show FVG / BPR / liquidity voidbooltrueshow_imbalance
CTX ImbalanceStatesourceclosesrc_imbalance_state
CTX FvgBiassourceclosesrc_fvg_bias
CTX BullFvgActivesourceclosesrc_bull_fvg_active
CTX BearFvgActivesourceclosesrc_bear_fvg_active
CTX BullFvgTopsourceclosesrc_bull_fvg_top
CTX BullFvgBottomsourceclosesrc_bull_fvg_bottom
CTX BearFvgTopsourceclosesrc_bear_fvg_top
CTX BearFvgBottomsourceclosesrc_bear_fvg_bottom
CTX BprActivesourceclosesrc_bpr_active
CTX BprDirectionsourceclosesrc_bpr_dir
CTX BprTopsourceclosesrc_bpr_top
CTX BprBottomsourceclosesrc_bpr_bottom
CTX LiquidityVoidActivesourceclosesrc_void_active
CTX LiquidityVoidTopsourceclosesrc_void_top
CTX LiquidityVoidBottomsourceclosesrc_void_bottom
Show order-block zonesbooltrueshow_zones
CTX ZoneStatesourceclosesrc_zone_state
CTX ObBiassourceclosesrc_ob_bias
CTX BullObTopsourceclosesrc_bull_ob_top
CTX BullObBottomsourceclosesrc_bull_ob_bottom
CTX BearObTopsourceclosesrc_bear_ob_top
CTX BearObBottomsourceclosesrc_bear_ob_bottom
CTX BullObNewsourceclosesrc_bull_ob_new
Third-party code. ForexR did not write, test or endorse this script, and the summary above was generated automatically from its code and README. Indicators describe the past, and a strategy's backtest can look better than live trading, especially when a script repaints. Check it in the Strategy Tester and on a demo account before you rely on it.

Similar Pine Scripts

ICT Equal Highs and Lows

by ArunKBhaskar
575 stars

This overlay indicator finds pivot highs and lows on the price chart and compares the last two highs and the last two lows. When the percentage difference between a pair is below the Equal HL threshold, it treats them as equal levels and draws a box. Left and

Indicator v5 SMC / ICT / price actionSupport & resistance
Updated 1 year ago · MPL-2.0 GitHub repository of ICT Equal Highs and Lows

DE-tracker

by Allen1212
303 stars

This indicator plots labels on the TradingView price chart to mark ARK Invest's buy and sell trades for the DE stock. Buy transactions appear in green with X1 or X2 multipliers showing the number of ARK ETFs involved on the same day; sells appear in red. The m

Indicator v4 Support & resistanceSMC / ICT / price action
Updated 2 years ago · None stated GitHub repository of DE-tracker

This Pine Script indicator plots a ZigZag on the price chart. It identifies reversal points when price moves more than a set percentage from the last pivot. The script calculates forecasts using zigzag data and labels detected geometric patterns including harm

Indicator v4 TrendSupport & resistance

Golden Bullet Strategy

by TradersPost
218 stars

The Golden Bullet Strategy is an overlay signal indicator based on Smart Money Concepts and time-based liquidity models. It identifies liquidity sweeps of a designated reference session range during a specified hunt window. It then confirms Market Structure Sh

Indicator v6 SMC / ICT / price actionSessions & time
Updated 3 months ago · None stated GitHub repository of Golden Bullet Strategy

Open Source Fractal

by cantolab
183 stars

This indicator implements the Fractal Model concept to plot market structure shifts, liquidity sweeps, and Change in State of Delivery (CISD) levels. It overlays custom higher-timeframe candle previews, open prices, and time markers directly on the price chart

Indicator v6 SMC / ICT / price actionSupport & resistance
Updated 2 months ago · MIT GitHub repository of Open Source Fractal

Swing Failure Signals

by Ganador1
154 stars

This indicator calculates pivot highs and pivot lows to detect liquidity sweeps and Swing Failure Patterns. It identifies when price breaks past recent key swing highs or lows within a configurable historical window, then looks for a quick reversal or change i

Indicator v6 SMC / ICT / price actionSupport & resistance
Updated 2 months ago · Apache-2.0 GitHub repository of Swing Failure Signals

More indicators

Trade Your Charts With a Regulated Broker

Compare brokers that connect to TradingView, with spreads, minimum deposits and leverage side by side.

Compare brokers