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