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

ICT Suite [LuxAlgo]

indicator ict suite [luxalgo] for tradingview.pine
Вы автор или правообладатель?

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

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

О программе

Индикатор «ICT Suite [LuxAlgo]» — многофункциональный инструмент анализа для TradingView, написанный на Pine Script v6. Он работает поверх графика и объединяет несколько модулей визуализации: обнаружение всплесков объёма, ликвидностные зоны (EQH/EQL), проецируемые свечи более высокого таймфрейма, справедливые ценовые разрывы (FVG) и анализ рыночной структуры (BOS/CHoCH).

Модуль всплесков отслеживает отклонение объёма от его 50-периодного среднего и отображает пузыри разного размера в зависимости от степени экстремальности. Ликвидностные зоны строятся на основе пивотов и выявляют равные максимумы и минимумы, отслеживая их пробой. Проецируемые свечи более высокого таймфрейма позволяют визуализировать будущие свечные паттерны на графике.

Модуль справедливых ценовых разрывов определяет зазоры между свечами с учётом фильтра волатильности на основе ATR. Анализ рыночной структуры фиксирует пробои пивотов и маркирует их как Break of Structure или Change of Character в зависимости от направления тренда. Все модули настраиваются по цвету, чувствительности и видимости, а также поддерживают условия для оповещений TradingView.

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

НастройкаОписание
showBubbles Включает или отключает отображение пузырей всплесков объёма на графике.
spikeThresh Пороговое значение стандартных отклонений от среднего объёма, при превышении которого свеча считается всплеском.
colBullSpike Цвет пузырей всплесков на бычьих свечах (закрытие выше открытия), отображаемых под свечой.
colBearSpike Цвет пузырей всплесков на медвежьих свечах (закрытие ниже открытия), отображаемых над свечой.
showLiqZones Включает или отключает отображение ликвидностных зон (EQH/EQL) на графике.
liqLeftLen Количество баров слева, необходимых для подтверждения пивота высокого или низкого при построении ликвидностных зон.
liqRightLen Количество баров справа, необходимых для подтверждения пивота высокого или низкого при построении ликвидностных зон.
liqThreshPct Максимальное процентное различие для признания двух максимумов или минимумов равными (EQH/EQL).
liqMaxZones Максимальное количество одновременно отображаемых активных ликвидностных зон на графике.
liqBullColor Цвет бычьих ликвидностных зон (EQL), связанных с равными минимумами.
liqBearColor Цвет медвежьих ликвидностных зон (EQH), связанных с равными максимумами.
liqTransp Прозрачность заливки ликвидностных зон. 85 означает высокую прозрачность.
liqMidline Включает или отключает отображение средней линии внутри ликвидностных зон (EQH/EQL).
liqMidCol Цвет средней линии внутри ликвидностной зоны, отображаемой при активации параметра Show Midline.
liqShowVol Включает или отключает отображение объёма на метках ликвидностных зон.
liqDeleteOnSweep При активации зоны ликвидности полностью удаляются при пробое. При неактивации пробитые зоны становятся серыми.
showHtf Включает или отключает отображение проецируемых свечей более высокого таймфрейма.
htfInput Таймфрейм более высокого периода, свечи которого проецируются вправо от текущего графика.
htfCount Количество проецируемых свечей более высокого таймфрейма, отображаемых вправо от текущей цены.
htfOffset Расстояние в барах от текущей свечи до первой проецируемой свечи более высокого таймфрейма.
htfHistOpacity Непрозрачность исторических свечей более высокого таймфрейма. 100 означает полностью непрозрачные.
openLineCss Цвет горизонтальной линии открытия свечи более высокого таймфрейма.
showHtfLines Включает или отключает отображение горизонтальных линий открытия для проецируемых свечей более высокого таймфрейма.
showFvg Включает или отключает отображение справедливых ценовых разрывов (FVG) на графике.
fvgSens Минимальный размер справедливого ценового разрыва относительно ATR. Более высокое значение показывает только более крупные разрывы.
fvgExtend Количество баров вправо, на которые растягиваются графические элементы справедливого ценового разрыва (коробки и линии).
bullFvgCss Цвет бычьего справедливого ценового разрыва (FVG), отображаемого при формировании бычьего паттерна, когда минимум выше максимума двух баров назад.
bearFvgCss Цвет медвежьего справедливого ценового разрыва (FVG), отображаемый при формировании медвежьего паттерна, когда максимум ниже минимума двух баров назад.
showMs Включает или отключает отображение рыночной структуры (BOS/CHoCH) на графике.
msSens Количество баров с каждой стороны, необходимых для подтверждения структурного пивота при анализе рыночной структуры.
bullMsCss Цвет маркировки бычьей рыночной структуры, используемый для меток BOS и CHoCH при восходящем тренде.
bearMsCss Цвет маркировки медвежьей рыночной структуры, используемый для меток BOS и CHoCH при нисходящем тренде.
Получить полный код

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

indicator("ICT Suite [LuxAlgo]", shorttitle="Lux_ICT", overlay=true,
     max_lines_count=500, max_labels_count=500, max_boxes_count=500, max_bars_back=5000)

