← К каталогу
Исходный код · ID 4175

Smart Money Concepts PRO v2 [OB+FVG+BOS/CHoCH+Liq+EQH/EQL+P/D+Breakers+HTF]

indicator smart money pro v2 for tradingview.pine

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Это индикатор для TradingView, написанный на Pine Script v5. Он отображает на графике элементы анализа рыночной структуры: свинги (локальные максимумы и минимумы), события слома структуры (BOS) и смены характера (CHoCH), ордер-блоки, брейкер-блоки, зоны несправедливой стоимости (FVG), сигналы ликвидностных свипов, равные максимумы и минимумы (EQH/EQL), а также зоны премии и дисконта. Дополнительно предусмотрена панель информации с текущим состоянием тренда, смещением старшего таймфрейма, количеством активных ордер-блоков, брейкеров и FVG, а также последним сигналом.

Индикатор поддерживает фильтрацию по объёму, настройку чувствительности свингов, выбор способа подтверждения снятия ордер-блоков, а также фильтр тренда старшего таймфрейма на основе двух экспоненциальных скользящих средних. Сигналы LONG и SHORT формируются при касании свежего ордер-блока с учётом выбранных условий: нахождения цены в соответствующей зоне премии или дисконта и согласования со смещением старшего таймфрейма.

Все элементы отображаются в виде линий, прямоугольников, меток и фоновой подсветки. Индикатор не является стратегией и не выполняет автоматическую торговлю, а также не содержит встроенных оповещений о прибыли или гарантий доходности.

Настройки программы

