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

Previous Session Range + Projected Candles + BOS/CHOCH Protected

indicator previous session range + projected candles + boschoch protected 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 v6. Он отображает на графике диапазон предыдущей торговой сессии в виде прямоугольника с пунктирной средней линией, а также строит проекционные свечи предыдущей и текущей сессий справа от последнего бара. Индикатор рассчитывает уровни рыночной структуры BOS и CHOCH на основе свинговых максимумов и минимумов, а также отображает защищённый уровень (Protected High/Low).

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

Индикатор формирует условия для оповещений TradingView: бычий и медвежий BOS/CHOCH, а также пробой защищённого минимума или максимума. В правом верхнем углу отображается информационная панель со ссылкой на Telegram-канал.

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

НастройкаОписание
sessionTZ Часовой пояс, в котором интерпретируется активная торговая сессия.
activeSession Задаёт активную дневную торговую сессию, в рамках которой ведётся расчёт диапазона и обновление свечей.
showPrevRangeBox Включает отображение прямоугольника диапазона предыдущей сессии.
boxColor Цвет заливки и границы прямоугольника диапазона предыдущей сессии.
boxTransp Степень прозрачности заливки прямоугольника диапазона (0 — непрозрачный, 100 — полностью прозрачный).
midColor Цвет пунктирной средней линии (50%) внутри прямоугольника диапазона.
showProjectedCandles Включает отображение проекционных свечей предыдущей и текущей сессий.
projOffset Смещение проекционных свечей вправо от последнего бара.
candleWidth Ширина тела проекционной свечи в барах.
candleGap Расстояние между проекционными свечами предыдущей и текущей сессий.
projBullColor Цвет тела бычьей проекционной свечи.
projBearColor Цвет тела медвежьей проекционной свечи.
wickColor Цвет фитиля проекционной свечи.
wickWidth Толщина линии фитиля проекционной свечи.
openLineColor Цвет горизонтальной линии, соединяющей цену открытия сессии с проекционной свечой.
openLineWidth Толщина линии открытия.
showProjectionLabels Включает отображение текстовых меток под проекционными свечами.
showMS Включает отображение линий рыночной структуры BOS/CHOCH.
swingLen Количество баров слева и справа для определения свингового максимума или минимума.
breakMinTicks Количество тиков, добавляемых к уровню свинга для подтверждения пробоя.
stateOnClose Определяет, подтверждается ли структура только на закрытии бара.
showMSLabels Включает отображение текстовых меток BOS/CHOCH на линиях структуры.
maxMS Максимальное количество одновременно отображаемых линий рыночной структуры.
useDisplacementBOS Включает требование смещения (displacement) для подтверждения BOS/CHOCH.
atrLen Количество баров для расчёта ATR, используемого в фильтре смещения.
dispAtrMult Минимальное отношение размера тела свечи к значению ATR для подтверждения смещения.
dispBodyPctMin Минимальная доля тела свечи от общего диапазона бара для подтверждения смещения.
showProtected Включает отображение защищённого уровня (Protected High/Low).
invalidateOnClose Определяет, инвалидируется ли защищённый уровень только при закрытии бара за его пределами.
bullStructColor Цвет линий и меток для бычьих сигналов BOS/CHOCH.
bearStructColor Цвет линий и меток для медвежьих сигналов BOS/CHOCH.
protectedBullColor Цвет линии и метки защищённого минимума.
protectedBearColor Цвет линии и метки защищённого максимума.
Получить полный код

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

indicator("Previous Session Range + Projected Candles + BOS/CHOCH Protected", overlay=true,
     max_boxes_count=150, max_lines_count=300, max_labels_count=300)

grpSession = "Session Source"
sessionTZ = input.string("America/New_York", "Session Timezone", group=grpSession)
activeSession = input.session("0100-1659", "Active Daily Session", group=grpSession)

grpRange = "Previous Session Range Box"
showPrevRangeBox = input.bool(true, "Show Previous Session Range Box", group=grpRange)
boxColor  = input.color(color.purple, "Range Box Color", group=grpRange)
boxTransp = input.int(85, "Box Transparency", minval=0, maxval=100, group=grpRange)
midColor  = input.color(color.white, "50% Midline Color", group=grpRange)

grpProj = "Projected Candles"
showProjectedCandles = input.bool(true, "Show Previous + Active Session Candles", group=grpProj)
projOffset = input.int(10, "Projection Offset", minval=2, maxval=100, group=grpProj)
candleWidth = input.int(4, "Projected Candle Width", minval=2, maxval=20, group=grpProj)
candleGap = input.int(7, "Gap Between Projected Candles", minval=3, maxval=50, group=grpProj)
projBullColor = input.color(color.new(color.green, 25), "Bull Candle Color", group=grpProj)
projBearColor = input.color(color.new(color.red, 25), "Bear Candle Color", group=grpProj)
wickColor = input.color(color.gray, "Wick Color", group=grpProj)
wickWidth = input.int(2, "Wick Width", minval=1, maxval=5, group=grpProj)
openLineColor = input.color(color.yellow, "Open Line Color", group=grpProj)
openLineWidth = input.int(2, "Open Line Width", minval=1, maxval=5, group=grpProj)
showProjectionLabels = input.bool(true, "Show Projection Labels", group=grpProj)

grpMS = "Market Structure BOS / CHOCH"
showMS = input.bool(true, "Show BOS / CHOCH", group=grpMS)
swingLen = input.int(5, "Swing Length", minval=2, maxval=50, group=grpMS)
breakMinTicks = input.int(0, "Break Buffer Ticks", minval=0, maxval=50, group=grpMS)
stateOnClose = input.bool(true, "Confirm Structure On Close", group=grpMS)
showMSLabels = input.bool(true, "Show BOS / CHOCH Labels", group=grpMS)
maxMS = input.int(50, "Max Structure Lines", minval=5, maxval=200, group=grpMS)

