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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.