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

The Distilled Sweep Zone

indicator liquidity draws for tradingview.pine
Вы автор или правообладатель?

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

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

О программе

Индикатор «The Distilled Sweep Zone» отображает на графике уровни ликвидности (разрывы свинг-экстремумов) по трём таймфреймам: текущему, первому высшему и второму высшему. Для каждого уровня рассчитывается проекция зоны предполагаемого «захвата» (sweep zone), включающая ценовой диапазон и оценку временного окна, рассчитанные на основе статистического анализа исторических данных. Проекция обновляется каждую свечу и удаляется после реализации уровня.

Дополнительно индикатор рисует уровни завершённых торговых сессий и предыдущего дня, обнаруживает непроработанные FVG (Fair Value Gaps) на первом высшем таймфрейме и выводит таблицы с информацией о ликвидности выше и ниже текущей цены. Доступны настройки визуального оформления, таймфреймов, силы пивотов и условий оповещений.

Индикатор является чистым инструментом анализа и отображения: он не содержит симуляции сделок и не является торговым советником. Все проекции носят статистический характер и не являются торговыми сигналами.

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

НастройкаОписание
useChart Использовать ТФ графика — Включает использование экстремумов текущего графика (последний непорванный свинг-хай и свинг-лоу) в качестве уровней ликвидности.
useGov Использовать HTF 1 — Включает отображение уровней первого высшего таймфрейма (управляющий таймфрейм).
useG2 Использовать HTF 2 — Включает отображение уровней второго высшего таймфрейма (второй уровень парирования).
govMode Режим парирования — Режим автоматического или ручного выбора первого высшего таймфрейма для парирования.
govMan Ручной HTF 1 — Первый высший таймфрейм, используемый вручную при переключении режима парирования в ручной.
g2Man Ручной HTF 2 — Второй высший таймфрейм, используемый вручную при переключении режима парирования в ручной.
pivStrIn Сила пивота графика — Сила пивотов для текущего графика (0 = автоматический выбор в зависимости от таймфрейма).
govPiv Сила пивота HTF — Сила пивотов для первого высшего таймфрейма (количество баров по обе стороны от экстремума).
rngOn Рисовать диапазон — Включает отрисовку диапазона (границ ликвидности — последнего непорванного свинг-хая и свинг-лоу).
cRng Цвет уровней диапазона — Цвет линий уровней диапазона (границ ликвидности).
rngW Толщина линий — Толщина линий диапазона (для HTF 2 уменьшается по уровням).
rngSty Стиль линий диапазона — Стиль линий диапазона (сплошной, пунктирный или точечный).
rngFil Заливка между уровнями — Включает заливку области между двумя границами диапазона (используется для наивысшего включённого таймфрейма).
cRngF Цвет заливки диапазона — Цвет заливки области между двумя границами диапазона.
rngTx Подписи каждой границы — Включает отображение подписей на каждой границе диапазона.
rngTkn Сохранять захваченные уровни — При включении захваченный уровень сохраняется на графике (замораживается на свече, которая его взяла), при выключении — удаляется.
cTkn Цвет захваченного уровня — Цвет захваченного (taken) уровня, который перестаёт отслеживать правую границу.
zOn Проецировать зону захвата — Включает проекцию зоны предполагаемого захвата (sweep zone) для живых (незахваченных) уровней.
zChart Зона для ТФ графика — Включает проекцию зоны захвата для диапазона текущего графика.
zGov Зона для HTF 1 — Включает проекцию зоны захвата для первого высшего таймфрейма.
zG2 Зона для HTF 2 — Включает проекцию зоны захвата для второго высшего таймфрейма.
zBand Ценовой диапазон зоны — Выбор ценового диапазона зоны захвата: «откатывающиеся рейды» (узкий, условная подвыборка), «все рейды» (более широкий, безусловный), «измеренный на этом графике» или «пользовательский».
zLoA Пользовательский: нижний предел — Пользовательский нижний предел зоны захвата (в кратных ATR за пределами уровня).
zHiA Пользовательский: верхний предел — Пользовательский верхний предел зоны захвата (в кратных ATR за пределами уровня).
zMdA Пользовательская: медиана — Пользовательская отметка медианы зоны захвата (в кратных ATR за пределами уровня).
zTime Временная ось зоны — Включает временную ось для зоны захвата — проекция вперёд по времени, основанная на текущем возрасте уровня.
zSample Обучение на графике (после) — Минимальное количество реализованных уровней на текущем графике, после которого скрипт начинает использовать собственные данные для расчёта временного окна вместо статистической модели.
zMedT Маркер медианного времени — Включает отображение линии медианного времени в зоне захвата.
cZone Цвет зоны захвата — Цвет зоны предполагаемого захвата (sweep zone).
zFill Прозрачность заливки зоны — Прозрачность заливки прямоугольника зоны захвата (от 40 до 100).
zBord Прозрачность границы зоны — Прозрачность границы прямоугольника зоны захвата (от 40 до 100).
zMedW Толщина медианы — Толщина линий медианы (цены и времени) в зоне захвата.
addSessions Показать сессионные H/L — Включает отображение завершённых сессионных максимумов и минимумов (до 1-часового таймфрейма).
addPD Показать предыдущий день (H/L) — Включает отображение максимума/минимума предыдущего торгового дня на графике.
circleOn Маркеры-круги на экстремумах — Включает отрисовку круговых маркеров на экстремумах ликвидности.
extraLines Линии уровней сессий/PD — Включает отрисовку линий уровней сессий и предыдущего дня.
extraNames Подписи уровней сессий/PD — Включает отображение подписей имён уровней сессий и предыдущего дня рядом с экстремумами.
sessTZ Часовой пояс сессий — Часовой пояс, используемый для определения торговых сессий.
sessAsia Сессия Азии — Временной диапазон азиатской торговой сессии.
sessLondon Сессия Лондона — Временной диапазон лондонской торговой сессии.
sessNY Сессия Нью-Йорк AM — Временной диапазон нью-йоркской утренней торговой сессии.
sessPM Сессия Нью-Йорк PM — Временной диапазон нью-йоркской вечерней торговой сессии.
asiaInk Цвет Азии — Цвет линий и маркеров сессии Азии.
londonInk Цвет Лондона — Цвет линий и маркеров лондонской сессии.
nyInk Цвет Нью-Йорк AM — Цвет линий и маркеров нью-йоркской утренней сессии.
pmInk Цвет Нью-Йорк PM — Цвет линий и маркеров нью-йоркской вечерней сессии.
pdInk Цвет предыдущего дня — Цвет линий и маркеров предыдущего торгового дня.
swingInk Цвет кругов BSL/SSL — Цвет круговых маркеров на экстремумах ликвидности текущего графика (BSL/SSL).
markerGap Зазор маркера (ATR графика) — Расстояние от уровня до маркера-круга, выраженное в кратном значении ATR текущего графика.
chartGapOn Включить chart gaps в таблицы — Включает включение графиковых разрывов (chart gaps) в таблицы ликвидности.
chartGapShow Показать chart gaps на графике — Включает отображение недавних разрывов графика непосредственно на графике.
chartGapRecent Количество отображаемых chart gaps — Количество недавних разрывов графика, которые будут отрисованы, при включённом отображении на графике.
gapOn Показать FVG HTF 1 — Включает отображение разрывов первого высшего таймфрейма (FVG).
gapBoxes Прямоугольники FVG — Включает отрисовку прямоугольников (коробок) для FVG разрывов.
gapNames Подписи разрывов — Включает отображение подписей (меток) для разрывов на графике.
gapMit Удаление разрыва после — Режим удаления разрыва после реализации: «первая реализация» или «полная заливка».
gapLimit Макс. сохраняемых разрывов — Максимальное количество сохраняемых разрывов для каждого источника (HTF и графика).
gapColour Цвет FVG — Цвет разрывов (FVG) на графике.
gapTransparency Прозрачность коробок — Прозрачность прямоугольников разрывов (от 0 до 100).
dtOn Показать таблицы ликвидности — Включает отображение таблиц ликвидности с информацией об активных уровнях.
dtSide Сторона таблицы — Сторона размещения таблиц ликвидности на графике (правая или левая).
dtRows Макс. строк в таблице — Максимальное количество строк в каждой таблице ликвидности.
dtSize Размер текста таблицы — Размер текста в таблицах ликвидности.
dtUnit Единица расстояния — Единица измерения расстояния от уровня до текущей цены в таблицах (очки, тики или проценты).
dtBg Фон таблицы (тело) — Цвет фона тела таблиц ликвидности.
dtHead Фон таблицы (заголовок) — Цвет фона заголовка таблиц ликвидности.
dtText Цвет текста таблицы (тело) — Цвет текста тела таблиц ликвидности.
dtHeaderText Цвет текста заголовка — Цвет текста заголовка таблиц ликвидности.
dtChart Цвет текста текущего ТФ — Цвет текста уровней текущего таймфрейма в таблицах.
dtGov Цвет текста HTF 1 — Цвет текста уровней первого высшего таймфрейма в таблицах.
dtG2 Цвет текста HTF 2 — Цвет текста уровней второго высшего таймфрейма в таблицах.
Получить полный код

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

