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

Breaker Blocks

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

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

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

О программе

Breaker Blocks — это индикатор-оверлей для TradingView, который визуализирует на графике так называемые «блоки прорыва» — прямоугольные зоны, появляющиеся при пробое ценой ранее определённых пивотных уровней. Индикатор автоматически находит локальные максимумы и минимумы с помощью функций ta.pivothigh и ta.pivotlow, а затем отслеживает, произошло ли закрытие цены за пределами этих пивотов.

При подтверждении прорыва индикатор рисует на графике коробки (box), промежуточные линии (line) и текстовые метки (label), цвет которых настраивается отдельно для бычьих и медвежьих сигналов. Каждому блоку присваивается ранг на основе нескольких нормализованных показателей: процентного ранга спреда, объёма, глубины ликвидационного пробоя и дисперсии.

Индикатор предоставляет широкие возможности настройки: фильтр направления отображения (бычий, медвежий или оба), ограничение максимального количества видимых блоков, автоматическое удаление перекрывающихся зон, отображение ранговой оценки и выбор шрифта и размера текста. Также предусмотрено скрытие бренд-метки в углу графика.

Внутренние расчёты основаны на стандартных технических функциях Pine Script: ta.percentrank для ранжирования объёма и спреда, ta.atr для определения волатильности, а также ta.pivothigh и ta.pivotlow для обнаружения пивотов. Индикатор поддерживает пользовательские оповещения, срабатывающие при появлении нового блока прорыва.

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

НастройкаОписание
general_font Выбор семейства шрифта для текста на графике: Default или Monospace.
general_text Размер глобального текста на графике: Tiny, Small, Normal, Large, Huge или Auto.
general_brand_show Логический переключатель. При включении отображается бренд-метка в правом нижнем углу графика.
bb_bias Фильтр направления отображения блоков: Neutral — оба направления, Bullish — только бычьи, Bearish — только медвежьи.
bb_show_max Максимальное количество блоков прорыва, одновременно отображаемых на графике.
bb_len Период поиска пивотных точек (количество баров назад для определения локальных максимумов и минимумов).
bb_bull_css Цвет границы и заливки бычьих блоков прорыва.
bb_bull_inv_css Цвет инвертированной заливки бычьих блоков (область справа от блока).
bb_bear_css Цвет границы и заливки медвежьих блоков прорыва.
bb_bear_inv_css Цвет инвертированной заливки медвежьих блоков (область справа от блока).
bb_overlap_remove Логический переключатель. При включении автоматически удаляются блоки, визуально перекрывающие друг друга.
bb_show_rank Логический переключатель. При включении отображается ранговая оценка каждого блока (Prime, Premium, Standard, Basic, Weak) и цвет заливки адаптируется к оценке.
Получить полный код

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

indicator(title = "Breaker Blocks", shorttitle = "Breaker Blocks", overlay = true, max_lines_count = 500, max_labels_count = 500, max_boxes_count = 500)

colors_teal                         = color.teal
colors_red                          = color.red
colors_white                        = color.white
colors_black                        = color.black
colors_gray                         = color.gray

general_font                        = input.string("Monospace", "Text                 ", options = ["Default", "Monospace"], inline = "1.0", group = "General")
general_text                        = input.string("Tiny", "", options = ["Tiny", "Small", "Normal", "Large", "Huge", "Auto"], inline = "1.0", group = "General", tooltip = "Customize global text size and style")
general_brand_show                  = input.bool(false, "Hide Brand", group = "General")

bb_bias                             = input.string("Neutral", "Bias              ", options=["Neutral", "Bullish", "Bearish"], group = "Settings")
bb_show_max                         = input.int(3, "Max Blocks       ", inline = "1.0", group = "Settings")
bb_len                              = input.int(5, "Pivot Lookback ", inline = "2.0", group = "Settings")
bb_bull_css                         = input.color(color.new(colors_gray, 80), "Bullish             ", inline = "3.0", group = "Settings")
bb_bull_inv_css                     = input.color(color.new(colors_teal, 60), "", inline = "3.0", group = "Settings")
bb_bear_css                         = input.color(color.new(colors_gray, 80), "Bearish            ", inline = "4.0", group = "Settings")
bb_bear_inv_css                     = input.color(color.new(colors_red, 60), "", inline = "4.0", group = "Settings")
bb_overlap_remove                   = input.bool(false, "Remove Overlaps", group = "Settings")
bb_show_rank                        = input.bool(false, "Show Rank", group = "Settings")

type UDT_Pivot
    int   idx
    float p
    bool  broken

type UDT_Breaker
    int   idx
    float top
    float bottom
    bool  is_bull
    bool  mitigated
    box   bx
    box   bx_inv
    line  mid_ln
    float score
    string rank_name

