Range Compression Breakout
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator range breakout by av for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
«Range Compression Breakout» — индикатор для TradingView (Pine Script v6), предназначенный для выявления периодов сжатия волатильности и последующих пробоев ценового диапазона. Индикатор работает в режиме наложения на график и предоставляет визуальные инструменты для отслеживания консолидации и её завершения.
Индикатор поддерживает два режима обнаружения сжатия: адаптивный процентильный и фиксированный множитель ATR. Адаптивный режим определяет, является ли текущий диапазон среди самых тихих за заданный период истории, что позволяет автоматически находить зоны сжатия на любом инструменте. Фиксированный режим использует заданный пользователем порог соотношения диапазона к ATR.
На графике индикатор отображает диапазонные коробки, среднюю линию, метки пробоя и опциональные сигналы реверсов по теням свечей. При пробое цены за пределы диапазона рисуются метки и стрелки. Доступна заливка фона во время сжатия для наглядности.
Индикатор предоставляет четыре условия для оповещений TradingView: обнаружение нового диапазона, пробой диапазона, пробой с всплеском объёма и реверс на краю диапазона. Все настройки управляются через предустановленные профили или ручную конфигурацию.
Настройки программы
| Настройка | Описание |
|---|---|
| profile | Предустановленный профиль параметров: Tight Ranges, Normal Ranges, Swing Trading, Options Selling или Custom. Определяет начальные значения длины диапазона, тесноты, минимальных баров и периода ожидания. |
| mode | Режим обнаружения сжатия: «Adaptive Percentile» — адаптивный процентильный анализ распределения диапазонов, «ATR Multiple» — фиксированный порог на основе множителя ATR. |
| pctRank | Процентиль самых тихих диапазонов в адаптивном режиме: текущий диапазон считается сжатым, если он попадает в указанный процентиль за заданное окно истории. |
| pctWin | Количество баров истории, используемых для расчёта процентильного распределения диапазонов в адаптивном режиме. |
| cLen | Количество баров, используемых для определения максимума и минимума диапазона в ручном режиме. |
| cTight | Порог тесноты в единицах ATR — максимальное соотношение диапазона к ATR для признания диапазона сжатым в фиксированном режиме. |
| cMinBars | Минимальное количество баров, которое диапазон должен содержать, чтобы быть допущенным к подтверждению пробоя. |
| cCool | Количество баров перехода в режим ожидания после завершения диапазона, в течение которого новый диапазон не обнаруживается. |
| cConfirm | Количество последовательных закрытий за пределами диапазона, необходимых для подтверждения пробоя. |
| atrLen | Период расчёта индикатора Average True Range (ATR), используемого для определения волатильности и порогов сжатия. |
| bufATR | Буфер в единицах ATR, задающий отступ от краёв диапазона, при котором считается, что цена вышла за его пределы. |
| volLen | Период усреднения объёма для расчёта среднего объёма, используемого при определении всплеска. |
| volMult | Множитель, определяющий порог всплеска объёма: текущий объём должен превышать средний объём в указанное число раз. |
| useVol | Если включено, подтверждение пробоя требует всплеска объёма (текущий объём превышает средний более чем в заданное число раз). Рекомендуется выключать для FX и спот-символов с недостаточным объёмом. |
| showRev | Отображение сигналов реверса на краях диапазона по соотношению теней свечей. |
| wickRatio | Минимальное соотношение длины тени свечи к полному диапазону бара для распознавания значимого реверса на краю диапазона. |
| showBox | Отображение диапазонных коробок на графике, обозначающих зоны сжатия. |
| showMid | Отображение пунктирной средней линии внутри диапазонной коробки. |
| showBrk | Отображение меток и стрелок при пробое ценой границ диапазона. |
| keepBoxes | Если включено, диапазонные коробки сохраняются в истории после завершения диапазона; если выключено — удаляются. |
| shadeBg | Если включено, фон графика заливается полупрозрачным цветом во время нахождения цены внутри сжатого диапазона. |
| colBord | Цвет рамки диапазонных коробок на графике. |
| colFill | Цвет заливки диапазонных коробок на графике. |
| colMidC | Цвет средней линии внутри диапазонной коробки. |
| colLong | Цвет метки сигнала реверса по длинной тени свечи. |
| colShort | Цвет метки сигнала реверса по короткой тени свечи. |
| colBrkTxt | Цвет текста меток пробоя диапазона. |
Поиск по коду файла
indicator("Range Compression Breakout", overlay = true, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500)
grpP = "Profile"
profile = input.string("Normal Ranges", "Preset Profile", options = ["Tight Ranges", "Normal Ranges", "Swing Trading", "Options Selling", "Custom"], group = grpP)
mode = input.string("Adaptive Percentile", "Detection Mode", options = ["Adaptive Percentile", "ATR Multiple"], group = grpP, tooltip = "Adaptive: compression when the current range is among the quietest X% of recent history. Always finds ranges on any symbol. ATR Multiple: original-style fixed threshold.")
grpA = "Adaptive Mode"
pctRank = input.float(20.0, "Quietest Percentile (%)", minval = 1.0, maxval = 60.0, step = 1.0, group = grpA, tooltip = "Higher = more boxes. 20 means the range must be quieter than 80% of recent bars.")
pctWin = input.int(200, "History Window (bars)", minval = 30, group = grpA)
grpD = "Custom Detection (used when Profile = Custom)"
cLen = input.int(10, "Lookback Bars", minval = 3, group = grpD)
cTight = input.float(2.0, "Tightness (x ATR)", minval = 0.1, step = 0.1, group = grpD)
cMinBars = input.int(7, "Min Bars To Confirm", minval = 2, group = grpD)
cCool = input.int(25, "Cooldown Bars", minval = 0, group = grpD)
cConfirm = input.int(1, "Confirm Bars Outside", minval = 1, maxval = 5, group = grpD)
grpG = "Global"
atrLen = input.int(25, "ATR Length", minval = 1, group = grpG)
bufATR = input.float(0.05, "Breakout Buffer (xATR)",minval = 0.0, step = 0.01, group = grpG)
volLen = input.int(20, "Volume Average Length", minval = 1, group = grpG)
volMult = input.float(1.7, "Volume Spike Multiple", minval = 1.0, step = 0.1, group = grpG)
useVol = input.bool(false, "Confirm with Volume Spike", group = grpG, tooltip = "Leave OFF on FX / spot symbols where volume is tick-based or absent.")
grpR = "Reversals"
showRev = input.bool(true, "Show Wick Reversal Signals", group = grpR)
wickRatio = input.float(0.5, "Min Wick / Bar Range Ratio", minval = 0.1, maxval = 0.9, step = 0.05, group = grpR)
grpS = "Style"
showBox = input.bool(true, "Show Range Boxes", group = grpS)
showMid = input.bool(true, "Show Midline", group = grpS)
showBrk = input.bool(true, "Show Breakout Labels", group = grpS)
keepBoxes = input.bool(true, "Keep Boxes As History", group = grpS)
shadeBg = input.bool(false, "Shade Background While Compressed", group = grpS)
colBord = input.color(#FF9800, "Box Border", group = grpS)
colFill = input.color(color.new(#FF9800, 90), "Box Fill", group = grpS)
colMidC = input.color(#8A8078, "Midline", group = grpS)
colLong = input.color(#4EBC97, "Wick Long", group = grpS)
colShort = input.color(#9C27B0, "Wick Short", group = grpS)
colBrkTxt = input.color(color.white, "Break Label", group = grpS)
len = switch profile
"Tight Ranges" => 10
"Normal Ranges" => 10
"Swing Trading" => 10
"Options Selling" => 10
=> cLen
tight = switch profile
"Tight Ranges" => 1.6
"Normal Ranges" => 1.8
"Swing Trading" => 2.0
"Options Selling" => 2.2
=> cTight
minBars = switch profile
"Tight Ranges" => 4
"Normal Ranges" => 5
"Swing Trading" => 6
"Options Selling" => 7
=> cMinBars
coolBars = switch profile
"Tight Ranges" => 10
"Normal Ranges" => 15
"Swing Trading" => 20
"Options Selling" => 25
=> cCool
confirmBars = switch profile
"Tight Ranges" => 1
"Normal Ranges" => 1
"Swing Trading" => 1
"Options Selling" => 1
=> cConfirm
atr = ta.atr(atrLen)
hi = ta.highest(high, len)
lo = ta.lowest(low, len)
rng = hi - lo
ratio = atr > 0 ? rng / atr : na
thresh = ta.percentile_nearest_rank(rng, pctWin, pctRank)
adaptOK = not na(thresh) and rng <= thresh
atrOK = not na(ratio) and ratio < tight
isTight = mode == "Adaptive Percentile" ? adaptOK : atrOK
buf = atr * bufATR
volAvg = ta.sma(volume, volLen)
volSpike = volAvg > 0 and volume > volAvg * volMult
volOK = not useVol or volSpike
var bool inRange = false
var float top = na
var float bot = na
var int startBar = na
var int barsIn = 0
var box curBox = na
var line curMid = na
var int outUp = 0
var int outDn = 0
var int coolLeft = 0
var bool armedUp = false
var bool armedDn = false
newRange = false
brkUp = false
brkDn = false
revUp = false
revDn = fПоказано первые 50% кода (символов: 6746)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.