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

P-MSB-OB PRO AUTO MTF (2026)

indicator p-msb-ob pro auto mtf (2026) for tradingview.pine

Похожие материалы по тегам

#__slope direction line.mq5MQL5 / MetaTrader 5 · 1 общих теговrange breakout @meowforex1.pineTradingView · 1 общих тегов#1.mtf_collider_h4_close_13_v18bar.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit3.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit2.mq4MQL4 / MetaTrader 4 · 1 общих тегов!mth_fasttmaline_edit.mq4MQL4 / MetaTrader 4 · 1 общих тегов
Вы автор или правообладатель?

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

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

О программе

P-MSB-OB PRO AUTO MTF (2026) — индикатор TradingView на Pine Script v6, отображающий на графике структуру рынка и зоны ордерблоков. Индикатор строит ZigZag-структуру из точек разворота, определяет рыночные структурные пробои (MSB) и на их основе выявляет бычьи и медвежьи ордерблоки, блоки пробоя и блоки митигации.

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

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

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

НастройкаОписание
zigzag_len Длина периода для определения точек разворота ZigZag (минимум 2).
show_zigzag Отображение линий ZigZag, соединяющих точки разворота структуры.
show_msb Отображение меток и линий рыночных структурных пробоев (MSB) на графике.
fib_factor Коэффициент Фибоначчи, используемый при определении рыночной структуры и пробоев.
text_size Размер текста меток блоков и MSB на графике.
extend_bars Количество баров вправо, на которые продлеваются блоки и линии от правой границы.
delete_boxes При включении удаляет сломанные блоки и линии, при выключении — продлевает их до текущего бара.
max_active_boxes Максимальное количество одновременно отображаемых блоков каждого типа на графике.
mitigation_type Метод определения митигации блока: по цене закрытия (Close) или по тени свечи (Wick).
show_midline Отображение пунктирной средней линии на уровне 50% внутри блоков.
midline_width Толщина пунктирной средней линии внутри блоков.
show_bu_ob Отображение бычьих ордерблоков (Bu-OB) на графике.
show_be_ob Отображение медвежьих ордерблоков (Be-OB) на графике.
show_bu_bb Отображение бычьих блоков пробоя (Bu-BB) на графике.
show_be_bb Отображение медвежьих блоков пробоя (Be-BB) на графике.
show_bu_mb Отображение бычьих блоков митигации (Bu-MB) на графике.
show_be_mb Отображение медвежьих блоков митигации (Be-MB) на графике.
show_mtf_ob Включает отображение мультитаймфреймных ордерблоков на графике.
auto_mtf Включает автоматический выбор таймфрейма для мультитаймфреймных ордерблоков на основе текущего таймфрейма графика.
manual_mtf_timeframe Выбранный вручную таймфрейм для мультитаймфреймных ордерблоков, используется при выключенном автоматическом режиме.
show_mtf_bu_ob Отображение мультитаймфреймных бычьих ордерблоков (MTF Bu-OB) на графике.
show_mtf_be_ob Отображение мультитаймфреймных медвежьих ордерблоков (MTF Be-OB) на графике.
mtf_max_boxes Максимальное количество одновременно отображаемых мультитаймфреймных блоков на графике.
bu_ob_color Цвет фона блоков Bu-OB.
bu_ob_border Цвет рамки блоков Bu-OB.
be_ob_color Цвет фона блоков Be-OB.
be_ob_border Цвет рамки блоков Be-OB.
bu_bb_color Цвет фона блоков Bu-BB и Bu-MB.
bu_bb_border Цвет рамки блоков Bu-BB и Bu-MB.
be_bb_color Цвет фона блоков Be-BB и Be-MB.
be_bb_border Цвет рамки блоков Be-BB и Be-MB.
mtf_bu_color Цвет фона мультитаймфреймных блоков Bu-OB.
mtf_bu_border Цвет рамки мультитаймфреймных блоков Bu-OB.
mtf_be_color Цвет фона мультитаймфреймных блоков Be-OB.
mtf_be_border Цвет рамки мультитаймфреймных блоков Be-OB.
Получить полный код

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

indicator('P-MSB-OB PRO AUTO MTF (2026)', 'P-MSB-OB PRO AUTO MTF (2026)', overlay = true, max_lines_count = 500, max_boxes_count = 500, max_labels_count = 500, max_bars_back = 4900)

settings = 'General Settings'

zigzag_len = input.int(9, 'ZigZag Length', minval = 2, group = settings)
show_zigzag = input.bool(false, 'Show Zigzag', group = settings)
show_msb = input.bool(true, 'Show MSB', group = settings)
fib_factor = input.float(0.33, 'Fib Factor', minval = 0, maxval = 1, step = 0.01, group = settings)
text_size = input.string(size.tiny, 'Text Size', options = [size.tiny, size.small, size.normal, size.large, size.huge], group = settings)
extend_bars = input.int(30, 'Extend Boxes (Bars)', minval = 1, maxval = 500, group = settings)

