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

Liquidity Trend Heatmap [BigBeluga]

indicator_liquidity_trend_heatmap_bigbeluga_for_tradingview.pine
Вы автор или правообладатель?

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

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

О программе

Индикатор «Liquidity Trend Heatmap [BigBeluga]» отображает на графике тепловую карту ликвидности из 25 ценовых уровней, рассчитанных на основе распределения объёма за заданный период откатов. Каждый уровень окрашивается в зависимости от объёма и направления тренда: бычьи зоны — одним цветом, медвежьих — другим, а уровень с наибольшим объёмом (POC) выделяется отдельным цветом. Тренд определяется с помощью скользящей средней на основе EMA от SMA, а границы коридора рассчитываются с использованием ATR. Индикатор рисует графические отметки на уровне цен, формирует информационную панель с данными о тренде и POC, а также поддерживает настройку размера дашборда и формы маркеров.

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

НастройкаОписание
showTrend Включает или отключает отображение трендовой линии на графике.
length Количество баров, используемых для расчёта скользящей средней тренда.
lookback Количество исторических баров, анализируемых для определения ценового диапазона и распределения объёма.
shapeType Визуальная форма маркеров узлов ликвидности на графике (квадрат, круг, ромб, крест или X).
minVolPercent Минимальный процент объёма относительно POC, необходимый для отображения узла ликвидности. Более высокие значения показывают только наиболее значимые зоны.
colorUp Цвет, применяемый к бычьим зонам тепловой карты ликвидности, когда цена находится выше трендовой линии.
colorDn Цвет, применяемый к медвежьим зонам тепловой карты ликвидности, когда цена находится ниже трендовой линии.
showPOC Включает или отключает отображение уровня точки контроля (POC) на графике.
pocColor Цвет, используемый для выделения уровня точки контроля (POC) — ценового уровня с наибольшим накопленным объёмом.
table_size Размер информационной панели с данными о тренде и POC (очень маленький, маленький, нормальный или большой).
Получить полный код

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

indicator("Liquidity Trend Heatmap [BigBeluga]", "LT Heatmap [BigBeluga]", overlay=true, calc_bars_count = 3000, max_labels_count = 500)

grp_main = "Liquidity Trend Settings"
showTrend = input.bool(true, "Show Trend Line", group=grp_main)
length   = input.int(50, "Trend Length", tooltip="Number of bars used for the moving average trend calculation.", group=grp_main)
lookback = input.int(500, "Lookback Period", tooltip="The number of historical bars analyzed to determine the price range and volume distribution.", group=grp_main)

grp_colors = "Colors & Visuals"
shapeType = input.string("Square", "Shape Type", options=["Square", "Circle", "Diamond", "Cross", "X"], tooltip="Select the visual shape for the heatmap liquidity nodes.", group=grp_colors)
minVolPercent = input.int(50, "Heatmap Threshold %", tooltip="The minimum volume percentage (0-100) relative to the POC required to display a liquidity node. Higher values show only the most significant zones.", group=grp_colors)/100

colorUp  = input.color(color.rgb(40, 211, 168), "Bullish Zone Color", inline="", tooltip="Color applied to liquidity nodes when the trend is bullish.", group=grp_colors)
colorDn  = input.color(color.rgb(255, 82, 82), "Bearish Zone Color", inline="", tooltip="Color applied to liquidity nodes when the trend is bearish.", group=grp_colors)

showPOC  = input.bool(true, "Show POC", inline="poc_group", tooltip="Highlight the Point of Control (the price level with the highest accumulated volume).", group=grp_colors)
pocColor = input.color(color.orange, "", inline="poc_group", tooltip="The color used to highlight the Point of Control (POC) level.", group=grp_colors)
grp_dash = "Dashboard Settings"
table_size = input.string("Normal", "Dashboard Size", options=["Tiny", "Small", "Normal", "Large"], group=grp_dash)

get_table_size() =>
    switch table_size
        "Tiny"   => size.tiny
        "Small"  => size.small
        "Large"  => size.large
        => size.normal

get_shape() =>
    switch shapeType
        "Square"  => shape.square
        "Diamond" => shape.diamond
        "Cross"   => shape.cross
        "X"       => shape.xcross
        => shape.circle

get_shape1() =>
    switch shapeType
        "Square"  => "■"
        "Diamond" => "◆"
        "Cross"   => "+"
        "X"       => "X"
        => "●"

float middle = ta.ema(ta.sma(close, length), length)
atr = ta.atr(100)
upper = ta.highest(high+atr, lookback)
lower = ta.lowest(low-atr, lookback)
rangeWidth = math.max(upper - lower, 0.00001)
step       = rangeWidth / 26

Tcol = close > middle+atr ? colorUp : close < middle-atr ? colorDn : color.new(color.black, 100)
Tcol1 = close > middle+atr ? color.new(colorUp, 50) : close < middle-atr ? color.new(colorDn, 50) : color.new(color.black, 50)

float[] volArray = array.new_float(26, 0.0)

get_vol_at_level(idx) =>
    level = lower + (step * idx)
    tolerance = step /2
    float count = 0.0
    for j = 0 to lookback
        if math.abs(hl2[j] - level) <= tolerance
            count += volume[j]
    count

for i = 0 to 25
    array.set(volArray, i, get_vol_at_level(i))

pocIndex = array.indexof(volArray, array.max(volArray))

get_intensity(idx) =>

    float count = array.get(volArray, idx)

    float maxVol = array.max(volArray)

    float rawTrans = (count / maxVol) 

    isPOC = (idx == pocIndex) and showPOC

    col = isPOC ? pocColor : color.from_gradient(rawTrans, minVolPercent, 1.2, na, close > (lower + step * idx) ? colorUp : colorDn)
    col

if barstate.islast

    var labels = array.new<label>()

    for l in labels
        l.delete()

    for i = 0 to 25

        dist = int(array.get(volArray, i)/ volArray.max() * 20)
        level = lower + (step * i)
        isPOC = (i == pocIndex) and showPOC

        col = isPOC ? pocColor : color.from_gradient(array.get(volArray, i)/ volArray.max(), minVolPercent, 1, na, close > level ? colorUp : colorDn)

        for k = 0 to dist
            labels.push(label.new(bar_index+k+1, level, get_shape1(), style = label.style_label_center, color = color(na), textcolor = col))

is_active(idx) =>
    level = lower + (step * idx)
    tolerance = step * 2
    allow = (math.abs(hl2 - level) <= tolerance 
         or (showTrend ? math.abs(middle - level) <= tolerance/2 : false)
         or math.abs(close - level) <= tolerance
         or math.abs(hlc3 - level) <= tolerance
         or math.abs(high - level) <= tolerance
         or math.abs(low - level) <= tolerance
         or math.abs(open - level) <= tolerance)

    [not allow, level]

[a1, l1] = is_active(1)
[a2, l2] = is_active(2)
[a3, l3] = is_active(3)
[a4, l4] = is_active(4)
[a5, l5] = is_active(5)
[a6, l6] = is_active(6)
[a7, l7] = is_active(7)
[a8, l8] = is_active(8)
[a9, l9] = is_active(9)
[a10, l10] = is_active(10)
[a11, l11] = is_active(11)
[a12, l12] = is_active(12)
[a13, l13] = is_active(13)
[a14, l14] = is_active(14)
[a15, l15] = is_active(15)
[a16, l16] = is_active(16)
[a17, l17] = is_active(17)
[a18, l18] = is_active(18)
[a19, l19

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

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

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

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

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

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

Стоимость полного кода
838,90₽ ≈ $10.25