indicator("The Distilled Sweep Zone", "DSTL SWEEP Z", overlay = true,
     max_lines_count = 500, max_labels_count = 500, max_boxes_count = 200,
     max_bars_back = 2000)

gT_ = "Tiers"
gR_ = "The range"
gZ_ = "Likely sweep zone"

useChart = input.bool(true, "Chart timeframe", group = gT_, tooltip = "This chart's own last unbroken swing high and low. Its origin candle IS the pivot bar, so no search is needed.")
useGov   = input.bool(true, "Higher timeframe 1 (governing)", group = gT_, tooltip = "The paired frame. Its extremes are anchored on the CHART candle that printed them, not on the governing candle's open - which is what makes the blue line start where you would point by eye.")
useG2    = input.bool(true, "Higher timeframe 2 (the tier above it)", group = gT_, tooltip = "The frame the GOVERNING frame pairs to, by the same ladder - so a 1m chart shows 15m and 4H, a 5m chart shows 1H and Daily.\n\nAnchored the same way. The walk back is longer, which is why max_bars_back is declared at 2000.")
govMode  = input.string("Auto (per timeframe)", "Pairing", options = ["Auto (per timeframe)", "Manual"], group = gT_)
govMan   = input.timeframe("60", "  - manual HTF 1", group = gT_)
g2Man    = input.timeframe("240", "  - manual HTF 2", group = gT_)
pivStrIn = input.int(0, "Chart pivot strength (0 = auto)", minval = 0, maxval = 20, group = gT_, tooltip = "Auto is the ladder this house uses: 6 bars either side at 1m down to 2 on the slow frames, so one setting travels across timeframes.")
govPiv   = input.int(2, "Higher-timeframe pivot strength", minval = 1, maxval = 10, group = gT_)