grpDisp = "Displacement Filter"
useDisplacementBOS = input.bool(false, "Require Displacement For BOS/CHOCH", group=grpDisp)
atrLen = input.int(14, "ATR Length", minval=1, maxval=100, group=grpDisp)
dispAtrMult = input.float(0.75, "Body ≥ ATR ×", minval=0.1, maxval=5.0, step=0.05, group=grpDisp)
dispBodyPctMin = input.float(0.50, "Min Body % Of Range", minval=0.05, maxval=1.0, step=0.05, group=grpDisp)

grpProt = "Protected High / Low"
showProtected = input.bool(true, "Show Protected Level", group=grpProt)
invalidateOnClose = input.bool(true, "Invalidate Protected Level On Close", group=grpProt)

grpColors = "Market Structure Colors"
bullStructColor = input.color(color.lime, "Bull BOS/CHOCH Color", group=grpColors)
bearStructColor = input.color(color.red, "Bear BOS/CHOCH Color", group=grpColors)
protectedBullColor = input.color(color.new(color.lime, 0), "Protected Low Color", group=grpColors)
protectedBearColor = input.color(color.new(color.red, 0), "Protected High Color", group=grpColors)

inSession = not na(time(timeframe.period, activeSession, sessionTZ))
newSession = inSession and not inSession[1]

var float[] sO = array.new_float()
var float[] sH = array.new_float()
var float[] sL = array.new_float()
var float[] sC = array.new_float()
var int[]   sStart = array.new_int()

f_update_session_candle() =>
    if newSession or barstate.isfirst
        array.unshift(sO, open)
        array.unshift(sH, high)
        array.unshift(sL, low)
        array.unshift(sC, close)
        array.unshift(sStart, bar_index)

        if array.size(sO) > 5
            array.pop(sO)
            array.pop(sH)
            array.pop(sL)
            array.pop(sC)
            array.pop(sStart)

    else if inSession and array.size(sO) > 0
        array.set(sH, 0, math.max(array.get(sH, 0), high))
        array.set(sL, 0, math.min(array.get(sL, 0), low))
        array.set(sC, 0, close)

    0

f_update_session_candle()

hasActive = array.size(sO) > 0
hasPrev   = array.size(sO) > 1

activeO = hasActive ? array.get(sO, 0) : na
activeH = hasActive ? array.get(sH, 0) : na
activeL = hasActive ? array.get(sL, 0) : na
activeC = hasActive ? array.get(sC, 0) : na
activeStart = hasActive ? array.get(sStart, 0) : na

prevO = hasPrev ? array.get(sO, 1) : na
prevH = hasPrev ? array.get(sH, 1) : na
prevL = hasPrev ? array.get(sL, 1) : na
prevC = hasPrev ? array.get(sC, 1) : na
prevStart = hasPrev ? array.get(sStart, 1) : na

prevMid = hasPrev ? (prevH + prevL) / 2.0 : na
prevRange = hasPrev ? prevH - prevL : na
validPrev = hasPrev and not na(prevRange) and prevRange > 0

var box rangeBox = na
var line midLine = na

if showPrevRangeBox and validPrev and inSession
    if newSession or na(rangeBox)
        if not na(rangeBox)
            box.delete(rangeBox)
        if not na(midLine)
            line.delete(midLine)

        rangeBox := box.new(
             left=activeStart,
             top=prevH,
             right=bar_index,
             bottom=prevL,
             bgcolor=color.new(boxColor, boxTransp),
             border_color=color.new(boxColor, 20))

        midLine := line.new(
             x1=activeStart,
             y1=prevMid,
             x2=bar_index,
             y2=prevMid,
             color=midColor,
             style=line.style_dashed,
             width=1)
    else
        box.set_left(rangeBox, activeStart)
        box.set_right(rangeBox, bar_index)
        box.set_top(rangeBox, prevH)
        box.set_bottom(rangeBox, prevL)

        line.set_x1(midLine, activeStart)
        line.set_x2(midLine, bar_index)
        line.set_y1(midLine, prevMid)
        line.set_y2(midLine, prevMid)
else
    if not showPrevRangeBox
        if not na(rangeBox)
            box.delete(rangeBox)
            rangeBox := na
        if not na(midLine)
            line.delete(midLine)
            midLine := na

var box[] projBodies = array.new_box()
var line[] projWicks = array.new_line()
var line[] projOpens = array.new_line()
var label[] projLabels = array.new_label()

f_clear_projection() =>
    for bx in projBodies
        box.delete(bx)
    for ln in projWicks
        line.delete(ln)
    for ln in projOpens
        line.delete(ln)
    for lb in projLabels
        label.delete(lb)

    array.clear(projBodies)
    array.clear(projWicks)
    array.clear(projOpens)
    array.clear(projLabels)

f_draw_projected_candle(float o, float h, float l, float c, int startBar, int x1, string txt) =>
    int x2 = x1 + candleWidth
    int xm = math.round((x1 + x2) / 2)

    color baseColor = c >= o ? projBullColor : projBearColor

    box bodyBox = box.new(
         left=x1,
         top=math.max(o, c),
         right=x2,
         bottom=math.min(o, c),
         bgcolor=baseColor,
         border_color=color.new(baseColor, 0))

    line wick = line.new(
         x1=xm,
         y1=h,
         x2=xm,
         y2=l,
         color=wickColor,
         width=wickWidth)

    int safeStart = math.max(startBar, bar_index - 299)

    line openLine = line.new(
         x1=safeStart,
         y1=o,
         x2=x1,
         y2=o,
         color=openLineColor,
        

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

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

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

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

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

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

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