management_settings = 'Box Management'

delete_boxes = input.bool(true, 'Delete Broken Boxes', group = management_settings)
max_active_boxes = input.int(5, 'Maximum Active Boxes Per Type', minval = 1, maxval = 50, group = management_settings)
mitigation_type = input.string('Close', 'Mitigation Method', options = ['Close', 'Wick'], group = management_settings)
show_midline = input.bool(true, 'Show 50% Midline', group = management_settings)
midline_width = input.int(1, 'Midline Width', minval = 1, maxval = 4, group = management_settings)

visibility_settings = 'Box Visibility'

show_bu_ob = input.bool(true, 'Show Bu-OB', group = visibility_settings)
show_be_ob = input.bool(true, 'Show Be-OB', group = visibility_settings)
show_bu_bb = input.bool(false, 'Show Bu-BB', group = visibility_settings)
show_be_bb = input.bool(false, 'Show Be-BB', group = visibility_settings)
show_bu_mb = input.bool(false, 'Show Bu-MB', group = visibility_settings)
show_be_mb = input.bool(false, 'Show Be-MB', group = visibility_settings)

mtf_settings = 'Automatic Multi-Timeframe OB'

show_mtf_ob = input.bool(true, 'Enable MTF OB', group = mtf_settings)
auto_mtf = input.bool(true, 'Auto MTF Timeframe', group = mtf_settings)
manual_mtf_timeframe = input.timeframe('W', 'Manual MTF Timeframe', group = mtf_settings)
show_mtf_bu_ob = input.bool(true, 'Show MTF Bu-OB', group = mtf_settings)
show_mtf_be_ob = input.bool(true, 'Show MTF Be-OB', group = mtf_settings)
mtf_max_boxes = input.int(3, 'Maximum Active MTF Boxes', minval = 1, maxval = 20, group = mtf_settings)

color_settings = 'Colors'

bu_ob_color = input.color(color.new(color.green, 75), 'Bu-OB Background', group = color_settings)
bu_ob_border = input.color(color.green, 'Bu-OB Border', group = color_settings)

be_ob_color = input.color(color.new(color.red, 75), 'Be-OB Background', group = color_settings)
be_ob_border = input.color(color.red, 'Be-OB Border', group = color_settings)

bu_bb_color = input.color(color.new(color.green, 80), 'Bu-BB / Bu-MB Background', group = color_settings)
bu_bb_border = input.color(color.green, 'Bu-BB / Bu-MB Border', group = color_settings)

be_bb_color = input.color(color.new(color.red, 80), 'Be-BB / Be-MB Background', group = color_settings)
be_bb_border = input.color(color.red, 'Be-BB / Be-MB Border', group = color_settings)

mtf_bu_color = input.color(color.new(color.aqua, 82), 'MTF Bu-OB Background', group = color_settings)
mtf_bu_border = input.color(color.aqua, 'MTF Bu-OB Border', group = color_settings)

mtf_be_color = input.color(color.new(color.orange, 82), 'MTF Be-OB Background', group = color_settings)
mtf_be_border = input.color(color.orange, 'MTF Be-OB Border', group = color_settings)

f_auto_mtf() =>
    string result = 'W'

    if timeframe.isminutes
        if timeframe.multiplier <= 5
            result := '60'
            result
        else if timeframe.multiplier <= 30
            result := '240'
            result
        else
            result := 'D'
            result
    else if timeframe.isdaily
        result := 'W'
        result
    else if timeframe.isweekly
        result := 'M'
        result
    else if timeframe.ismonthly
        result := timeframe.multiplier <= 1 ? '3M' : '12M'
        result
    else
        result := 'W'
        result

    result

selected_mtf = auto_mtf ? f_auto_mtf() : manual_mtf_timeframe

var array<float> high_points_arr = array.new_float(2, na)
var array<int> high_index_arr = array.new_int(2, na)
var array<float> low_points_arr = array.new_float(2, na)
var array<int> low_index_arr = array.new_int(2, na)

var int high_point_count = 0
var int low_point_count = 0

var array<box> bu_ob_boxes = array.new_box()
var array<line> bu_ob_lines = array.new_line()

var array<box> be_ob_boxes = array.new_box()
var array<line> be_ob_lines = array.new_line()

var array<box> bu_bb_boxes = array.new_box()
var array<line> bu_bb_lines = array.new_line()

var array<box> be_bb_boxes = array.new_box()
var array<line> be_bb_lines = array.new_line()

var array<box> mtf_bu_boxes = array.new_box()
var array<line> mtf_bu_lines = array.new_line()

var array<box> mtf_be_boxes = array.new_box()
var array<line> mtf_be_lines = array.new_line()

f_get_high(ind) =>
    [array.get(high_points_arr, array.size(high_points_arr) - 1 - ind), array.get(high_index_arr, array.size(high_index_arr) - 1 - ind)]

f_get_low(ind) =>
    [array.get(low_points_arr, array.size(low_points_arr) - 1 - ind), array.get(low_index_arr, array.size(low_index_arr) - 1 - ind)]

