Market Structure Dynamics & Order Blocks
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator_market_structure_dynamics_&_order_blocks_for_tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это индикатор для TradingView, написанный на Pine Script v6 и предназначенный для отображения на графике аналитических элементов, связанных с рыночной структурой и институциональными блоками. Индикатор работает поверх графика цены и использует технические расчёты, данные другого таймфрейма, графические примитивы и условия для оповещений. Название продукта в исходнике явно указано в вызове indicator как "Market Structure Dynamics & Order Blocks".
Индикатор рассчитывает локальные экстремумы (пивоты) с настраиваемым периодом поиска и отслеживает моменты пробоя этих уровней. При пробое формируются графические отметки и метки, а также создаются прямоугольные зоны (блоки), которые могут отображаться в историческом режиме или только активными. Для блоков предусмотрены настройки ограничения количества, продления mitigated-блоков и фильтрации перекрывающихся зон. Дополнительно рассчитывается метрика импульса на основе Z-оценки изменения цены и относительного объёма, которая влияет на визуальное выделение блоков.
Индикатор умеет подсвечивать торговые сессии (Лондон, Нью-Йорк, Токио, Сидней) с индивидуальными расписаниями и цветами, а также отображать предыдущие недельные максимум и минимум с настраиваемыми цветами. Имеется аналитическая панель с выбором положения и размера, показывающая агрегированные показатели по созданным и mitigated-блокам. Для пробоев структуры предусмотрены условия оповещений TradingView, а также отображение меток BUY/SELL при соответствующих событиях.
Все параметры задаются через пользовательские настройки в интерфейсе индикатора. Индикатор не является стратегией и не выполняет симуляцию сделок; он предназначен для визуального анализа и оповещений.
Настройки программы
| Настройка | Описание |
|---|---|
| cfgShowDash | Показывает или скрывает аналитическую панель с агрегированными показателями. |
| cfgDashPos | Положение аналитической панели на графике: Top Right, Bottom Right или Bottom Left. |
| cfgDashSize | Размер текста аналитической панели: Tiny, Small, Normal или Large. |
| cfgPivotLength | Количество баров слева и справа для определения локальных экстремумов (пивотов). |
| cfgBreakThreshold | Порог Z-оценки импульса, при превышении которого пробой структуры считается значимым. Влияет на формирование сигналов и блоков. |
| cfgDisplayMode | Режим отображения блоков: Historical (исторический) или Active Only (только активные). |
| cfgMaxBlocks | Максимальное количество одновременно отображаемых активных блоков. |
| cfgKeepMitigated | Продлевает отображение mitigated-блоков на ограниченное время или количество. |
| cfgFilterOverlap | Включает фильтрацию перекрывающихся блоков: новые блоки не создаются, если пересекаются с активными. |
| cfgShowSessions | Включает или отключает подсветку всех торговых сессий. |
| cfgLondonActive | Включает подсветку лондонской торговой сессии. |
| cfgLondonTime | Расписание лондонской сессии в формате торговой сессии. |
| cfgLondonColor | Цвет подсветки лондонской сессии. |
| cfgNYActive | Включает подсветку нью-йоркской торговой сессии. |
| cfgNYTime | Расписание нью-йоркской сессии в формате торговой сессии. |
| cfgNYColor | Цвет подсветки нью-йоркской сессии. |
| cfgTokyoActive | Включает подсветку токийской торговой сессии. |
| cfgTokyoTime | Расписание токийской сессии в формате торговой сессии. |
| cfgTokyoColor | Цвет подсветки токийской сессии. |
| cfgSydneyActive | Включает подсветку сиднейской торговой сессии. |
| cfgSydneyTime | Расписание сиднейской сессии в формате торговой сессии. |
| cfgSydneyColor | Цвет подсветки сиднейской сессии. |
| cfgShowWeekly | Показывает или скрывает предыдущие недельные максимум и минимум. |
| cfgWhColor | Цвет линии предыдущего недельного максимума. |
| cfgWlColor | Цвет линии предыдущего недельного минимума. |
| cfgShowSignals | Показывает или скрывает метки BUY и SELL при пробоях структуры. |
Поиск по коду файла
indicator("Market Structure Dynamics & Order Blocks", "MS Dynamics & OBs", overlay = true, max_boxes_count = 500, max_lines_count = 500, max_labels_count = 500)
color COLOR_BULL = #059669 // Emerald Green
color COLOR_BEAR = #DC2626 // Crimson Red
color COLOR_HPZ_BULL = #0284C7 // Sky Blue
color COLOR_HPZ_BEAR = #D97706 // Amber
color COLOR_NEUTRAL = #6B7280 // Slate Gray
color DASH_BG = #FFFFFF
color DASH_BORDER = #E5E7EB
color DASH_TEXT_PRIMARY = #111827
color DASH_TEXT_MUTED = #6B7280
string G_DASH = "Analytics Panel"
string G_MS = "Market Structure"
string G_OB = "Institutional Blocks"
string G_SESS = "Trading Sessions"
string G_WEEKLY = "Weekly Levels"
string G_SIGNALS = "Buy / Sell Signals"
bool cfgShowDash = input.bool(true, "Show Analytics Panel", group = G_DASH)
string cfgDashPos = input.string("Top Right", "Panel Position", options = ["Top Right", "Bottom Right", "Bottom Left"], group = G_DASH)
string cfgDashSize = input.string("Small", "Panel Size", options = ["Tiny", "Small", "Normal", "Large"], group = G_DASH)
int cfgPivotLength = input.int(7, "Pivot Lookback Period", minval = 1, group = G_MS)
float cfgBreakThreshold = input.float(0.5, "Break Momentum Threshold (Z-Score)", minval = 0.1, step = 0.1, group = G_MS)
string cfgDisplayMode = input.string("Historical", "View Mode", options = ["Historical", "Active Only"], group = G_OB)
int cfgMaxBlocks = input.int(10, "Maximum Active Blocks", minval = 1, maxval = 100, group = G_OB)
bool cfgKeepMitigated = input.bool(false, "Extend Mitigated Blocks", group = G_OB)
bool cfgFilterOverlap = input.bool(true, "Filter Overlapping Blocks", group = G_OB)
bool cfgShowSessions = input.bool(true, "Highlight Trading Sessions", group = G_SESS)
bool cfgLondonActive = input.bool(false, "London Session", group = G_SESS)
string cfgLondonTime = input.session("0800-1700:1234567", "London Schedule", group = G_SESS)
color cfgLondonColor = input.color(#2563EB, "London Color", group = G_SESS, inline = "LON")
bool cfgNYActive = input.bool(false, "New York Session", group = G_SESS)
string cfgNYTime = input.session("1300-2200:1234567", "New York Schedule", group = G_SESS)
color cfgNYColor = input.color(#EA580C, "NY Color", group = G_SESS, inline = "NY")
bool cfgTokyoActive = input.bool(false, "Tokyo Session", group = G_SESS)
string cfgTokyoTime = input.session("0000-0900:1234567", "Tokyo Schedule", group = G_SESS)
color cfgTokyoColor = input.color(#E11D48, "Tokyo Color", group = G_SESS, inline = "TYO")
bool cfgSydneyActive = input.bool(false, "Sydney Session", group = G_SESS)
string cfgSydneyTime = input.session("2100-0600:1234567", "Sydney Schedule", group = G_SESS)
color cfgSydneyColor = input.color(#CA8A04, "Sydney Color", group = G_SESS, inline = "SYD")
bool cfgShowWeekly = input.bool(true, "Show Prev Weekly High / Low", group = G_WEEKLY)
color cfgWhColor = input.color(#7C3AED, "Weekly High Color", group = G_WEEKLY, inline = "WH")
color cfgWlColor = input.color(#0D9488, "Weekly Low Color", group = G_WEEKLY, inline = "WL")
bool cfgShowSignals = input.bool(true, "Show Buy / Sell Signals", group = G_SIGNALS)
type StructureBlock
box boxRef
label labelRef
line pocRef
float score
float topVal
float btmVal
bool isBullish
bool isHighProb
bool isMitigated
int mitigationIndex
var array<StructureBlock> activeBlocks = array.new<StructureBlock>()
getPosition(string posStr) =>
switch posStr
"Top Right" => position.top_right
"Bottom Right" => position.bottom_right
"Bottom Left" => position.bottom_left
=> position.top_right
getSize(string sizeStr) =>
switch sizeStr
"Tiny" => size.tiny
"Small" => size.small
"Normal" => size.normal
"Large" => size.large
=> size.small
renderSessionRange(bool isEnabled, string sessionPattern, color sessionColor, string sessionLabel) =>
var box rangeBox = na
var label rangeLabel = na
var float highPrice = na
var float lowPrice = na
bool inSessionNow = not na(time(timeframe.period, sessionPattern))
bool sessionStarted = inSessionNow and not inSessionNow[1]
if isEnabled and inSessionNow
if sessionStarted
highPrice := high
lowPrice := low
rangeBox := box.new(bar_index, highPrice, bar_index, lowPrice, border_color = sessionColor, border_style = line.style_dotted, bgcolor = color.new(sessionColor, 94))
rangeLabel := label.new(bar_index, highPrice, sessionLabel, style = label.style_none, textcolor = sessionColor, size = size.small, textalign = text.align_center)
else
highPrice := math.max(highPrice, high)
lowPrice := math.min(lowPrice, low)
rangeBox.set_top(highPrice)
rangeBox.set_bottom(lowPrice)
rangeBox.set_right(bar_index)
rangeLabel.set_xy(math.round(math.avg(rangeBox.get_left(), bar_index)), highPrice)
float(na)
float prevWeeklyHigh = request.security(syminfo.tickerid, "W", high[1], lookahead = barmerge.lookahead_on)
float prevWeeklyLow = request.security(syminfo.tickerid, "W", low[1], lookahead = barmerge.lookahead_on)
var line weeklyHighLine = na
var line weeklyLowLine = na
var label weeklyHighLabel = na
var label weeklyLowLabel = na
if cfgShowWeekly
if na(weeklyHighLine)
weeklyHighLine := line.new(bar_index, prevWeeklyHigh, bar_index + 10, prevWeeklyHigh, color = cfgWhColor, width = 1, style = line.style_dashed)
weeklyLowLine := line.new(bar_index, prevWeeklyLow, bar_index + 10, prevWeeklyLow, color = cfgWlColor, width = 1, style = line.style_dashed)
weeklyHighLabel := label.new(bar_index + 12, prevWeeklyHigh, "PWH", color = color.new(cfgWhColor, 100), textcolor = cfgWhColor, style = label.style_none, size = size.small)
weeklyLowLabel := label.new(bar_index + 12, prevWeeklyLow, "PWL", color = color.new(cfgWlColor, 100), textcolor = cfgWlColor, style = label.style_none, size = size.small)
else
weeklyHighLine.set_xy1(bar_index - 50, prevWeeklyHigh)
weeklyHighLine.set_xy2(bar_index + 10, prevWeeklyHigh)
weeklyLowLine.set_xy1(bar_index - 50, prevWeeklyLow)
weeklyLowLine.set_xy2(bar_index + 10, prevWeeklyLow)
weeklyHighLabel.set_xy(bar_index + 12, prevWeeklyHigh)
weeklyLowLabel.set_xy(bar_index + 12, prevWeeklyLow)
float priceDiff = ta.change(close)
float meanDiff = ta.sma(priceDiff, 50)
float stdDevDiff = ta.stdev(priceDiff, 50)
float zScore = (priceDiff - meanDiff) / stdDevDiff
float volPercent = ta.percentrank(volume, 100)
float highPivot = ta.pivothigh(high, cfgPivotLength, cfgPivotLength)
float lowPivot = ta.pivotlow(low, cfgPivotLength, cfgPivotLength)
var float recentHighPivot = na
var float recentLowPivot = na
var int recentHighIndex = na
var int recentLowIndex = na
if not na(highPivot)
recentHighPivot := highPivot
recentHighIndex := bar_index - cfgPivotLength
if not na(lowPivot)
recentLowPivot := lowPivot
recentLowIndex := bar_index - cfgPivotLength
if cfgShowSessions
renderSessionRange(cfgLondonActive, cfgLondonTime, cfgLondonColor, "London")
renderSessionRange(cfgNYActive, cfgNYTime, cfgNYColor, "New York")
renderSessionRange(cfgTokyoActive, cfgTokyoTime, cfgTokyoColor, "Tokyo")
renderSessionRange(cfgSydneyActiveПоказано первые 50% кода (символов: 12039)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.