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

Market Structure Break & Order Block Finder

indicator_market_structure_break_&_order_block_finder_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 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор для платформы TradingView, написанный на Pine Script v5. Предназначен для выявления зон Order Block (бычьих и медвежьих) и Market Structure Break на ценовых графиках. Индикатор анализирует последовательность свечей, определяя потенциальные зоны, к которым цена может вернуться в будущем.

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

Индикатор поддерживает условия оповещений TradingView для обнаружения новых Order Block и смены рыночной структуры. Оповещения носят исключительно информационный характер и не являются сигналами к покупке или продаже. Индикатор не выполняет автоматическую торговлю и не гарантирует прибыль.

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

НастройкаОписание
colors Схема цветового оформления: тёмная (DARK) или яркая (BRIGHT).
periods Количество последующих свечей одного направления, необходимых для идентификации Order Block.
threshold Минимальный процент движения для подтверждения значимого Order Block.
usewicks Использовать диапазон High/Low для обозначения Order Block вместо Open/Close.
showbull Отображать канал последнего бычьего Order Block.
showbear Отображать канал последнего медвежьего Order Block.
showdocu Отображать метку с документацией и подсказкой по индикатору.
info_pan Отображать информационную панель с данными о последних Order Block.
zigzag_len Длина ZigZag — количество баров для определения ключевых точек разворота.
show_zigzag Отображать ZigZag-линии, соединяющие ключевые точки разворота.
fib_factor Коэффициент для подтверждения пробоя при определении смены рыночной структуры.
text_size Размер текста для графических элементов и подписей.
delete_boxes Удалять старые и сломанные ящики при выходе цены из зоны Order Block.
bu_ob_color Цвет заливки ящика бычьего Order Block.
bu_ob_border_color Цвет рамки ящика бычьего Order Block.
bu_ob_text_color Цвет текста внутри ящика бычьего Order Block.
be_ob_color Цвет заливки ящика медвежьего Order Block.
be_ob_border_color Цвет рамки ящика медвежьего Order Block.
be_ob_text_color Цвет текста внутри ящика медвежьего Order Block.
bu_bb_color Цвет заливки ящика бычьего Order Block / Break Line.
bu_bb_border_color Цвет рамки ящика бычьего Order Block / Break Line.
bu_bb_text_color Цвет текста внутри ящика бычьего Order Block / Break Line.
be_bb_color Цвет заливки ящика медвежьего Order Block / Break Line.
be_bb_border_color Цвет рамки ящика медвежьего Order Block / Break Line.
be_bb_text_color Цвет текста внутри ящика медвежьего Order Block / Break Line.
Получить полный код

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

indicator(title='Market Structure Break & Order Block Finder', shorttitle='MSB & OBF', overlay=true, max_lines_count=500, max_bars_back=4900, max_boxes_count=500)

colors = input.string(title='Color Scheme', defval='DARK', options=['DARK', 'BRIGHT'])
periods = input(5, 'Relevant Periods to identify OB')  // Required number of subsequent candles in the same direction to identify Order Block
threshold = input.float(0.0, 'Min. Percent move to identify OB', step=0.1)  // Required minimum % move (from potential OB close to last subsequent candle to identify Order Block)
usewicks = input(false, 'Use whole range [High/Low] for OB marking?')  // Display High/Low range for each OB instead of Open/Low for Bullish / Open/High for Bearish
showbull = input(true, 'Show latest Bullish Channel?')  // Show Channel for latest Bullish OB?
showbear = input(true, 'Show latest Bearish Channel?')  // Show Channel for latest Bearish OB?
showdocu = input(false, 'Show Label for documentation tooltip?')  // Show Label which shows documentation as tooltip?
info_pan = input(false, 'Show Latest OB Panel?')  // Show Info Panel with latest OB Stats

ob_period = periods + 1  // Identify location of relevant Order Block candle
absmove = math.abs(close[ob_period] - close[1]) / close[ob_period] * 100  // Calculate absolute percent move from potential OB to last candle of subsequent candles
relmove = absmove >= threshold  // Identify "Relevant move" by comparing the absolute move to the threshold

bullcolor = colors == 'DARK' ? color.white : color.green
bearcolor = colors == 'DARK' ? color.blue : color.red

bullishOB = close[ob_period] < open[ob_period]  // Determine potential Bullish OB candle (red candle)

int upcandles = 0
for i = 1 to periods by 1
    upcandles += (close[i] > open[i] ? 1 : 0)  // Determine color of subsequent candles (must all be green to identify a valid Bearish OB)
    upcandles

