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

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 и перейдите к оплате.

Стоимость полного кода
674,60₽ ≈ $8.24