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