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