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

Breaker Block Detector

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

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

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

О программе

Breaker Block Detector — это индикатор TradingView, который выявляет зоны так называемых breaker block на графике цены. Он опирается на подтверждённые свинг-хай и свинг-лоу, определяет пробой структуры (Break of Structure) и фильтрует импульсы по критерию институционального смещения, измеряемому через ATR. Для каждого подтверждённого импульса индикатор определяет исходный Order Block и отображает его в виде зоны на графике.

Индикатор отслеживает состояние каждой зоны: активная, митигированная (при ретесте) или аннулированная. При ретесте зоны визуально затухает, при выходе цены за границу зоны — зона удаляется. Поддерживается ограничение количества одновременно активных зон с автоматическим удалением старых.

Визуализация включает цветные зоны, средние линии и маркеры BOS. Индикатор предоставляет настраиваемые оповещения на формирование новых зон, их ретест и аннулирование, а также поддерживает условные оповещения через alertcondition() из панели TradingView.

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

НастройкаОписание
i_swingLen Количество баров слева и справа от свинга для подтверждения свинг-хай или свинг-лоу.
i_bosConfirm Выбор способа подтверждения пробоя структуры: по закрытию свечи или по фите.
i_maxBreakers Максимальное количество активных зон брейкеров, сохраняемых на каждой стороне.
i_atrLen Период для расчёта ATR, используемого в фильтре смещения импульсной свечи.
i_dispMult Множитель, на который умножается ATR для определения минимального диапазона импульсной свечи.
i_obLookback Количество свечей перед импульсом BOS, в пределах которых ищется исходный Order Block.
i_bullColor Цвет заливки зоны бычьего брейкера.
i_bearColor Цвет заливки зоны медвежьего брейкера.
i_bullBorder Цвет границы зоны бычьего брейкера.
i_bearBorder Цвет границы зоны медвежьего брейкера.
i_midlineWidth Толщина средней пунктирной линии внутри зоны брейкера.
i_zoneExtend Количество баров вправо, на которые расширяется правая граница зоны брейкера.
i_showMitLabel Отображение метки при митигации (ретесте) зоны брейкера.
i_showBosLine Отображение маркеров подтверждённых свинг-пивотов и сигналов BOS на графике.
i_alertNewBull Срабатывание оповещения при формировании новой бычьей зоны брейкера.
i_alertNewBear Срабатывание оповещения при формировании новой медвежьей зоны брейкера.
i_alertRetBull Срабатывание оповещения при ретесте бычьей зоны брейкера.
i_alertRetBear Срабатывание оповещения при ретесте медвежьей зоны брейкера.
i_alertInvBull Срабатывание оповещения при аннулировании бычьей зоны брейкера.
i_alertInvBear Срабатывание оповещения при аннулировании медвежьей зоны брейкера.
Получить полный код

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

indicator(
     title     = "Breaker Block Detector",
     shorttitle = "BB Detector",
     overlay   = true,
     max_boxes_count  = 500,
     max_lines_count  = 500,
     max_labels_count = 200
     )

grp_struct = "⚙  Structure Detection"
i_swingLen      = input.int   (10,    "Swing Length",              minval = 3,  maxval = 50,  group = grp_struct,
                                tooltip = "Number of bars left/right used to confirm a swing high/low.")
i_bosConfirm    = input.string("Close","BOS Confirmation",         options = ["Close","Wick"], group = grp_struct,
                                tooltip = "Use candle Close or Wick to confirm a Break of Structure.")
i_maxBreakers   = input.int   (5,     "Max Active Breakers",       minval = 1,  maxval = 20,  group = grp_struct,
                                tooltip = "Maximum number of breaker zones kept visible per side.")

grp_engine = "🔬  Breaker Validity Engine"
i_atrLen        = input.int   (14,    "ATR Length",                minval = 5,  maxval = 50,  group = grp_engine)
i_dispMult      = input.float (1.5,   "Displacement Multiplier",   minval = 0.5, maxval = 5.0, step = 0.1, group = grp_engine,
                                tooltip = "Impulse candle range must exceed ATR × this multiplier to validate displacement.")
i_obLookback    = input.int   (3,     "OB Candle Lookback",        minval = 1,  maxval = 10,  group = grp_engine,
                                tooltip = "Number of candles before the BOS impulse used to identify the originating Order Block.")