НастройкаОписание
swingLen Длина свинга (поиск пивотов) — Количество баров для поиска локальных максимумов и минимумов. Большее значение соответствует структуре более высокого порядка.
showSwings Показывать точки HH/LL — Отображает точки локальных максимумов и минимумов.
showBOS Показывать BOS — Отображает события слома структуры (BOS).
showCHoCH Показывать CHoCH — Отображает события смены характера (CHoCH).
compactMode Компактный режим — Скрывает метки максимумов и минимумов, а также стрелки свипов, оставляя только ключевые элементы структуры.
showTrendBG Подсветка фона по тренду — Подсвечивает фон графика в зависимости от текущего направления тренда.
bullCol Цвет бычьей структуры — Цвет отображения бычьей структуры.
bearCol Цвет медвежьей структуры — Цвет отображения медвежьей структуры.
useHtf Использовать фильтр тренда HTF — Включает фильтр тренда старшего таймфрейма на основе двух экспоненциальных скользящих средних.
htfRes Таймфрейм HTF — Таймфрейм, используемый для определения смещения старшего таймфрейма.
htfFast Быстрая EMA (HTF) — Период быстрой экспоненциальной скользящей средней на старшем таймфрейме.
htfSlow Медленная EMA (HTF) — Период медленной экспоненциальной скользящей средней на старшем таймфрейме.
showOB Показывать ордер-блоки — Отображает ордер-блоки.
obMaxCount Максимум активных ордер-блоков — Максимальное количество одновременно отображаемых ордер-блоков.
obMitigation Способ снятия ордер-блока — Определяет способ подтверждения снятия ордер-блока: по касанию фитилём или по закрытию свечи за уровнем.
obVolFilter Только ордер-блоки с повышенным объёмом — Выделяет ордер-блоки, сформированные на свече с объёмом выше среднего, умноженного на заданный коэффициент.
volMult Множитель объёма — Коэффициент, на который умножается средний объём для определения повышенного объёма.
bullOBCol Цвет бычьего ордер-блока — Цвет отображения бычьего ордер-блока.
bearOBCol Цвет медвежьего ордер-блока — Цвет отображения медвежьего ордер-блока.
obBorder Рамка вокруг ордер-блока — Отображает рамку вокруг ордер-блока.
showBR Показывать брейкер-блоки — Отображает брейкер-блоки, которые образуются при снятии ордер-блока.
brMaxCount Максимум активных брейкеров — Максимальное количество одновременно отображаемых брейкер-блоков.
bullBRCol Цвет бычьего брейкера — Цвет отображения бычьего брейкер-блока.
bearBRCol Цвет медвежьего брейкера — Цвет отображения медвежьего брейкер-блока.
showFVG Показывать FVG — Отображает зоны несправедливой стоимости (FVG).
fvgMaxCount Максимум активных FVG — Максимальное количество одновременно отображаемых зон несправедливой стоимости.
fvgMinAtr Минимальный размер FVG (x ATR14) — Минимальный размер зоны несправедливой стоимости, выраженный в единицах ATR14.
fvgDisp Требовать смещение (сильная свеча) — Требует наличия импульсной свечи для подтверждения зоны несправедливой стоимости.
fvgDispMult Минимальное тело свечи (x ATR14) — Минимальный размер тела центральной свечи для подтверждения смещения, выраженный в единицах ATR14.
bullFVGCol Цвет бычьего FVG — Цвет отображения бычьей зоны несправедливой стоимости.
bearFVGCol Цвет медвежьего FVG — Цвет отображения медвежьей зоны несправедливой стоимости.
showLiq Показывать сигналы свипов — Отображает сигналы ликвидностных свипов.
liqVolConf Только свипы с повышенным объёмом — Отображает только те свипы, у которых объём свечи превышает средний объём, умноженный на заданный коэффициент.
liqLabel Тип метки свипа — Тип отображения метки ликвидностного свипа: стрелка или текст.
bullLiqCol Цвет бычьего свипа — Цвет отображения бычьего ликвидностного свипа (захват минимума).
bearLiqCol Цвет медвежьего свипа — Цвет отображения медвежьего ликвидностного свипа (захват максимума).
showEQ Показывать EQH/EQL — Отображает равные максимумы и минимумы (EQH/EQL).
eqTolAtr Допуск EQH/EQL (x ATR14) — Допуск для определения равных максимумов и минимумов, выраженный в единицах ATR14.
eqCol Цвет линий EQH/EQL — Цвет линий равных максимумов и минимумов.
showPD Показывать зоны P/D — Отображает зоны премии и дисконта, построенные по последнему свингу.
pdExtend Длина зоны (баров вправо) — Длина зон премии и дисконта в барах вправо от последнего свинга.
premiumCol Цвет зоны премии — Цвет заливки зоны премии.
discountCol Цвет зоны дисконта — Цвет заливки зоны дисконта.
eqCol2 Цвет линии равновесия — Цвет линии равновесия в зонах премии и дисконта.
showSig Показывать сигналы LONG/SHORT — Отображает сигналы LONG и SHORT.
sigNeedHtf Требовать согласования с HTF — Требует согласования сигнала с направлением тренда старшего таймфрейма.
sigNeedZone Требовать правильную зону P/D — Требует нахождения цены в соответствующей зоне премии или дисконта для формирования сигнала.
bullSigCol Цвет сигнала LONG — Цвет отображения сигнала LONG.
bearSigCol Цвет сигнала SHORT — Цвет отображения сигнала SHORT.
aBOS Оповещение BOS — Включает или отключает оповещение о событии слома структуры (BOS).
aCHOCH Оповещение CHoCH — Включает или отключает оповещение о событии смены характера (CHoCH).
aNewOB Оповещение нового ордер-блока — Включает или отключает оповещение о формировании нового ордер-блока.
aTouch Оповещение касания ордер-блока — Включает или отключает оповещение о касании ордер-блока.
aFVG Оповещение нового FVG — Включает или отключает оповещение о формировании новой зоны несправедливой стоимости (FVG).
aSweep Оповещение ликвидностного свипа — Включает или отключает оповещение о ликвидностном свипе.
aEQ Оповещение EQH/EQL — Включает или отключает оповещение о формировании равных максимумов или минимумов (EQH/EQL).
aBR Оповещение нового брейкера — Включает или отключает оповещение о формировании нового брейкер-блока.
aSig Оповещение сигнала — Включает или отключает оповещение о формировании сигнала LONG или SHORT.
Получить полный код

Поиск по коду файла

indicator("Smart Money Concepts PRO v2 [OB+FVG+BOS/CHoCH+Liq+EQH/EQL+P/D+Breakers+HTF]",
  shorttitle      = "SMC PRO v2",
  overlay         = true,
  max_boxes_count = 500,
  max_lines_count = 500,
  max_labels_count= 500)

gStruct = "Market Structure"
swingLen    = input.int(10, "Swing length (pivot lookback)", minval=2, maxval=100, group=gStruct,
                 tooltip="Larger value = higher-degree structure. 5-10 for scalping, 20-50 for swing trading.")
showSwings  = input.bool(true,  "Show HH / LL points",       group=gStruct)
showBOS     = input.bool(true,  "Show BOS",                  group=gStruct)
showCHoCH   = input.bool(true,  "Show CHoCH",                group=gStruct)
compactMode = input.bool(false, "Compact mode (no decorations)", group=gStruct,
                 tooltip="Hides H/L markers and sweep arrows, keeping only key structure (BOS/CHoCH/OB/FVG).")
