Smart Money Absorption Radar
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator smart money absorption radar for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «Smart Money Absorption Radar» анализирует всплески объёма, паттерны отката свечей и ликвидностные спреды на графике TradingView для выявления зон поглощения. Он отображает сигналы BUY/SELL, зоны поглощения, маркеры ликвидностных спредов, скользящую среднюю EMA и информационную панель с текущим состоянием объёма и давления покупателей/продавцов. Пользователь может настраивать пороги объёма, коэффициенты отката свечей, фильтры трендов и уровни стоп-лосса и тейк-профита. Индикатор поддерживает условные оповещения TradingView для всплесков объёма, сигналов поглощения и ликвидностных спредов.
Настройки программы
| Настройка | Описание |
|---|---|
| volLength | Период скользящей средней для расчёта среднего объёма, с которым сравнивается текущий объём. |
| volMultiplier | Множитель, определяющий порог всплеска объёма: текущий объём должен быть не менее среднего, умноженного на это значение. |
| wickRatio | Минимальное соотношение теневой свечи к общему диапазону для распознавания паттерна отката (отклонения) свечи. |
| rangeLength | Количество баров назад для поиска предыдущих максимумов и минимумов при определении ликвидностных спредов. |
| useTrendFilter | При активации сигналы поглощения фильтруются по положению цены относительно EMA: покупательские сигналы только при цене выше EMA, продавецские — ниже. |
| emaLength | Период расчёта экспоненциальной скользящей средней EMA, используемой в качестве фильтра тренда при активном переключателе фильтра тренда. |
| useSweepFilter | При активации сигнал поглощения требует предварительного подтверждения ликвидностным спредом. |
| cooldown | Количество баров ожидания между последовательными сигналами поглощения, предотвращающий повторные оповещения в коротком промежутке времени. |
| showZones | Включает или скрывает прямоугольные зоны поглощения покупателей и продавцов на графике. |
| showSweep | Включает или скрывает графические маркеры ликвидностных спредов (бычьих и медвежьих) на графике. |
| showEMA | Включает или скрывает отображение экспоненциальной скользящей средней EMA на графике. |
| showSignals | Включает или скрывает графические метки BUY и SELL на графике при подтверждённых сигналах поглощения. |
| zoneExtension | Количество баров вправо, на которые расширяются прямоугольные зоны поглощения после появления сигнала. |
| showDashboard | Включает или скрывает информационную панель в правом верхнем углу графика с отображением состояния объёма, давления и тренда. |
| showTargets | Включает или скрывает автоматические линии входа, стоп-лосса и трёх уровней тейк-профита при появлении сигнала. |
| targetATR | Множитель ATR для расчёта расстояния стоп-лосса от точки входа. |
| targetRR1 | Соотношение риск и доходность для первого уровня тейк-профита. |
| targetRR2 | Соотношение риск и доходность для второго уровня тейк-профита. |
| targetRR3 | Соотношение риск и доходность для третьего уровня тейк-профита. |
| targetExtension | Количество баров вправо, на которые продлеваются линии входа, стоп-лосса и тейк-профита. |
Поиск по коду файла
indicator("Smart Money Absorption Radar", overlay=true, max_labels_count=100, max_boxes_count=20, max_lines_count=30)
groupAbs = "Absorption Engine"
volLength = input.int(20, "Volume Average Length", minval=5, group=groupAbs)
volMultiplier = input.float(1.5, "Volume Spike Multiplier", minval=1.0, step=0.1, group=groupAbs)
wickRatio = input.float(0.40, "Minimum Rejection Wick Ratio", minval=0.1, maxval=0.9, step=0.05, group=groupAbs)
rangeLength = input.int(20, "Liquidity Lookback", minval=5, group=groupAbs)
groupFilter = "Signal Filters"
useTrendFilter = input.bool(false, "Use EMA Trend Filter", group=groupFilter)
emaLength = input.int(200, "EMA Length", minval=20, group=groupFilter)
useSweepFilter = input.bool(false, "Require Liquidity Sweep", group=groupFilter)
cooldown = input.int(8, "Signal Cooldown Bars", minval=0, group=groupFilter)
groupVisual = "Chart Visuals"
showZones = input.bool(true, "Show Absorption Zones", group=groupVisual)
showSweep = input.bool(true, "Show Liquidity Sweeps", group=groupVisual)
showEMA = input.bool(false, "Show EMA", group=groupVisual)
showSignals = input.bool(true, "Show BUY / SELL Signals", group=groupVisual)
zoneExtension = input.int(20, "Zone Extension Bars", minval=1, maxval=200, group=groupVisual)
groupDash = "Radar Dashboard"
showDashboard = input.bool(true, "Show Dashboard", group=groupDash)
atr = ta.atr(14)
ema = ta.ema(close, emaLength)
avgVolume = ta.sma(volume, volLength)
validVolume = not na(volume) and not na(avgVolume) and avgVolume > 0
volumeSpike = validVolume and volume >= avgVolume * volMultiplier
candleRange = math.max(high - low, syminfo.mintick)
body = math.abs(close - open)
upperWick = high - math.max(open, close)
lowerWick = math.min(open, close) - low
upperWickRatio = upperWick / candleRange
lowerWickRatio = lowerWick / candleRange
closePosition = (close - low) / candleRange
bullRejection = lowerWickRatio >= wickRatio and closePosition >= 0.60
bearRejection = upperWickRatio >= wickRatio and closePosition <= 0.40
plot(showEMA ? ema : na, "Trend EMA", color=color.orange, linewidth=2)
previousLow = ta.lowest(low[1], rangeLength)
previousHigh = ta.highest(high[1], rangeLength)
bullSweep = not na(previousLow) and low < previousLow and close > previousLow
bearSweep = not na(previousHigh) and high > previousHigh and close < previousHigh
plotshape(showSweep and bullSweep and barstate.isconfirmed, title="Bullish Liquidity Sweep", style=shape.triangleup, location=location.belowbar, color=color.aqua, size=size.tiny, text="SW")
plotshape(showSweep and bearSweep and barstate.isconfirmed, title="Bearish Liquidity Sweep", style=shape.triangledown, location=location.abovebar, color=color.orange, size=size.tiny, text="SW")
bullAbsorption = volumeSpike and bullRejection
bearAbsorption = volumeSpike and bearRejection
trendBull = not useTrendFilter or close > ema
trendBear = not useTrendFilter or close < ema
sweepBullValid = not useSweepFilter or bullSweep
sweepBearValid = not useSweepFilter or bearSweep
rawBuy = bullAbsorption and trendBull and sweepBullValid
rawSell = bearAbsorption and trendBear and sweepBearValid
var int lastSignalBar = na
cooldownPassed = na(lastSignalBar) or bar_index - lastSignalBar > cooldown
buySignal = rawBuy and cooldownPassed and barstate.isconfirmed
sellSignal = rawSell and cooldownPassed and barstate.isconfirmed
if buySignal or sellSignal
lastSignalBar := bar_index
var box bullZone = na
var box bearZone = na
if showZones and buySignal
if not na(bullZone)
box.delete(bullZone)
bullZone := box.new(left=bar_index, top=math.max(open, close), right=bar_index + zoneExtension, bottom=low, border_color=color.new(color.aqua, 15), bgcolor=color.new(color.aqua, 87), text="BUYER ABSORPTION", text_color=color.aqua, text_size=size.tiny)
if showZones and sellSignal
if not na(bearZone)
box.delete(bearZone)
bearZone := box.new(left=bar_index, top=high, right=bar_index + zoneExtension, bottom=math.min(open, close), border_color=color.new(color.red, 15), bgcolor=color.new(color.red, 87), text="SELLER ABSORPTION", text_color=color.red, text_size=size.tiny)
var table wm = table.new(position.bottom_right, 1, 1)
if barstate.isfirst
table.cell(wm, 0, 0, "Telegram @SimpleForexTools", text_color = color.new(color.gray, 70), text_size = size.large)
plotshape(showSignals and buySignal, title="BUY Absorption", style=shape.labelup, location=location.belowbar, color=color.rgb(0, 150, 120), text="BUY", textcolor=color.white, size=size.small)
plotshape(showSignals and sellSignal, title="SELL Absorption", style=shape.labeldown, location=location.abovebar, color=color.rgb(200, 55, 65), text="SELL", textcolor=color.white, size=size.small)
var table radar = table.new(position.top_right, 2, 7, border_width=1, frame_color=color.new(color.gray, 50))
var string lastEvent = "WAITING"
if buySignal
lastEvent := "BUYER ABSORPTION"
if sellSignal
lastEvent := "SELLER ABSORPTION"
volumeStatus = volumeSpike ? "HIGH VOLUME" : "NORMAL"
volumeColor = volumeSpike ? color.new(color.orange, 30) : color.new(color.gray, 65)
pressureStatus = bullAbsorption ? "BUY PRESSURE" : bearAbsorption ? "SELL PRESSURE" : "NEUTRAL"
pressureColor = bullAbsorption ? color.new(color.green, 40) : bearAbsorption ? color.new(color.red, 40) : color.new(color.gray, 65)
trendStatus = close > ema ? "BULLISH" : close < ema ? "BEARISH" : "NEUTRAL"
if barstate.islast and showDashboard
table.cell(radar, 0, 0, "@simpleforextools", bgcolor=color.rgb(20, 30, 48), text_color=color.white)
table.cell(radar, 1, 0, "PRO", bgcolor=color.rgb(20, 30, 48), text_color=color.aqua)
table.cell(radar, 0, 1, "Volume", bgcolor=color.new(color.gray, 80), text_color=color.white)
table.cell(radar, 1, 1, volumeStatus, bgcolor=vПоказано первые 50% кода (символов: 10061)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.