type UDT_Store
    array<UDT_Breaker> bull_breakers
    array<UDT_Breaker> bear_breakers

method text_size(string size) =>
    switch size
        "Tiny"   => size.tiny
        "Small"  => size.small
        "Normal" => size.normal
        "Large"  => size.large
        "Huge"   => size.huge
        "Auto"   => size.auto

method font_style(string font) =>
    switch font
        'Default'   => font.family_default
        'Monospace' => font.family_monospace

method notransp(color css) => 
    color.rgb(color.r(css), color.g(css), color.b(css))

overlaps(float top1, float bottom1, float top2, float bottom2) =>
    hi1 = math.max(top1, bottom1)
    lo1 = math.min(top1, bottom1)
    hi2 = math.max(top2, bottom2)
    lo2 = math.min(top2, bottom2)
    math.max(lo1, lo2) <= math.min(hi1, hi2)

method get_rank_name(float score) =>
    score >= 80 ? "Prime" :
      score >= 60 ? "Premium" :
      score >= 40 ? "Standard" :
      score >= 20 ? "Basic" :
      "Weak"

method get_dynamic_color(color base_css, float score) =>
    float base_t = color.t(base_css)
    float offset = 30 - (score / 100) * 60
    float final_t = math.max(0, math.min(100, base_t + offset))
    color.rgb(color.r(base_css), color.g(base_css), color.b(base_css), final_t)

var UDT_Store store = UDT_Store.new(
     array.new<UDT_Breaker>(),
     array.new<UDT_Breaker>()
 )

method remove_breaker(UDT_Breaker brk) =>
    brk.bx.delete()
    brk.bx_inv.delete()
    if not na(brk.mid_ln)
        brk.mid_ln.delete()

method clean_old_breakers(array<UDT_Breaker> arr, int max_size) =>
    while arr.size() > max_size
        brk = arr.pop()
        brk.remove_breaker()

method check_mitigation(UDT_Store s) =>
    if s.bull_breakers.size() > 0
        for i = s.bull_breakers.size() - 1 to 0
            brk = s.bull_breakers.get(i)
            if close < brk.bottom
                brk.remove_breaker()
                s.bull_breakers.remove(i)

    if s.bear_breakers.size() > 0
        for i = s.bear_breakers.size() - 1 to 0
            brk = s.bear_breakers.get(i)
            if close > brk.top
                brk.remove_breaker()
                s.bear_breakers.remove(i)

var ph_arr = array.new<UDT_Pivot>()
var pl_arr = array.new<UDT_Pivot>()

int MAX_LOOKBACK = 500

float spread = high - low
float vol_pct = ta.percentrank(volume, 200)
float spread_pct = ta.percentrank(spread, 200)
float atr = ta.atr(100)

max_bars_back(spread_pct, 1000)
max_bars_back(vol_pct, 1000)
max_bars_back(atr, 1000)

ph = ta.pivothigh(high, bb_len, bb_len)
pl = ta.pivotlow(low, bb_len, bb_len)

if not na(ph)
    ph_arr.unshift(UDT_Pivot.new(bar_index[bb_len], ph, false))
    if ph_arr.size() > 10
        ph_arr.pop()

if not na(pl)
    pl_arr.unshift(UDT_Pivot.new(bar_index[bb_len], pl, false))
    if pl_arr.size() > 10
        pl_arr.pop()

store.check_mitigation()

if (bb_bias == "Neutral" or bb_bias == "Bullish") and ph_arr.size() > 0 and pl_arr.size() > 0
    for i = 0 to ph_arr.size() - 1
        H = ph_arr.get(i)
        bars_h = bar_index - H.idx
        if not H.broken and close > H.p and bars_h > 0 and bars_h < MAX_LOOKBACK
            H.broken := true

            float ll_val = low
            int ll_idx = bar_index
            for j = 0 to bars_h
                if low[j] < ll_val
                    ll_val := low[j]
                    ll_idx := bar_index[j]

            UDT_Pivot L = na
            for j = 0 to pl_arr.size() - 1
                if pl_arr.get(j).idx < H.idx
                    L := pl_arr.get(j)
                    break

            if not na(L) and ll_val < L.p

                float ob_top = na
                float ob_btm = na
                int   ob_idx = na

                int max_lookback_ob = int(math.min(bars_h + 20, bar_index))
                for j = bars_h to max_lookback_ob
                    if close[j] > open[j]
                        ob_top := high[j]
                        ob_btm := low[j]
                        ob_idx := bar_index[j]
                        break

                if not na(ob_top)

                    float ob_score = spread_pct[bar_index - ob_idx]
                    float vol_score = vol_pct[bar_index - ob_idx]
                    float sweep_depth = L.p - ll_val
                    float sweep_score = math.min(100,

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

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

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

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

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

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

Стоимость полного кода
894₽ ≈ $10.93