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

EQH/EQL Liquidity Zones [LuxAlgo]

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

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

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

О программе

Индикатор TradingView на Pine Script v6, предназначенный для визуального анализа графиков путём обнаружения зон равных максимумов (EQH) и равных минимумов (EQL) на основе точек разворота цены. Отображает эти зоны в виде цветных прямоугольников с опциональной линией посередине и подписями объёма. Индикатор отслеживает активные зоны в реальном времени, обновляет их при движении цены и реагирует на пробой (sweep) зоны. Пользователь может настраивать параметры обнаружения точек разворота, внешний вид зон, отображение объёма и поведение при пробое.

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

НастройкаОписание
leftLenInput Длина левого плеча пивота — Количество баров слева от текущей свечи, необходимое для подтверждения пивота максимума или минимума.
rightLenInput Длина правого плеча пивота — Количество баров справа от текущей свечи, необходимое для подтверждения пивота максимума или минимума.
thresholdPct Порог равенства (%) — Максимальный процентный разброс между двумя уровнями цены, при котором они считаются равными и объединяются в зону.
maxZones Максимум активных зон — Ограничение на количество одновременно отображаемых активных (непробитых) зон на графике.
bullColor Цвет бычьей зоны — Цвет заливки и обводки зоны, соответствующей уровню равного минимума (EQL).
bearColor Цвет медвежьей зоны — Цвет заливки и обводки зоны, соответствующей уровню равного максимума (EQH).
zoneTransp Прозрачность зоны — Степень прозрачности заливки прямоугольников зон (0 — непрозрачный, 100 — полностью прозрачный).
showMidline Показать среднюю линию — Включает или отключает отображение пунктирной линии посередине каждой зоны.
midlineColor Цвет средней линии — Цвет средней линии зоны, отображаемой при включённом параметре Show Midline.
showVolume Показать объём — Включает или отключает отображение объёма сделок, привязанного к уровням пивотов в зонах.
deleteOnSweep Удалять при пробое — Определяет, удалять ли зону с графика при пробое цены через её уровень, или оставить её в затемнённом виде с отметкой пробоя.
Получить полный код

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

indicator("EQH/EQL Liquidity Zones [LuxAlgo]", overlay = true, max_lines_count = 500, max_labels_count = 500, max_boxes_count = 500)

const string G1 = "Liquidity Detection"
const string G2 = "Visuals"
const color BULL_COLOR = #089981
const color BEAR_COLOR = #f23645

int leftLenInput    = input.int(10, "Pivot Left Length", minval = 1, group = G1, tooltip = "Number of bars to the left required for a pivot.")
int rightLenInput   = input.int(2, "Pivot Right Length", minval = 1, group = G1, tooltip = "Number of bars to the right required for a pivot.")
float thresholdPct  = input.float(0.03, "Equality Threshold (%)", minval = 0, step = 0.01, group = G1, tooltip = "Maximum percentage difference to consider two highs/lows 'equal'.")
int maxZones        = input.int(60, "Max Active Zones", minval = 1, maxval = 100, group = G1, tooltip = "Maximum number of active (unswept) liquidity lines to track. Increase for 1m charts.")

color bullColor     = input.color(BULL_COLOR, "Bullish Zone Color", group = G2)
color bearColor     = input.color(BEAR_COLOR, "Bearish Zone Color", group = G2)
int zoneTransp      = input.int(85, "Zone Transparency", minval = 0, maxval = 100, group = G2)
bool showMidline    = input.bool(false, "Show Midline", group = G2)
color midlineColor  = input.color(#787b86, "Midline Color", group = G2)
bool showVolume     = input.bool(true, "Show Volume", group = G2)
bool deleteOnSweep  = input.bool(false, "Delete on Sweep", group = G2)

type LiquidityZone
    box   id
    line  midline
    label lbl
    label b1     
    label b2     
    label v1     
    label v2     
    float sweepLevel
    float totalVol 
    int   createdIdx 
    bool  isHigh
    bool  isSwept

type PivotPoint
    float price
    int   idx
    float vol

var activeZones     = array.new<LiquidityZone>()
var historicalHighs = array.new<PivotPoint>()
var historicalLows  = array.new<PivotPoint>()

f_formatVol(float v) =>
    string res = ""
    if v >= 1000000
        res := str.format("{0,number,#.#}M", v / 1000000)
    else if v >= 1000
        res := str.format("{0,number,#.#}K", v / 1000)
    else
        res := str.tostring(v, "#")
    res

method update(LiquidityZone zone, bool deleteOnSweep) =>
    bool shouldRemove = false
    if not zone.isSwept

        box.set_right(zone.id, bar_index)
        if not na(zone.midline)
            line.set_x2(zone.midline, bar_index)
        label.set_x(zone.lbl, bar_index)

        if bar_index > zone.createdIdx
            bool sweepOccurred = zone.isHigh ? high > zone.sweepLevel : low < zone.sweepLevel

            if sweepOccurred
                zone.isSwept := true
                shouldRemove := true
                if deleteOnSweep
                    box.delete(zone.id)
                    line.delete(zone.midline)
                    label.delete(zone.lbl)
                    label.delete(zone.b1)
                    label.delete(zone.b2)
                    label.delete(zone.v1)
                    label.delete(zone.v2)
                else
                    box.set_bgcolor(zone.id, color.new(chart.fg_color, 95))
                    box.set_border_color(zone.id, color.new(chart.fg_color, 80))
                    if not na(zone.midline)
                        line.set_color(zone.midline, color.new(chart.fg_color, 80))

                    label.set_textcolor(zone.lbl, color.new(chart.fg_color, 75))
                    string volStr = showVolume ? str.format(" ({0})", f_formatVol(zone.totalVol)) : ""
                    label.set_text(zone.lbl, "Swept " + (zone.isHigh ? "EQH" : "EQL") + volStr)

                    label.set_color(zone.b1, color.new(chart.fg_color, 85))
                    label.set_color(zone.b2, color.new(chart.fg_color, 85))
                    label.set_text(zone.v1, "")
                    label.set_text(zone.v2, "")

    shouldRemove

f_consolidateLabels(array<LiquidityZone> zones) =>
    int sz = zones.size()
    if sz > 0
        for i = 0 to sz - 1
            LiquidityZone z = zones.get(i)
            if not z.isSwept
                label.set_text(z.lbl, "")

        array<int> processed = array.new<int>()
        for i = 0 to sz - 1
            if processed.includes(i) or zones.get(i).isSwept
                continue

            LiquidityZone base = zones.get(i)
            processed.push(i)
            float clusterVol = base.totalVol
            int clusterCount = 1

            if i < sz - 1
                for j = i + 1 to sz - 1
                    if processed.includes(j)
                        continue

                    LiquidityZone comp = zones.get(j)
                    if comp.isSwept
                        continue

                    if base.isHigh == comp.isHigh and math.abs(base.sweepLevel - comp.sweepLevel) / base.sweepLevel * 100 <= thresholdPct * 3
                        clusterVol += comp.totalVol
                        clusterC

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

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

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

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

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

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

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