Adaptive Liquidity Reclaim Map [PhenLabs]
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator adaptive liquidity reclaim map for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «Adaptive Liquidity Reclaim Map» анализирует график в TradingView, выявляя зоны ликвидности на основе ключевых опорных точек цены (пифов). Он отображает эти зоны в виде графических блоков и линий, помогая визуально отслеживать области, где цена ранее разворачивалась. Индикатор использует адаптивную оценку качества сигналов, основанную на волатильности (ATR) и согласованности с более высоким таймфреймом (EMA-смещение), чтобы оценивать силу потенциального возврата к ликвидности. Результаты представлены через маркеры сигналов, блоки риск/прибыли с проекцией и информационную панель с текущими параметрами рынка. Все расчёты выполняются средствами Pine Script v6 на данных текущего и выбранного старшего таймфрейма.
Настройки программы
| Настройка | Описание |
|---|---|
| leftBars | Количество баров слева от точки, необходимых для подтверждения пивота (опорного экстремума). |
| rightBars | Количество баров справа от точки, необходимых для подтверждения пивота (опорного экстремума). |
| atrLen | Период расчёта ATR (среднего истинного диапазона), используемый как базовая мера волатильности для нормализации параметров индикатора. |
| volLookback | Период усреднения ATR для формирования базовой линии волатильности, используемой при адаптивной оценке импульса. |
| baseImpulse | Минимальное относительное тело свечи в долях ATR, служащее порогом для адаптивной оценки силы импульса. |
| zoneWidthAtr | Ширина зоны ликвидности в долях ATR, определяющая размер графического блока вокруг опорного уровня. |
| useHtfGate | Включает или отключает обязательное совпадение сигнала с направлением старшего таймфрейма перед его отображением. |
| htfTimeframe | Выбранный старший таймфрейм, данные которого используются для фильтрации и подтверждения сигналов. |
| htfEmaLen | Период EMA (экспоненциальной скользящей средней), рассчитываемой на старшем таймфрейме для определения направления рыночного контекста. |
| rrPrimary | Первое целевое соотношение риск/прибыль (в R), рассчитываемое от точки входа до экстремума свечи. |
| rrRunner | Второе (дополнительное) целевое соотношение риск/прибыль (в R), рассчитываемое от точки входа до экстремума свечи. |
| projectionBars | Количество баров вправо от сигнальной свечи, на котором отрисовываются блоки риска и прибыли. |
| showLiquidityZones | Включает или отключает отображение графических блоков зон ликвидности на графике. |
| showZoneCenter | Включает или отключает отображение пунктирных линий центра зон ликвидности. |
| showSignals | Включает или отключает графические маркеры (ромбы) на графике, обозначающие сигналы reclaim. |
| showCallouts | Включает или отключает текстовые выноски с оценкой качества текущего сигнала. |
| showPayoffMap | Включает или отключает отображение блоков риска и прибыли с проекцией целей. |
| showSignalTint | Включает или отключает цветовую подсветку свечи при появлении сигнала. |
| bullColor | Цвет, используемый для обозначения бычьих (ростовых) элементов на графике. |
| bearColor | Цвет, используемый для обозначения медвежьих (нисходящих) элементов на графике. |
| primaryColor | Цвет линий и отметок первичных целей по соотношению риск/прибыль. |
| neutralColor | Цвет нейтральных текстовых и графических элементов индикатора. |
| charcoalColor | Цвет фона информационной панели и дашборда индикатора. |
Поиск по коду файла
indicator("Adaptive Liquidity Reclaim Map [PhenLabs]", shorttitle="ALRM", overlay=true, max_lines_count=30, max_boxes_count=10, max_labels_count=6)
string grpDetection = "1. Liquidity Detection"
leftBars = input.int(4, "Pivot Left Bars", minval=2, maxval=20, group=grpDetection, tooltip="Bars required to the left of a confirmed liquidity pivot.")
rightBars = input.int(4, "Pivot Right Bars", minval=2, maxval=20, group=grpDetection, tooltip="Bars required to the right of a confirmed liquidity pivot. Higher values are more selective.")
atrLen = input.int(14, "ATR Length", minval=5, maxval=100, group=grpDetection, tooltip="Volatility baseline used to normalize reclaim strength and size liquidity zones.")
volLookback = input.int(50, "Volatility Lookback", minval=10, maxval=200, group=grpDetection, tooltip="Lookback used to adapt the impulse threshold to the current volatility regime.")
baseImpulse = input.float(0.35, "Base Impulse (ATR)", minval=0.10, maxval=2.00, step=0.05, group=grpDetection, tooltip="Minimum candle body as a fraction of ATR before adaptive scaling.")
zoneWidthAtr = input.float(0.10, "Liquidity Zone Width (ATR)", minval=0.02, maxval=1.00, step=0.01, group=grpDetection, tooltip="Half-width of each active liquidity zone as a fraction of ATR. 0.10 keeps zones slim on a screenshot.")
string grpContext = "2. Higher-Timeframe Context"
useHtfGate = input.bool(true, "Require HTF Alignment", group=grpContext, tooltip="Signals only fire when the reclaim agrees with the selected higher-timeframe EMA bias.")
htfTimeframe = input.timeframe("240", "Higher Timeframe", group=grpContext, tooltip="Context timeframe. Select one above the chart timeframe for a meaningful bias filter.")
htfEmaLen = input.int(50, "HTF EMA Length", minval=10, maxval=300, group=grpContext, tooltip="EMA length used inside the higher-timeframe bias calculation.")
string grpTargets = "3. Payoff Map"
rrPrimary = input.float(1.0, "Primary Target (R)", minval=0.50, maxval=5.00, step=0.25, group=grpTargets, tooltip="First objective measured from entry to the sweep-bar extreme.")
rrRunner = input.float(2.0, "Runner Target (R)", minval=0.75, maxval=8.00, step=0.25, group=grpTargets, tooltip="Second objective measured from entry to the sweep-bar extreme.")
projectionBars = input.int(30, "Projection Length", minval=5, maxval=200, group=grpTargets, tooltip="Number of bars used to draw the current risk/reward block.")
string grpVisuals = "4. Screenshot Visuals"
showLiquidityZones = input.bool(true, "Show Active Liquidity Zones", group=grpVisuals)
showZoneCenter = input.bool(true, "Show Zone Center Line", group=grpVisuals)
showSignals = input.bool(true, "Show Signal Markers", group=grpVisuals)
showCallouts = input.bool(true, "Show Score Callouts", group=grpVisuals)
showPayoffMap = input.bool(true, "Show Risk/Reward Blocks", group=grpVisuals)
showSignalTint = input.bool(true, "Tint Signal Candle", group=grpVisuals)
bullColor = input.color(color.rgb(0, 245, 160), "Bullish Emerald", group=grpVisuals)
bearColor = input.color(color.rgb(255, 45, 149), "Bearish Magenta", group=grpVisuals)
primaryColor = input.color(color.rgb(255, 190, 65), "Primary Target Amber", group=grpVisuals)
neutralColor = input.color(color.rgb(156, 163, 175), "Neutral Text", group=grpVisuals)
charcoalColor = input.color(color.rgb(19, 20, 27), "Charcoal Background", group=grpVisuals)
float atrValue = ta.atr(atrLen)
float atrBaseline = ta.sma(atrValue, volLookback)
float volatilityRatio = not na(atrValue) and not na(atrBaseline) and atrBaseline > 0 ? atrValue / atrBaseline : 1.0
float adaptiveImpulse = baseImpulse * math.max(0.65, math.min(1.50, volatilityRatio))
float bodyAtr = not na(atrValue) and atrValue > 0 ? math.abs(close - open) / atrValue : na
float zoneHalfWidth = not na(atrValue) and atrValue > 0 ? atrValue * zoneWidthAtr : na
float candleHeight = high - low
float bullCloseLocation = candleHeight > 0 ? (close - low) / candleHeight : 0.50
float bearCloseLocation = candleHeight > 0 ? (high - close) / candleHeight : 0.50
float impulseQuality = not na(bodyAtr) and adaptiveImpulse > 0 ? math.min(1.0, bodyAtr / (adaptiveImpulse * 1.50)) : 0.0
float volatilityQuality = math.max(0.0, 1.0 - math.min(1.0, math.abs(volatilityRatio - 1.0) / 0.75))
float pivotHigh = ta.pivothigh(high, leftBars, rightBars)
float pivotLow = ta.pivotlow(low, leftBars, rightBars)
var float lastSwingHigh = na
var float lastSwingLow = na
var bool bullUsed = false
var bool bearUsed = false
var box buySideZone = na
var box sellSideZone = na
var line buySideCenter = na
var line sellSideCenter = na
if not na(pivotHigh)
lastSwingHigh := pivotHigh
bearUsed := false
if not na(buySideZone)
box.delete(buySideZone)
if not na(buySideCenter)
line.delete(buySideCenter)
if showLiquidityZones and not na(zoneHalfWidth)
buySideZone := box.new(left=bar_index - rightBars, top=lastSwingHigh + zoneHalfWidth, right=bar_index, bottom=lastSwingHigh - zoneHalfWidth, xloc=xloc.bar_index, extend=extend.right, border_color=color.new(bearColor, 15), border_width=1, bgcolor=color.new(bearColor, 88))
if showZoneCenter
buySideCenter := line.new(x1=bar_index - rightBars, y1=lastSwingHigh, x2=bar_index, y2=lastSwingHigh, xloc=xloc.bar_index, extend=extend.right, color=color.new(bearColor, 30), style=line.style_dashed, width=1)
if not na(pivotLow)
lastSwingLow := pivotLow
bullUsed := false
if not na(sellSideZone)
box.delete(sellSideZone)
if not na(sellSideCenter)
line.delete(sellSideCenter)
if showLiquidityZones and not na(zoneHalfWidth)
sellSideZone := box.new(left=bar_index - rightBars, top=lastSwingLow + zoneHalfWidth, right=bar_index, bottom=lastSwingLow - zoneHalfWidth, xloc=xloc.bar_index, extend=extend.right, border_color=color.new(bullColor, 15), border_width=1, bgcolor=color.new(bullColor, 88))
if showZoneCenter
sellSideCenter := line.new(x1=bar_index - rightBars, y1=lastSwingLow, x2=bar_index, y2=lastSwingLow, xloc=xloc.bar_index, extend=extend.right, color=color.new(bullColor, 30), style=line.style_dashed, width=1)
bool htfBull = request.security(syminfo.tickerid, htfTimeframe, close > ta.ema(close, htfEmaLen), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
bool htfBear = request.security(syminfo.tickerid, htfTimeframe, close < ta.ema(close, htfEmaLen), gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
bool bullContext = not useHtfGate or htfBull
bool bearContext = not useHtfGate or htfBear
float bullHtfQuality = htfBull ? 1.0 : useHtfGate ? 0.0 : 0.50
float bearHtfQuality = htfBear ? 1.0 : useHtfGate ? 0.0 : 0.50
bool bullSweep = not na(lastSwingLow) and low < lastSwingLow and close > lastSwingLow
bool bearSweep = not na(lastSwingHigh) and high > lastSwingHigh and close < lastSwingHigh
bool bullImpulse = not na(bodyAtr) and close > open and bodyAtr >= adaptiveImpulse
bool bearImpulse = not na(bodyAtr) and close < open and bodyAtr >= adaptiveImpulse
float bullRisk = close - low
float bearRisk = high - close
float bullScore = math.max(0.0, math.min(100.0, impulseQuality * 35.0 + bullCloseLocation * 30.0 + bullHtfQuality * 20.0 + volatilityQuality * 15.0))
float bearScore = math.max(0.0, math.min(100.0, impulseQuality * 35.0 + bearCloseLocation * 30.0 + bearHtfQuality * 20.0 + volatilityQuality * 15.0))
bool bullSignal = bullSweep and bullImpulse and bullContext and not bullUsed and bullRisk > syminfo.mintick
bool bearSignal = bearSweep and bearImpulse and bearContext and not bearUsed and bearRisk > syminfo.mintick
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)
var label bullCallout = na
var label bearCallout = na
var box riskBlock = na
var box rewardBlock = na
var line entryLine = na
var line primaryTargetLine = na
var line runnerTargetLine = na
var string lastSignalText = "WAITING"
var float lastSignalScore = na
var color lastSignalColor = neutralColor
if bullSignal
bullUsed := true
Показано первые 50% кода (символов: 14114)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.