Smart Money Concepts PRO v2 [OB+FVG+BOS/CHoCH+Liq+EQH/EQL+P/D+Breakers+HTF]
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator smart money pro v2 for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это индикатор для 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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.