OB_bull = bullishOB and upcandles == periods and relmove  // Identification logic (red OB candle & subsequent green candles)
OB_bull_high = OB_bull ? usewicks ? high[ob_period] : open[ob_period] : na  // Determine OB upper limit (Open or High depending on input)
OB_bull_low = OB_bull ? low[ob_period] : na  // Determine OB lower limit (Low)
OB_bull_avg = (OB_bull_high + OB_bull_low) / 2  // Determine OB middle line

bearishOB = close[ob_period] > open[ob_period]  // Determine potential Bearish OB candle (green candle)

int downcandles = 0
for i = 1 to periods by 1
    downcandles += (close[i] < open[i] ? 1 : 0)  // Determine color of subsequent candles (must all be red to identify a valid Bearish OB)
    downcandles

OB_bear = bearishOB and downcandles == periods and relmove  // Identification logic (green OB candle & subsequent green candles)
OB_bear_high = OB_bear ? high[ob_period] : na  // Determine OB upper limit (High)
OB_bear_low = OB_bear ? usewicks ? low[ob_period] : open[ob_period] : na  // Determine OB lower limit (Open or Low depending on input)
OB_bear_avg = (OB_bear_low + OB_bear_high) / 2  // Determine OB middle line

plotshape(OB_bull, title='Bullish OB', style=shape.triangleup, color=bullcolor, textcolor=bullcolor, size=size.tiny, location=location.belowbar, offset=-ob_period, text='Bullish OB')  // Bullish OB Indicator
bull1 = plot(OB_bull_high, title='Bullish OB High', style=plot.style_linebr, color=bullcolor, offset=-ob_period, linewidth=3)  // Bullish OB Upper Limit
bull2 = plot(OB_bull_low, title='Bullish OB Low', style=plot.style_linebr, color=bullcolor, offset=-ob_period, linewidth=3)  // Bullish OB Lower Limit

fill(bull1, bull2, color=color.new(bullcolor, 50), title='Bullish OB fill') // Fill Bullish OB
plotshape(OB_bull_avg, title='Bullish OB Average', style=shape.cross, color=bullcolor, size=size.normal, location=location.absolute, offset=-ob_period)  // Bullish OB Average

plotshape(OB_bear, title='Bearish OB', style=shape.triangledown, color=bearcolor, textcolor=bearcolor, size=size.tiny, location=location.abovebar, offset=-ob_period, text='Bearish OB')  // Bearish OB Indicator
bear1 = plot(OB_bear_low, title='Bearish OB Low', style=plot.style_linebr, color=bearcolor, offset=-ob_period, linewidth=3)  // Bearish OB Lower Limit
bear2 = plot(OB_bear_high, title='Bearish OB High', style=plot.style_linebr, color=bearcolor, offset=-ob_period, linewidth=3)  // Bearish OB Upper Limit
fill(bull1, bull2, color=color.new(bearcolor, 50), title='Bearish OB fill') // Fill Bearish OB
plotshape(OB_bear_avg, title='Bearish OB Average', style=shape.cross, color=bearcolor, size=size.normal, location=location.absolute, offset=-ob_period)  // Bullish OB Average

var line linebull1 = na  // Bullish OB average 
var line linebull2 = na  // Bullish OB open
var line linebull3 = na  // Bullish OB low
var line linebear1 = na  // Bearish OB average
var line linebear2 = na  // Bearish OB high
var line linebear3 = na  // Bearish OB open

if OB_bull and showbull
    line.delete(linebull1)
    linebull1 := line.new(x1=bar_index, y1=OB_bull_avg, x2=bar_index - 1, y2=OB_bull_avg, extend=extend.left, color=bullcolor, style=line.style_solid, width=1)

    line.delete(linebull2)
    linebull2 := line.new(x1=bar_index, y1=OB_bull_high, x2=bar_index - 1, y2=OB_bull_high, extend=extend.left, color=bullcolor, style=line.style_dashed, width=1)

    line.delete(linebull3)
    linebull3 := line.new(x1=bar_index, y1=OB_bull_low, x2=bar_index - 1, y2=OB_bull_low, extend=extend.left, color=bullcolor, style=line.style_dashed, width=1)
    linebull3

