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

SMC SIGNALS

smc signals 1.pine
Вы автор или правообладатель?

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

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

О программе

SMC SIGNALS — индикатор для TradingView (Pine Script v6), предназначенный для анализа рыночной структуры и визуализации институциональных зон на графике цены. Индикатор определяет точки пробоя ключевых уровней (Break of Structure), рисует зоны блоков и отображает метки сигналов.

Встроенные средства технического анализа включают расчёт свинг-высоких и свинг-низких, Z-score импульса цены и ранжирование объёма. Для построения уровней используется получение данных с недельного таймфрейма. Все элементы отрисовки реализованы через графические объекты Pine Script (линии, ящики, метки).

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

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

НастройкаОписание
cfgShowDash Показывать панель аналитики — Включает или отключает панель аналитики на графике.
cfgDashPos Положение панели — Положение панели аналитики на графике.
cfgDashSize Размер панели — Размер текста и элементов панели аналитики.
cfgPivotLength Период свинг-уровней — Период поиска свинг-высоких и свинг-низких для определения структуры.
cfgBreakThreshold Порог импульса (Z-Score) — Пороговый уровень импульса (Z-Score), необходимый для подтверждения пробоя структуры.
cfgDisplayMode Режим отображения зон — Режим отображения зон: исторические или только активные.
cfgMaxBlocks Максимум зон блоков — Максимальное количество одновременно отображаемых зон блоков.
cfgKeepMitigated Отображение реализованных зон — Продлевает отображение зон после их реализации.
cfgFilterOverlap Фильтр перекрытия зон — Фильтрует перекрывающиеся зоны блоков, не допуская их наложения.
cfgShowSessions Выделять сессии — Включает или отключает выделение торговых сессий на графике.
cfgLondonActive Сессия Лондона — Включает или отключает выделение сессии Лондона.
cfgLondonTime Расписание Лондона — Временной диапазон сессии Лондона.
cfgLondonColor Цвет Лондона — Цвет выделения сессии Лондона.
cfgNYActive Сессия Нью-Йорка — Включает или отключает выделение сессии Нью-Йорка.
cfgNYTime Расписание Нью-Йорка — Временной диапазон сессии Нью-Йорка.
cfgNYColor Цвет Нью-Йорка — Цвет выделения сессии Нью-Йорка.
cfgTokyoActive Сессия Токио — Включает или отключает выделение сессии Токио.
cfgTokyoTime Расписание Токио — Временной диапазон сессии Токио.
cfgTokyoColor Цвет Токио — Цвет выделения сессии Токио.
cfgSydneyActive Сессия Сидней — Включает или отключает выделение сессии Сиднея.
cfgSydneyTime Расписание Сиднея — Временной диапазон сессии Сиднея.
cfgSydneyColor Цвет Сиднея — Цвет выделения сессии Сиднея.
cfgShowWeekly Показывать недельные уровни — Включает или отключает отображение предыдущих недельного максимума и минимума.
cfgWhColor Цель недельного максимума — Цвет линии предыдущего недельного максимума.
cfgWlColor Цель недельного минимума — Цвет линии предыдущего недельного минимума.
cfgShowSignals Показывать сигналы BUY/SELL — Включает или отключает отображение меток BUY и SELL на графике.
Получить полный код

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

indicator("SMC SIGNALS", "SMC Signals", 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, cfgSydneyTime, cfgSydneyColor, "Sydney")

bool bullishBreak = close > recentHighPivot and close[1] <= recentHighPivot and zScore > cfgBreakThreshold
bool bearishBreak = close < recentLowPivot 

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

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

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

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

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

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

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