rngOn  = input.bool(true, "Draw the range", group = gR_, tooltip = "The two levels bounding what price is working inside on each tier - the last unbroken swing high and the last unbroken swing low. That IS the liquidity: the stops sit beyond each edge, which is what makes the edge worth sweeping.")
cRng   = input.color(#2962ff, "  - level colour", group = gR_)
rngW   = input.int(2, "  - width (HTF 2, stepped down per tier)", minval = 1, maxval = 5, inline = "rw", group = gR_)
rngSty = input.string("Solid", "", options = ["Solid", "Dashed", "Dotted"], inline = "rw", group = gR_)
rngFil = input.bool(false, "  - shade between them", group = gR_, tooltip = "Off by default: the two LEVELS are the object, and a wash across the middle of the chart is the one thing this must not be. Uses the highest tier you have enabled.")
cRngF  = input.color(color.new(#2962ff, 93), "  - shade", group = gR_)
rngTx  = input.bool(true, "  - label each edge", group = gR_)
rngTkn = input.bool(true, "  - keep a taken edge, ticked", group = gR_, tooltip = "A level that has been run stops tracking the right edge, freezes on the candle that took it and changes its mark. Off removes it instead.")
cTkn   = input.color(#787b86, "  - taken colour", group = gR_)

zOn    = input.bool(true, "Project the likely sweep zone", group = gZ_, tooltip = "The interquartile excursion beyond a LIVE edge, in the direction a raid would have to come from. Rebuilt each bar so it tracks ATR, and removed the moment the edge is taken - a projection about an event that has already happened is not a projection.")
zChart = input.bool(false, "  - on the chart range", inline = "zt", group = gZ_)
zGov   = input.bool(true,  "HTF 1", inline = "zt", group = gZ_)
zG2    = input.bool(true,  "HTF 2", inline = "zt", group = gZ_)
zBand  = input.string("Reverting raids (0.10 / 0.23 / 0.41)", "  - price band", options = ["Reverting raids (0.10 / 0.23 / 0.41)", "All raids (0.16 / 0.36 / 0.73)", "Measured on this chart", "Custom"], group = gZ_, tooltip = "REVERTING RAIDS is the Inducement's band, measured only on raids that never closed beyond the level - the ones that turned. Tighter, because it is a conditioned subset.\n\nALL RAIDS is the unconditional band from 9,700 taken swings across BTC, Gold and NQ. Wider, and the honest one if you want to know where a wick lands rather than where a WORKING raid's wick lands.\n\nMEASURED ON THIS CHART learns from the levels this script has actually watched get taken here, and falls back to All raids until it has enough of them.")
zLoA   = input.float(0.10, "  - custom: from (x ATR beyond)", minval = 0.0, maxval = 3.0, step = 0.01, group = gZ_)
zHiA   = input.float(0.41, "  - custom: to (x ATR beyond)", minval = 0.01, maxval = 5.0, step = 0.01, group = gZ_)
zMdA   = input.float(0.23, "  - custom: median mark", minval = 0.0, maxval = 5.0, step = 0.01, group = gZ_)

zTime  = input.bool(true, "Give the zone a TIME axis (the estimated area)", group = gZ_, tooltip = "ON draws the zone as an AREA: the price band across the window the raid is likely to fall in, projected FORWARD from the current bar.\n\nOFF is the v2 behaviour - the price band spanning the level's whole life, which says where but nothing at all about when.\n\n!! THE WINDOW IS SET BY THE LEVEL'S CURRENT AGE, because the remaining wait RISES with age. A fresh level's median wait is 7 bars; one that has stood 34 bars has a median 72 more to go. Projecting a fixed distance would put the area in the wrong place for every level that is not brand new.")
zSample = input.int(40, "  - learn from this chart after (raids)", minval = 8, maxval = 400, group = gZ_, tooltip = "Until this many levels have been taken ON THIS CHART, the window uses the measured fit from the 9,700-swing study: p25 = 2 + 0.56 x age, median = 7 + 1.8 x age, p75 = 29 + 5.1 x age, in bars.\n\nPast it the script uses its own raids, conditioned on age exactly as the study was - which is the same self-calibrating idea as a percentile, and needs no tuning per instrument.")
zMedT  = input.bool(true, "  - mark the median time", group = gZ_)
cZone  = input.color(#f23645, "  - colour", group = gZ_)
zFill  = input.int(90, "  - fill / border", minval = 40, maxval = 100, inline = "zf", group = gZ_)
zBord  = input.int(70, "", minval = 40, maxval = 100, inline = "zf", group = gZ_)
zMedW  = input.int(1, "  - median width", minval = 1, maxval = 4, group = gZ_)

color CIV = color.new(color.gray, 100)
float atr = ta.atr(14)
int   _tfs = timeframe.in_seconds()
int   tfMs = _tfs * 1000
int   pivStr = pivStrIn > 0 ? pivStrIn : _tfs <= 60 ? 6 : _tfs <= 300 ? 5 : _tfs <= 900 ? 4 : _tfs <= 3600 ? 3 : 2

f_ax(int b) => math.max(nz(b, bar_index), bar_index - 4500)
f_sty(string x) => x == "Dotted" ? line.style_dotted : x == "Dashed" ? line.style_dashed : line.style_solid

string govAuto = _tfs <= 60 ? "15" : _tfs <= 180 ? "30" : _tfs <= 300 ? "60" : _tfs <= 900 ? "240" : _tfs <= 1800 ? "360" : _tfs <= 10800 ? "D" : _tfs <= 86400 ? "W" : "3M"
string govTF   = govMode == "Manual" ? govMan : govAuto
int    govSec  = timeframe.in_seconds(govTF)
string govTFq  = govSec > _tfs ? govTF : timeframe.period
bool   govOk   = useGov and govSec > _tfs

string g2Auto  = govSec <= 60 ? "15" : govSec <= 180 ? "30" : govSec <= 300 ? "60" : govSec <= 900 ? "240" : govSec <= 1800 ? "360" : govSec <= 10800 ? "D" : govSec <= 86400 ? "W" : "3M"
string g2TF    = govMode == "Manual" ? g2Man : g2Auto
int    g2Sec   = timeframe.in_seconds(g2TF)
string g2TFq   = g2Sec > govSec ? g2TF : govTFq
bool   g2Ok    = useG2 and g2Sec > govSec

f_tfTag(string tf) =>
    int sc = timeframe.in_seconds(tf)
    sc < 60 ? str.tostring(sc) + "s" : sc < 3600 ? str.tostring(sc / 60) + "m" : sc < 86400 ? str.tostring(sc / 3600) + "H" : sc < 604800 ? "D" : sc < 2592000 ? "W" : "3M"
string curTag = f_tfTag(timeframe.period)
string govTag = f_tfTag(govTFq)
string g2Tag  = f_tfTag(g2TFq)

f_ltfOrigin(int t0, bool useHigh, int blockMs) =>
    int found = na
    if not na(t0)
        float span = math.max(0.0, float(time - t0))
        int   need = int(math.ceil((span + blockMs) / math.max(1.0, _tfs * 1000.0))) + 2
        int   lim  = math.min(need, math.min(1950, bar_index))
        float best = na
        for o = 0 to lim
            int tt = time[o]
            if na(tt) or tt < t0
                break
            if tt < t0 + blockMs
                float v = useHigh ? high[o] : low[o]
                if na(best) or (useHigh ? v >= best : v <= best)
                    best  := v
                    found := tt
    nz(found, t0)

var array<float> eP  = array.new_float(6, na)
var array<int>   eT  = array.new_int(6, na)      // anchor TIME, not bar - an HTF
var array<bool>  eTk = array.new<bool>(6, false) //  anchor can outrun bar_index
var array<line>  eLn = array.new<line>(6, na)
var array<label> eLb = array.new<label>(6, na)
var array<box>   eBx = array.new<box>(6, na)     // its sweep zone
var array<line>  eMd = array.new<line>(6, na)    // and the median PRICE mark
var array<line>  eMt = array.new<line>(6, na)    // and the median TIME mark
var array<int>   eB  = array.new_int(6, na)      // the BAR it registered on, so
var box rngFillBx = na                           //   its age is countable

var array<int>   wS = array.new_int()
var array<float> oS = array.new_float()

f_edgeSet(int i, float px, int t0) =>
    array.set(eP, i, px)
    array.set(eT, i, t0)
    array.set(eB, i, bar_index)
    array.set(eTk, i, false)
    0

f_waitQ(int age, float pct) =>
    float r = na
    if array.size(wS) >= zSample
        array<int> rem = array.new_int()
        for k = 0 to array.size(wS) - 1
            int w = array.get(wS, k)
            if w >= age
                array.push(rem, w - age)
        int n = array.size(rem)
        if n >= 8
            array.sort(rem, order.ascending)
            r := float(array.get(rem, math.min(int(pct * (n - 1)), n - 1)))
    if na(r)

        r := pct <= 0.25 ? 2.0 + 0.56 * age : pct >= 0.75 ? 29.0 + 5.1 * age : 7.0 + 1.8 * age
    math.max(1.0, r)

float cph = ta.pivothigh(pivStr, pivStr)
float cpl = ta.pivotlow(pivStr, pivStr)
if useChart and barstate.isconfirmed
    if not na(cph)
        f_edgeSet(0, cph, time[pivStr])
    if not na(cpl)
        f_edgeSet(1, cpl, time[pivStr])

[gH, gHt, gL, gLt] = request.security(syminfo.tickerid, govTFq,
     [ta.valuewhen(not na(ta.pivothigh(govPiv, govPiv)), ta.pivothigh(govPiv, govPiv), 0),
      ta.valuewhen(not na(ta.pivothigh(govPiv, govPiv)), time[govPiv], 0),
      ta.valuewhen(not na(ta.pivotlow(govPiv, govPiv)), ta.pivotlow(govPiv, govPiv), 0),
      ta.valuewhen(not na(ta.pivotlow(govPiv, govPiv)), time[govPiv], 0)],
     lookahead = barmerge.lookahead_off)
[kH, kHt, kL, kLt] = request.security(syminfo.tickerid, g2TFq,
     [ta.valuewhen(not na(ta.pivothigh(govPiv, govPiv)), ta.pivothigh(govPiv, govPiv), 0),
      ta.valuewhen(not na(ta.pivothigh(govPiv, govPiv)), time[govPiv], 0),
      ta.valuewhen(not na(ta.pivotlow(govPiv, govPiv)), ta.pivotlow(govPiv, govPiv), 0),
      ta.valuewhen(not na(ta.pivotlow(govPiv, govPiv)), time[govPiv], 0)],
     lookahead = barmerge.lookahead_off)
int govMs = timeframe.in_seconds(govTFq) * 1000
int g2Ms  = timeframe.in_seconds(g2TFq) * 1000

if barstate.isconfirmed
    if govOk
        if not na(gH) and not na(gHt) and gHt != nz(gHt[1])
            f_edgeSet(2, gH, f_ltfOrigin(gHt, true, govMs))
        if not na(gL) and not na(gLt) and gLt != nz(gLt[1])
            f_edgeSet(3, gL, f_ltfOrigin(gLt, false, govMs))
    if g2Ok
        if not na(kH) and not na(kHt) and kHt != nz(kHt[1])
            f_edgeSet(4, kH, f_ltfOrigin(kHt, true, g2Ms))
        if not na(kL) and not na(kLt) and kLt != nz(kLt[1])
            f_edgeSet(5, kL, f_ltfOrigin(kLt, false, g2Ms))

if barstate.isconfirmed
    for i = 0 to 5
        float px = array.get(eP, i)
        if not na(px) and not array.get(eTk, i)
            if i % 2 == 0 ? high > px : low < px
                array.set(eTk, i, true)

                if not na(array.get(eB, i))
                    array.push(wS, bar_index - array.get(eB, i))
                    array.push(oS, not na(atr) and atr > 0 ? (i % 2 == 0 ? high - px : px - low) / atr : float(na))
                    while array.size(wS) > 400
                        array.shift(wS)
                        array.shift(oS)
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)

if barstate.islast
    box.delete(rngFillBx)
    rngFillBx := box(na)
    for i = 0 to 5
        line.delete(array.get(eLn, i))
        label.delete(array.get(eLb, i))
        box.delete(array.get(eBx, i))
        line.delete(array.get(eMd, i))
        line.delete(array.get(eMt, i))
        array.set(eMt, i, line(na))
        array.set(eLn, i, line(na))
        array.set(eLb, i, label(na))
        array.set(eBx, i, box(na))
        array.set(eMd, i, line(na))
        float px = array.get(eP, i)
        int   t0 = array.get(eT, i)
        int   tr = int(math.floor(i / 2.0))                        // 0 chart, 1 HTF1, 2 HTF2
        bool  on = tr == 0 ? useChart : tr == 1 ? govOk : g2Ok
        if rngOn and on and not na(px) and not na(t0)
            bool  isH = i % 2 == 0
            bool  tk  = array.get(eTk, i)
            if not tk or rngTkn
                color c9 = tk ? cTkn : cRng

                int   w9 = math.max(1, rngW - (2 - tr))
                string tg = tr == 0 ? curTag : tr == 1 ? govTag : g2Tag

                array.set(eLn, i, line.new(t0, px, time + tfMs * 4, px, xloc = xloc.bar_time, color = c9, width = w9, style = tk ? line.style_solid : f_sty(rngSty)))
                array.set(eLb, i, label.new(time + tfMs * 4, px, not rngTx ? "" : tg + (isH ? " BSL" : " SSL") + (tk ? " ok" : ""), xloc = xloc.bar_time, style = label.style_label_left, color = CIV, textcolor = c9, size = size.tiny))

            bool zTier = tr == 0 ? zChart : tr == 1 ? zGov : zG2
            if zOn and zTier and not tk and not na(atr) and atr > 0

                float a9 = zBand == "Custom" ? math.min(zLoA, zHiA) : zBand == "All raids (0.16 / 0.36 / 0.73)" ? 0.16 : 0.10
                float b9 = zBand == "Custom" ? math.max(zLoA, zHiA) : zBand == "All raids (0.16 / 0.36 / 0.73)" ? 0.73 : 0.41
                float m9 = zBand == "Custom" ? zMdA : zBand == "All raids (0.16 / 0.36 / 0.73)" ? 0.36 : 0.23
                if zBand == "Measured on this chart" and array.size(oS) >= zSample
                    array<float> ov = array.new_float()
                    for k = 0 to array.size(oS) - 1
                        if not na(array.get(oS, k))
                            array.push(ov, array.get(oS, k))
                    int no = array.size(ov)
                    if no >= 8
                        array.sort(ov, order.ascending)
                        a9 := array.get(ov, int(0.25 * (no - 1)))
                        m9 := array.get(ov, int(0.50 * (no - 1)))
                        b9 := array.get(ov, int(0.75 * (no - 1)))

                float za = isH ? px + math.min(a9, b9) * atr : px - math.min(a9, b9) * atr
                float zb = isH ? px + math.max(a9, b9) * atr : px - math.max(a9, b9) * atr
                float zm = isH ? px + m9 * atr : px - m9 * atr

                int   age9 = math.max(0, bar_index - nz(array.get(eB, i), bar_index))
                int   x1 = time
                int   x2 = time + tfMs * 4
                int   xm = na
                if zTime
                    x1 := time + int(f_waitQ(age9, 0.25)) * tfMs
                    x2 := time + int(f_waitQ(age9, 0.75)) * tfMs
                    xm := time + int(f_waitQ(age9, 0.50)) * tfMs
                array.set(eBx, i, box.new(zTime ? x1 : t0, math.max(za, zb), x2, math.min(za, zb), xloc = xloc.bar_time, border_color = color.new(cZone, zBord), bgcolor = color.new(cZone, zFill)))
                array.set(eMd, i, line.new(zTime ? x1 : t0, zm, x2, zm, xloc = xloc.bar_time, color = color.new(cZone, 35), width = zMedW, style = line.style_dotted))
                if zTime and zMedT and not na(xm)
                    array.set(eMt, i, line.new(xm, math.max(za, zb), xm, math.min(za, zb), xloc = xloc.bar_time, color = color.new(cZone, 35), width = zMedW, style = line.style_dotted))

    if rngOn and rngFil
        int b9 = g2Ok ? 4 : govOk ? 2 : 0
        float hp = array.get(eP, b9)
        float lp = array.get(eP, b9 + 1)
        int   ht = array.get(eT, b9)
        int   lt = array.get(eT, b9 + 1)
        if not na(hp) and not na(lp) and not na(ht) and not na(lt) and hp > lp
            rngFillBx := box.new(math.min(ht, lt), hp, time + tfMs * 4, lp, xloc = xloc.bar_time, border_color = CIV, bgcolor = cRngF)

var array<int>  tkN  = array.new_int(1, 0)
var array<bool> eTkP = array.new<bool>(6, false)
if barstate.isconfirmed
    for i = 0 to 5
        if array.get(eTk, i) and not array.get(eTkP, i)
            array.set(tkN, 0, array.get(

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

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

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

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

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

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

Стоимость полного кода
2 467,60₽ ≈ $30.16