if OB_bear and showbear
    line.delete(linebear1)
    linebear1 := line.new(x1=bar_index, y1=OB_bear_avg, x2=bar_index - 1, y2=OB_bear_avg, extend=extend.left, color=bearcolor, style=line.style_solid, width=1)

    line.delete(linebear2)
    linebear2 := line.new(x1=bar_index, y1=OB_bear_high, x2=bar_index - 1, y2=OB_bear_high, extend=extend.left, color=bearcolor, style=line.style_dashed, width=1)

    line.delete(linebear3)
    linebear3 := line.new(x1=bar_index, y1=OB_bear_low, x2=bar_index - 1, y2=OB_bear_low, extend=extend.left, color=bearcolor, style=line.style_dashed, width=1)
    linebear3

alertcondition(OB_bull, title='New Bullish OB detected', message='New Bullish OB detected - This is NOT a BUY signal!')
alertcondition(OB_bear, title='New Bearish OB detected', message='New Bearish OB detected - This is NOT a SELL signal!')

var latest_bull_high = 0.0  // Variable to keep latest Bull OB high
var latest_bull_avg = 0.0  // Variable to keep latest Bull OB average
var latest_bull_low = 0.0  // Variable to keep latest Bull OB low
var latest_bear_high = 0.0  // Variable to keep latest Bear OB high
var latest_bear_avg = 0.0  // Variable to keep latest Bear OB average
var latest_bear_low = 0.0  // Variable to keep latest Bear OB low

if OB_bull_high > 0
    latest_bull_high := OB_bull_high
    latest_bull_high

if OB_bull_avg > 0
    latest_bull_avg := OB_bull_avg
    latest_bull_avg

if OB_bull_low > 0
    latest_bull_low := OB_bull_low
    latest_bull_low

if OB_bear_high > 0
    latest_bear_high := OB_bear_high
    latest_bear_high

if OB_bear_avg > 0
    latest_bear_avg := OB_bear_avg
    latest_bear_avg

if OB_bear_low > 0
    latest_bear_low := OB_bear_low
    latest_bear_low

plotchar(latest_bull_high, char=' ', location=location.abovebar, color=color.new(#777777, 100), size=size.tiny, title='Latest Bull High')
plotchar(latest_bull_avg, char=' ', location=location.abovebar, color=color.new(#777777, 100), size=size.tiny, title='Latest Bull Avg')
plotchar(latest_bull_low, char=' ', location=location.abovebar, color=color.new(#777777, 100), size=size.tiny, title='Latest Bull Low')
plotchar(latest_bear_high, char=' ', location=location.abovebar, color=color.new(#777777, 100), size=size.tiny, title='Latest Bear High')
plotchar(latest_bear_avg, char=' ', location=location.abovebar, color=color.new(#777777, 100), size=size.tiny, title='Latest Bear Avg')
plotchar(latest_bear_low, char=' ', location=location.abovebar, color=color.new(#777777, 100), size=size.tiny, title='Latest Bear Low')

draw_InfoPanel(_text, _x, _y, font_size) =>
    var label la_panel = na
    label.delete(la_panel)
    la_panel := label.new(x=_x, y=_y, text=_text, xloc=xloc.bar_time, yloc=yloc.price, color=color.new(#383838, 5), style=label.style_label_left, textcolor=color.white, size=font_size)
    la_panel

info_panel_x = time_close + math.round(ta.change(time) * 100)
info_panel_y = close

title = 'LATEST ORDER BLOCKS'
row0 = '-----------------------------------------------------'
row1 = ' Bullish - High: ' + str.tostring(latest_bull_high, '#.##')
row2 = ' Bullish - Avg: ' + str.tostring(latest_bull_avg, '#.##')
row3 = ' Bullish - Low: ' + str.tostring(latest_bull_low, '#.##')
row4 = '-----------------------------------------------------'
row5 = ' Bearish - High: ' + str.tostring(latest_bear_high, '#.##')
row6 = ' Bearish - Avg: ' + str.tostring(latest_bear_avg, '#.##')
row7 = ' Bearish - Low: ' + str.tostring(latest_bear_low, '#.##')

panel_text = '\n' + title + '\n' + row0 + '\n' + row1 + '\n' + row2 + '\n' + row3 + '\n' + row4 + '\n\n' + row5 + '\n' + row6 + '\n' + row7 + '\n'

if info_pan
    draw_InfoPanel(panel_text, info_panel_x, info_panel_y, size.normal)

chper = time - time[1]
chper := ta.change(chper) > 0 ? chper[1] : chper

var vartooltip = 'Indicator to help identifying instituational Order Blocks. Often these blocks signal the beginni

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

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

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

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

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

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

Стоимость полного кода
1 592,80₽ ≈ $19.47