Previous Session Range + Projected Candles + BOS/CHOCH Protected
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator previous session range + projected candles + boschoch protected for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Это индикатор для 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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.