f_remove_oldest(array<box> boxes, array<line> lines) =>
    if array.size(boxes) > 0
        removed_box = array.shift(boxes)
        removed_line = array.shift(lines)
        box.delete(removed_box)
        line.delete(removed_line)

f_limit_boxes(array<box> boxes, array<line> lines, int max_count) =>
    while array.size(boxes) > max_count
        f_remove_oldest(boxes, lines)

f_remove_at(array<box> boxes, array<line> lines, int item_index) =>
    removed_box = array.get(boxes, item_index)
    removed_line = array.get(lines, item_index)

    box.delete(removed_box)
    line.delete(removed_line)

    array.remove(boxes, item_index)
    array.remove(lines, item_index)

f_manage_boxes(array<box> boxes, array<line> lines, bool bullish) =>
    bool entered_zone = false
    bool mitigated_zone = false

    int i = array.size(boxes) - 1

    while i >= 0
        current_box = array.get(boxes, i)
        current_line = array.get(lines, i)

        top_price = box.get_top(current_box)
        bottom_price = box.get_bottom(current_box)

        is_broken = bullish ? mitigation_type == 'Close' ? close < bottom_price : low < bottom_price : mitigation_type == 'Close' ? close > top_price : high > top_price
        is_inside = close <= top_price and close >= bottom_price

        if is_broken
            mitigated_zone := true

            if delete_boxes
                f_remove_at(boxes, lines, i)
            else
                box.set_right(current_box, bar_index)
                line.set_x2(current_line, bar_index)
        else
            if is_inside
                entered_zone := true
                entered_zone

            box.set_right(current_box, bar_index + extend_bars)
            line.set_x2(current_line, bar_index + extend_bars)

        i := i - 1
        i

    [entered_zone, mitigated_zone]
var table wm = table.new(position.bottom_right, 1, 1)
if barstate.isfirst
    table.cell(wm, 0, 0, "Telegram @SimpleForexTools", text_color = color.new(color.gray, 70), text_size = size.large)

to_up = high >= ta.highest(zigzag_len)
to_down = low <= ta.lowest(zigzag_len)

trend = 1
trend := nz(trend[1], 1)
trend := trend == 1 and to_down ? -1 : trend == -1 and to_up ? 1 : trend

last_trend_up_since = ta.barssince(to_up[1])
low_val = ta.lowest(nz(last_trend_up_since > 0 ? last_trend_up_since : 1, 1))
low_index = bar_index - ta.barssince(low_val == low)

last_trend_down_since = ta.barssince(to_down[1])
high_val = ta.highest(nz(last_trend_down_since > 0 ? last_trend_down_since : 1, 1))
high_index = bar_index - ta.barssince(high_val == high)

if ta.change(trend) != 0
    if trend == 1
        array.push(low_points_arr, low_val)
        array.push(low_index_arr, low_index)
        low_point_count := low_point_count + 1
        low_point_count

    if trend == -1
        array.push(high_points_arr, high_val)
        array.push(high_index_arr, high_index)
        high_point_count := high_point_count + 1
        high_point_count

[h0, h0i] = f_get_high(0)
[h1, h1i] = f_get_high(1)

[l0, l0i] = f_get_low(0)
[l1, l1i] = f_get_low(1)

enough_data = high_point_count >= 2 and low_point_count >= 2

if enough_data and ta.change(trend) != 0 and show_zigzag
    if trend == 1
        line.new(h0i, h0, l0i, l0, color = color.gray)

    if trend == -1
        line.new(l0i, l0, h0i, h0, color = color.gray)

market = 1
market := nz(market[1], 1)

last_l0 = ta.valuewhen(ta.change(market) != 0, l0, 0)
last_h0 = ta.valuewhen(ta.change(market) != 0, h0, 0)

if enough_data
    market := last_l0 == l0 or last_h0 == h0 ? market : market == 1 and l0 < l1 and l0 < l1 - math.abs(h0 - l1) * fib_factor ? -1 : market == -1 and h0 > h1 and h0 > h1 + math.abs(h1 - l0) * fib_factor ? 1 : market
    market

msb = enough_data and ta.change(market) != 0
bullish_msb = msb and market == 1
bearish_msb = msb and market == -1

is_bu_bb = enough_data and l0 < l1
is_be_bb = enough_data and h0 > h1

bu_ob_index = bar_index
bu_ob_index := nz(bu_ob_index[1], bar_index)

be_ob_index = bar_index
be_ob_index := nz(be_ob_index[1], bar_index)

bu_bb_index = bar_index
bu_bb_index := nz(bu_bb_index[1], bar_index)

be_bb_index = bar_index
be_bb_index := nz(be_bb_index[1], bar_index)

if enough_data
    for i = h1i to l0i[zigzag_len] by 1
        index = bar_index - i
        if open[index] > close[inde

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

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

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

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

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

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

Стоимость полного кода
1 605₽ ≈ $19.62