showTrendBG = input.bool(false, "Highlight background by trend", group=gStruct)
bullCol     = input.color(#26a69a, "Bullish structure color", group=gStruct)
bearCol     = input.color(#ef5350, "Bearish structure color", group=gStruct)

gHTF = "HTF bias (higher timeframe)"
useHtf      = input.bool(true,   "Use HTF trend filter", group=gHTF,
                 tooltip="Determines the higher-timeframe trend from two EMAs. Used for background shading and to filter confluence signals.")
htfRes      = input.timeframe("240", "HTF timeframe", group=gHTF,
                 tooltip="For example: 60, 240, D. Ideally 4-6x larger than the working timeframe.")
htfFast     = input.int(21, "Fast EMA (HTF)", minval=2, group=gHTF)
htfSlow     = input.int(50, "Slow EMA (HTF)", minval=3, group=gHTF)

gOB = "Order Blocks"
showOB       = input.bool(true,   "Show Order Blocks",          group=gOB)
obMaxCount   = input.int(5,       "Max active OBs", minval=1, maxval=20, group=gOB)
obMitigation = input.string("Wick","Mitigation by",            options=["Wick","Close"], group=gOB,
                 tooltip="Wick - block is mitigated by a wick touch. Close - by a bar closing beyond the level.")
obVolFilter  = input.bool(true,   "Only OBs with elevated volume", group=gOB,
                 tooltip="OB is highlighted brighter if the formation candle volume is above the average x multiplier.")
volMult      = input.float(1.5,   "Volume multiplier",          minval=1.0, step=0.1, group=gOB,
                 tooltip="The OB / sweep candle volume must exceed SMA(volume,20) by this factor to count as strong.")
bullOBCol    = input.color(color.new(#26a69a, 80), "Bullish OB color",  group=gOB)
bearOBCol    = input.color(color.new(#ef5350, 80), "Bearish OB color",  group=gOB)
obBorder     = input.bool(true,   "Border around OB",           group=gOB)

gBR = "Breaker Blocks"
showBR       = input.bool(true,   "Show Breaker Blocks", group=gBR,
                 tooltip="When an OB is broken it becomes a Breaker of the opposite direction (former support becomes resistance and vice versa).")
brMaxCount   = input.int(5,       "Max active Breakers",   minval=1, maxval=20, group=gBR)
bullBRCol    = input.color(color.new(#2962ff, 80), "Bullish Breaker color", group=gBR)
bearBRCol    = input.color(color.new(#ff6d00, 80), "Bearish Breaker color", group=gBR)

gFVG = "Fair Value Gaps (imbalances)"
showFVG     = input.bool(true,  "Show FVG",                       group=gFVG)
fvgMaxCount = input.int(10,     "Max active FVGs",   minval=1, maxval=30, group=gFVG)
fvgMinAtr   = input.float(0.25, "Min FVG size (x ATR14)",         minval=0.0, step=0.05, group=gFVG,
                 tooltip="Noise filter. 0 = no filter. 0.25-0.5 works well on crypto.")
fvgDisp     = input.bool(true,  "Require displacement (strong candle)", group=gFVG,
                 tooltip="FVG counts only if the central candle is impulsive: body >= multiplier x ATR14. Filters out weak gaps.")
fvgDispMult = input.float(0.5,  "Min candle body (x ATR14)",      minval=0.0, step=0.05, group=gFVG)
bullFVGCol  = input.color(color.new(#4caf50, 80), "Bullish FVG color", group=gFVG)
bearFVGCol  = input.color(color.new(#ff9800, 80), "Bearish FVG color", group=gFVG)

gLiq = "Liquidity Sweeps"
showLiq     = input.bool(true,  "Show sweep signals", group=gLiq,
                 tooltip="A candle wicks through a swing but the close returns inside - a classic stop hunt before a reversal.")
liqVolConf  = input.bool(false, "Only sweeps with elevated volume", group=gLiq,
                 tooltip="Mark only sweeps where candle volume exceeded SMA(volume,20) x multiplier. Reduces false labels.")
liqLabel    = input.string("Arrow", "Label type", options=["Arrow","Text"], group=gLiq)
bullLiqCol  = input.color(#26a69a, "Bullish sweep color (low grab)",  group=gLiq)
bearLiqCol  = input.color(#ef5350, "Bearish sweep color (high grab)", group=gLiq)

gEQ = "Equal Highs / Lows"
showEQ      = input.bool(true,  "Show EQH/EQL",        group=gEQ,
                 tooltip="Equal highs/lows within a tolerance - liquidity zones.")
eqTolAtr    = input.float(0.15, "Tolerance (x ATR14)", minval=0.01, step=0.05, group=gEQ)
eqCol       = input.color(color.new(#9c27b0, 30), "EQH/EQL line color", group=gEQ)

gPD = "Premium / Discount zones"
showPD      = input.bool(true,  "Show P/D zones",      group=gPD,
                 tooltip="Auto Fibonacci between the last swing high and low. Premium (above 50%) - for shorts, Discount (below 50%) - for longs.")
pdExtend    = input.int(30,     "Zone length (bars to the right)", minval=5, maxval=200, group=gPD)
premiumCol  = input.color(color.new(#ef5350, 92), "Premium zone color",  group=gPD)
discountCol = input.color(color.new(#26a69a, 92), "Discount zone color", group=gPD)
eqCol2      = input.color(color.new(#ffc107, 50), "Equilibrium line color", group=gPD)

gSig = "Confluence entry signals"
showSig     = input.bool(true,  "Show LONG / SHORT signals", group=gSig,
                 tooltip="Signal = retest of a fresh OB in the correct zone (Discount for long / Premium for short) + agreement with the HTF bias.")
sigNeedHtf  = input.bool(true,  "Require HTF agreement",   group=gSig,
                 tooltip="Long only when HTF is bullish, short only when bearish. If the HTF filter is off, this condition is ignored.")
sigNeedZone = input.bool(true,  "Require correct P/D zone", group=gSig,
                 tooltip="Long - only in Discount, short - only in Premium relative to the equilibrium of the last range.")
bullSigCol  = input.color(#00e676, "LONG signal color",  group=gSig)
bearSigCol  = input.color(#ff1744, "SHORT signal color", group=gSig)

gAlert = "Alerts"
aBOS    = input.bool(true, "BOS",              group=gAlert)
aCHOCH  = input.bool(true, "CHoCH",            group=gAlert)
aNewOB  = input.bool(true, "New OB",           group=gAlert)
aTouch  = input.bool(true, "OB touch",         group=gAlert)
aFVG    = input.bool(true, "New FVG",          group=gAlert)
aSweep  = input.bool(true, "Liquidity sweep",  group=gAlert)
aEQ     = input.bool(true, "EQH / EQL",        group=gAlert)
aBR     = input.bool(true, "New Breaker",      group=gAlert)
aSig    = input.bool(true, "Confluence signal",group=gAlert)

var float lastPH    = na
var float lastPL    = na
var int   lastPHbar = na
var int   lastPLbar = na
var float prevPH    = na
var float prevPL    = na
var int   prevPHbar = na
var int   prevPLbar = na
var bool  phBroken  = true
var bool  plBroken  = true
var int   trend     = 0
var string lastSig  = "-"      // last confluence signal for the dashboard

var box[] bullOBs      = array.new<box>()
var box[] bearOBs      = array.new<box>()
var box[] bullBreakers = array.new<box>()
var box[] bearBreakers = array.new<box>()
var box[] bullFVGs     = array.new<box>()
var box[] bearFVGs     = array.new<box>()

var box  pdBoxPrem = na
var box  pdBoxDisc = na
var line pdLineEq  = na
var line pdLineTop = na
var line pdLineBot = na

atr14  = ta.atr(14)
volSma = ta.sma(volume, 20)
strongVolNow = not na(volSma) and volume > volSma * volMult

htfUpRaw = request.security(syminfo.tickerid, htfRes,
              (ta.ema(close, htfFast) > ta.ema(close, htfSlow))[1],
              lookahead = barmerge.lookahead_on)
bool htfUp = na(htfUpRaw) ? false : htfUpRaw
htfBull = useHtf and htfUp
htfBear = useHtf and not htfUp
htfBiasTxt = not useHtf ? "OFF" : htfBull ? "BULL" : htfBear ? "BEAR" : "-"
htfBiasCol = not useHtf ? color.gray : htfBull ? bullCol : htfBear ? bearCol : color.gray

ph = ta.pivothigh(high, swingLen, swingLen)
pl = ta.pivotlow(low,  swingLen, swingLen)

bool didEQH = false
bool didEQL = false
bool didH   = false
bool didL   = false

if not na(ph)
    if showEQ and not na(lastPH) and math.abs(ph - lastPH) <= atr14 * eqTolAtr
        didEQH := true
        line.new(lastPHbar, lastPH, bar_index - swingLen, ph, color=eqCol, style=line.style_dotted, width=2)
        if aEQ
            alert("EQH: equal highs - liquidity zone above", alert.freq_once_per_bar)
    else
        didH := true
    prevPH    := lastPH
    prevPHbar := lastPHbar
    lastPH    := ph
    lastPHbar := bar_index - swingLen
    phBroken  := false

if not na(pl)
    if showEQ and not na(lastPL) and math.abs(pl - lastPL) <= atr14 * eqTolAtr
        didEQL := true
        line.new(lastPLbar, lastPL, bar_index - swingLen, pl, color=eqCol, style=line.style_dotted, width=2)
        if aEQ
            alert("EQL: equal lows - liquidity zone below", alert.freq_once_per_bar)
    else
        didL := true
    prevPL    := lastPL
    prevPLbar := lastPLbar
    lastPL    := pl
    lastPLbar := bar_index - swingLen
    plBroken  := false

plotshape(showSwings and not compactMode and didH,
  title    = "Swing High",
  style    = shape.circle,
  location = location.abovebar,
  color    = color.new(bearCol, 50),
  size     = size.tiny,
  offset   = -swingLen)
plotshape(showSwings and not compactMode and didL,
  title    = "Swing Low",
  style    = shape.circle,
  location = location.belowbar,
  color    = color.new(bullCol, 50),
  size     = size.tiny,
  offset   = -swingLen)
plotshape(showEQ and not compactMode and didEQH,
  title    = "EQH",
  style    = shape.diamond,
  location = location.abovebar,
  color    = color.new(eqCol, 20),
  size     = size.tiny,
  offset   = -swingLen)
plotshape(showEQ and not compactMode and didEQL,
  title    = "EQL",
  style    = shape.diamond,
  location = location.belowbar,
  color    = color.new(eqCol, 20),
  size     = size.tiny,
  offset   = -swingLen)

bearSweepRaw = showLiq and not na(lastPH) and not phBroken and high > lastPH and close < lastPH
bullSweepRaw = showLiq and not na(lastPL) and not plBroken and low  < lastPL and close > lastPL

bearSweep = bearSweepRaw and (not liqVolConf or strongVolNow)
bullSweep = bullSweepRaw and (not liqVolConf or strongVolNow)

if bearSweep and aSweep
    alert("Liquidity sweep above (high grab)", alert.freq_once_per_bar)
if bullSweep and aSweep
    alert("Liquidity sweep below (low grab)", alert.freq_once_per_bar)

plotshape(bearSweep and not compactMode,
  title    = "Sweep High",
  style    = shape.triangledown,
  location = location.abovebar,
  color    = bearLiqCol,
  size     = size.small)
plotshape(bullSweep and not compactMode,
  title    = "Sweep Low",
  style    = shape.triangleup,
  location = location.belowbar,
  color    = bullLiqCol,
  size     = size.small)
plotchar(bearSweep and not compactMode and liqLabel == "Text",
  title    = "Sweep Text Top",
  char     = "S",
  location = location.abovebar,
  color    = bearLiqCol,
  size     = size.tiny)
plotchar(bullSweep and not compactMode and liqLabel == "Text",
  title    = "Sweep Text Bot",
  char     = "S",
  location = location.belowbar,
  color    = bullLiqCol,
  size     = size.tiny)

bullEvent = not na(lastPH) and not phBroken and close > lastPH
bearEvent = not na(lastPL) and not plBroken and close < lastPL

isBullCHoCH = bullEvent and trend == -1
isBullBOS   = bullEvent and trend != -1
isBearCHoCH = bearEvent and trend ==  1
isBearBOS   = bearEvent and trend !=  1

if bullEvent
    phBroken := true
    trend    := 1
if bearEvent
    plBroken := true
    trend    := -1

drawStructure(level, fromBar, isBull, isCH) =>
    col = isBull ? bullCol : bearCol
    txt = isCH ? " CHoCH" : " BOS"
    line.new(fromBar, level, bar_index, level, color=col, style=line.style_dashed, width=1)

    label.new(bar_index, level, txt,
      style     = labe

Показано первые 50% кода (символов: 18542)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
1 854,20₽ ≈ $22.66