grp10 = "── Spikes ──"
showBubbles   = input.bool(true,  "Show Spike Bubbles",       group=grp10)
spikeThresh   = input.float(3.0,  "Spike Threshold (Std Dev)", group=grp10)
colBullSpike  = input.color(#089981, "Bull Spike Color", group=grp10)
colBearSpike  = input.color(#f23645, "Bear Spike Color", group=grp10)

grp11 = "── Liquidity Zones (EQH/EQL) ──"
showLiqZones  = input.bool(true,  "Show Liquidity Zones",        group=grp11)
liqLeftLen    = input.int(10,     "Pivot Left Length",  minval=1, group=grp11,
     tooltip="Bars to the left required to confirm a pivot high/low.")
liqRightLen   = input.int(2,      "Pivot Right Length", minval=1, group=grp11,
     tooltip="Bars to the right required to confirm a pivot high/low.")
liqThreshPct  = input.float(0.03, "Equality Threshold (%)", minval=0, step=0.01, group=grp11,
     tooltip="Max % difference to consider two highs/lows equal (EQH/EQL).")
liqMaxZones   = input.int(60,     "Max Active Zones", minval=1, maxval=100, group=grp11)
liqBullColor  = input.color(#089981, "Bullish Zone Color",  group=grp11)
liqBearColor  = input.color(#f23645, "Bearish Zone Color",  group=grp11)
liqTransp     = input.int(85,     "Zone Transparency", minval=0, maxval=100, group=grp11)
liqMidline    = input.bool(false,  "Show Midline",            group=grp11)
liqMidCol     = input.color(#787b86, "Midline Color",         group=grp11)
liqShowVol    = input.bool(true,   "Show Volume on Zones",    group=grp11)
liqDeleteOnSweep = input.bool(false, "Delete Zone on Sweep",  group=grp11,
     tooltip="When off, swept zones turn grey. When on, they are removed entirely.")

grp12 = "── HTF Projected Candles ──"
showHtf       = input.bool(true,   "Show HTF Projected Candles",  group=grp12)
htfInput      = input.timeframe("D", "HTF Timeframe",             group=grp12,
     tooltip="The higher timeframe whose candles are projected to the right of current price.")
htfCount      = input.int(1,  "Number of Candles", minval=1, maxval=5,  group=grp12)
htfOffset     = input.int(5,  "Projection Offset", minval=1, maxval=50, group=grp12,
     tooltip="Distance (in bars) of the first projected candle from the current bar.")
htfHistOpacity = input.int(40, "Historical Candle Opacity", minval=0, maxval=100, group=grp12,
     tooltip="Opacity of prior HTF candles. 100 = fully solid.")
openLineCss   = input.color(#5b9cf6, "Open Price Line Color",     group=grp12)
showHtfLines  = input.bool(true,   "Show Open Price Line",        group=grp12)

grp13 = "── Fair Value Gaps ──"
showFvg       = input.bool(true,  "Show FVGs",                   group=grp13)
fvgSens       = input.float(0.5,  "Volatility Sensitivity", minval=0, step=0.1, group=grp13,
     tooltip="Minimum FVG size relative to ATR. Higher = only show larger gaps.")
fvgExtend     = input.int(5,      "Extend Bars", minval=1, maxval=20,  group=grp13)
bullFvgCss    = input.color(color.new(#089981, 70), "Bullish FVG Color", group=grp13)
bearFvgCss    = input.color(color.new(#f23645, 70), "Bearish FVG Color", group=grp13)

grp14 = "── Market Structure (BOS / CHoCH) ──"
showMs        = input.bool(true,  "Show Market Structure",        group=grp14)
msSens        = input.int(5,      "Pivot Sensitivity", minval=1,  group=grp14,
     tooltip="Number of bars on each side required to confirm a structural pivot.")
bullMsCss     = input.color(#089981, "Bullish Structure Color",   group=grp14)
bearMsCss     = input.color(#f23645, "Bearish Structure Color",   group=grp14)

max_bars_back(time,  5000)
max_bars_back(open,  5000)
max_bars_back(high,  5000)
max_bars_back(low,   5000)
max_bars_back(close, 5000)

var array<float> htfOpenArr  = array.new_float()
var array<float> htfHighArr  = array.new_float()
var array<float> htfLowArr   = array.new_float()
var array<float> htfCloseArr = array.new_float()
var array<int>   htfStartArr = array.new_int()

var float htfCurO      = na
var float htfCurH      = na
var float htfCurL      = na
var float htfSessClose = na
var int   htfCurStart  = na

bool newDay = ta.change(dayofmonth) != 0

avgVol   = ta.sma(volume, 50)
stdVol   = ta.stdev(volume, 50)

volSigma = stdVol > 0 ? (volume - avgVol) / stdVol : 0.0
isSpike  = showBubbles and volSigma >= spikeThresh

spikeSize = size.tiny
if volSigma >= 12
    spikeSize := size.huge
else if volSigma >= 9
    spikeSize := size.large
else if volSigma >= 6
    spikeSize := size.normal
else if volSigma >= 4
    spikeSize := size.small

plotshape(isSpike and close > open  and volSigma <  4, "Bull Spike S1", shape.circle, location.belowbar, colBullSpike, size=size.tiny)
plotshape(isSpike and close <= open and volSigma <  4, "Bear Spike S1", shape.circle, location.abovebar, colBearSpike, size=size.tiny)
plotshape(isSpike and close > open  and volSigma >= 4  and volSigma < 6,  "Bull Spike S2", shape.circle, location.belowbar, colBullSpike, size=size.small)
plotshape(isSpike and close <= open and volSigma >= 4  and volSigma < 6,  "Bear Spike S2", shape.circle, location.abovebar, colBearSpike, size=size.small)
plotshape(isSpike and close > open  and volSigma >= 6  and volSigma < 9,  "Bull Spike S3", shape.circle, location.belowbar, colBullSpike, size=size.normal)
plotshape(isSpike and close <= open and volSigma >= 6  and volSigma < 9,  "Bear Spike S3", shape.circle, location.abovebar, colBearSpike, size=size.normal)
plotshape(isSpike and close > open  and volSigma >= 9  and volSigma < 12, "Bull Spike S4", shape.circle, location.belowbar, colBullSpike, size=size.large)
plotshape(isSpike and close <= open and volSigma >= 9  and volSigma < 12, "Bear Spike S4", shape.circle, location.abovebar, colBearSpike, size=size.large)
plotshape(isSpike and close > open  and volSigma >= 12, "Bull Spike S5", shape.circle, location.belowbar, colBullSpike, size=size.huge)
plotshape(isSpike and close <= open and volSigma >= 12, "Bear Spike S5", shape.circle, location.abovebar, colBearSpike, size=size.huge)

type LiquidityZone
    box   zbox
    line  zmid
    label zlbl
    label zb1
    label zb2
    label zv1
    label zv2
    float sweepLevel
    float totalVol
    int   createdIdx
    bool  isHigh
    bool  isSwept

type PivotPoint
    float price
    int   idx
    float vol

var array<LiquidityZone> liqZones    = array.new<LiquidityZone>()
var array<PivotPoint>    liqPivotHi  = array.new<PivotPoint>()
var array<PivotPoint>    liqPivotLo  = array.new<PivotPoint>()

liq_fmtVol(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

liq_updateZone(LiquidityZone z) =>
    bool remove = false
    if not z.isSwept
        box.set_right(z.zbox, bar_index)
        if not na(z.zmid)
            line.set_x2(z.zmid, bar_index)
        label.set_x(z.zlbl, bar_index)

        if bar_index > z.createdIdx
            bool swept = z.isHigh ? high > z.sweepLevel : low < z.sweepLevel
            if swept
                z.isSwept := true
                remove    := true
                if liqDeleteOnSweep
                    box.delete(z.zbox)
                    line.delete(z.zmid)
                    label.delete(z.zlbl)
                    label.delete(z.zb1)
                    label.delete(z.zb2)
                    label.delete(z.zv1)
                    label.delete(z.zv2)
                else
                    box.set_bgcolor(z.zbox,      color.new(chart.fg_color, 95))
                    box.set_border_color(z.zbox, color.new(chart.fg_color, 80))
                    if not na(z.zmid)
                        line.set_color(z.zmid, color.new(chart.fg_color, 80))
                    label.set_textcolor(z.zlbl, color.new(chart.fg_color, 75))
                    string vs = liqShowVol ? str.format(" ({0})", liq_fmtVol(z.totalVol)) : ""
                    label.set_text(z.zlbl, "Swept " + (z.isHigh ? "EQH" : "EQL") + vs)
                    label.set_color(z.zb1, color.new(chart.fg_color, 85))
                    label.set_color(z.zb2, color.new(chart.fg_color, 85))
                    label.set_text(z.zv1, "")
                    label.set_text(z.zv2, "")
    remove
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)

liq_consolidate(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.zlbl, "")

        array<int> done = array.new<int>()
        for i = 0 to sz - 1
            if done.includes(i) or zones.get(i).isSwept
                continue
            LiquidityZone base = zones.get(i)
            done.push(i)
            float cVol  = base.totalVol
            int   cCnt  = 1
            if i < sz - 1
                for j = i + 1 to sz - 1
                    if done.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 <= liqThreshPct * 3
                        cVol += comp.totalVol
                        cCnt += 1
                        done.push(j)
            string typeStr  = base.isHigh ? "EQH" : "EQL"
            string countStr = cCnt > 1 ? str.format("{0}x ", cCnt) : ""
            string volStr   = liqShowVol ? str.format(" ({0})", liq_fmtVol(cVol)) : ""
            label.set_text(base.zlbl, countStr + typeStr + volStr)

float liqPH = showLiqZones ? ta.pivothigh(liqLeftLen, liqRightLen) : na
float liqPL = showLiqZones ? ta.pivotlow(liqLeftLen,  liqRightLen) : na

if not na(liqPH) and showLiqZones
    int   pivIdx  = bar_index - liqRightLen
    float pivVol  = volume[li

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

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

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

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

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

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

Стоимость полного кода
1 519,60₽ ≈ $18.57