grp_visual = "🎨  Visual Settings"
i_bullColor     = input.color (color.new(#00C896, 85), "Bullish Zone Fill",  group = grp_visual)
i_bearColor     = input.color (color.new(#FF3B6B, 85), "Bearish Zone Fill",  group = grp_visual)
i_bullBorder    = input.color (color.new(#00C896, 30), "Bullish Border",      group = grp_visual)
i_bearBorder    = input.color (color.new(#FF3B6B, 30), "Bearish Border",      group = grp_visual)
i_midlineWidth  = input.int   (1,     "Midline Width",             minval = 1,  maxval = 3,   group = grp_visual)
i_zoneExtend    = input.int   (40,    "Zone Right Extension (bars)",minval = 5, maxval = 200,  group = grp_visual)
i_showMitLabel  = input.bool  (true,  "Show Mitigation Tag",       group = grp_visual)
i_showBosLine   = input.bool  (true,  "Show BOS Lines",            group = grp_visual)

grp_alerts = "🔔  Alert Settings"
i_alertNewBull  = input.bool(true,  "Alert: New Bullish Breaker",         group = grp_alerts)
i_alertNewBear  = input.bool(true,  "Alert: New Bearish Breaker",         group = grp_alerts)
i_alertRetBull  = input.bool(true,  "Alert: Bullish Breaker Retest",      group = grp_alerts)
i_alertRetBear  = input.bool(true,  "Alert: Bearish Breaker Retest",      group = grp_alerts)
i_alertInvBull  = input.bool(true,  "Alert: Bullish Breaker Invalidated", group = grp_alerts)
i_alertInvBear  = input.bool(true,  "Alert: Bearish Breaker Invalidated", group = grp_alerts)

atr = ta.atr(i_atrLen)

swingHigh = ta.pivothigh(high, i_swingLen, i_swingLen)
swingLow  = ta.pivotlow (low,  i_swingLen, i_swingLen)

var float lastSwingHigh    = na
var int   lastSwingHighBar = na
var float lastSwingLow     = na
var int   lastSwingLowBar  = na

if not na(swingHigh)
    lastSwingHigh    := swingHigh
    lastSwingHighBar := bar_index - i_swingLen   // actual pivot bar

if not na(swingLow)
    lastSwingLow     := swingLow
    lastSwingLowBar  := bar_index - i_swingLen

bosPrice_bull = i_bosConfirm == "Close" ? close : high
bosPrice_bear = i_bosConfirm == "Close" ? close : low

bullBOS = not na(lastSwingHigh) and bosPrice_bull > lastSwingHigh
bearBOS = not na(lastSwingLow)  and bosPrice_bear < lastSwingLow

impulseRange    = high - low
isDisplacement  = impulseRange > (atr * i_dispMult)

f_findBullOB() =>

    obHigh = float(na)
    obLow  = float(na)
    obBar  = int(na)
    for i = 1 to i_obLookback
        if close[i] < open[i]   // bearish candle
            obHigh := high[i]
            obLow  := low[i]
            obBar  := bar_index - i
            break
    [obHigh, obLow, obBar]

f_findBearOB() =>

    obHigh = float(na)
    obLow  = float(na)
    obBar  = int(na)
    for i = 1 to i_obLookback
        if close[i] > open[i]   // bullish candle
            obHigh := high[i]
            obLow  := low[i]
            obBar  := bar_index - i
            break
    [obHigh, obLow, obBar]

var float[] bb_high   = array.new_float()
var float[] bb_low    = array.new_float()
var int[]   bb_bar    = array.new_int()
var int[]   bb_state  = array.new_int()    // 0=active,1=mitigated,2=invalidated
var box[]   bb_box    = array.new_box()
var line[]  bb_mid    = array.new_line()
var line[]  bb_bos    = array.new_line()
var bool[]  bb_alerted = array.new_bool()   // retest alert fired?

var float[] bkr_high   = array.new_float()
var float[] bkr_low    = array.new_float()
var int[]   bkr_bar    = array.new_int()
var int[]   bkr_state  = array.new_int()
var box[]   bkr_box    = array.new_box()
var line[]  bkr_mid    = array.new_line()
var line[]  bkr_bos    = array.new_line()
var bool[]  bkr_alerted = array.new_bool()

bullColorFaded = color.new(color.green, 95)
bearColorFaded = color.new(color.red,   95)
bullBorderFaded = color.new(#00C896, 80)
bearBorderFaded = color.new(#FF3B6B, 80)

if bullBOS and isDisplacement
    [obH, obL, obB] = f_findBullOB()
    if not na(obH)

        activeCount = 0
        if array.size(bb_state) > 0
            for k = 0 to array.size(bb_state) - 1
                if array.get(bb_state, k) == 0
                    activeCount += 1
        if activeCount >= i_maxBreakers

            if array.size(bb_state) > 0
                for k = 0 to array.size(bb_state) - 1
                    if array.get(bb_state, k) == 0
                        array.set(bb_state, k, 2)
                        box.delete(array.get(bb_box, k))
                        line.delete(array.get(bb_mid, k))
                        break

        midPrice = (obH + obL) / 2
        extBar   = bar_index + i_zoneExtend

        newBox = box.new(
             left         = obB,
             top          = obH,
             right        = extBar,
             bottom       = obL,
             bgcolor      = i_bullColor,
             border_color = i_bullBorder,
             border_width = 1
             )
        newMid = line.new(
             x1    = obB,
             y1    = midPrice,
             x2    = extBar,
             y2    = midPrice,
             color = color.new(#00C896, 40),
             width = i_midlineWidth,
             style = line.style_dashed
             )

        newBos = line.new(
             x1    = bar_index,
             y1    = lastSwingHigh,
             x2    = bar_index,
             y2    = lastSwingHigh,
             color = color.new(#00C896, 60),
             width = 1,
             style = line.style_dotted
             )

        array.push(bb_high,    obH)
        array.push(bb_low,     obL)
        array.push(bb_bar,     obB)
        array.push(bb_state,   0)
        array.push(bb_box,     newBox)
        array.push(bb_m

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

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

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

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

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

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

Стоимость полного кода
955,40₽ ≈ $11.68