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

Power Order Blocks

indicator power order blocks for tradingview.pine
Вы автор или правообладатель?

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

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

О программе

«Power Order Blocks» — это индикатор для TradingView, который отображает на графике зоны бычьих и медвежьих Order Blocks. Индикатор фиксирует формирование таких зон при определённом соотношении импульсных свечей и отрисовывает их цветными прямоугольниками с информационными подписями.

Для каждой зоны отображается уровень мощности и количество касаний цены. Внутри зон доступна линия равновесия. При повторном касании активной зоны индикатор показывает метки-стрелки и создаёт условия для оповещений TradingView.

Настройки включают множитель смещения для подтверждения зон, цветовые схемы для бычьих и медвежьих объектов, а также переключатели отображения линии равновесия, интенсивности мощности и меток касаний.

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

НастройкаОписание
dispThresh Множитель смещения — Множитель смещения, определяющий минимальный размер импульсной свечи относительно предыдущей для подтверждения Order Block.
bullColor Цвет бычьего OB — Цвет заливки бычьих Order Block зон на графике.
bearColor Цвет медвежьего OB — Цвет заливки медвежьих Order Block зон на графике.
textColor Цвет текста — Цвет текста в информационных подписях Order Block зон.
showEqLine Показать линию равновесия — Отображает или скрывает пунктирную линию равновесия внутри каждой Order Block зоны.
powerFade Интенсивность мощности — При включении интенсивность заливки зон зависит от уровня мощности: более мощные зоны отображаются насыщеннее, менее мощные — прозрачнее.
showRetests Показать метки касаний — Отображает метки-стрелки при повторном касании цены активных Order Block зон.
Получить полный код

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

indicator("Power Order Blocks", overlay=true, max_boxes_count=500, max_labels_count=500, max_lines_count=500)

grp1 = "Order Block Settings"
maxBlocks   = 10
dispThresh  = input.float(0.5, title="Displacement Multiplier", step=0.1, group=grp1, tooltip="How much larger the engulfing candle must be to validate an OB.")
strLookback = 100

grp2 = "Styling"
bullColor   = input.color(#1bd37a, title="Bullish OB Color",  group=grp2)
bearColor   = input.color(#bc14e6, title="Bearish OB Color",  group=grp2)
borderColor = color.new(#ffffff, 100)
textColor   = input.color(color.new(#ffffff, 0),  title="Text Color",   group=grp2)
showEqLine  = input.bool(true, title="Show Equilibrium Line", group=grp2, tooltip="Draws a dashed midpoint line inside each Order Block.")
powerFade   = input.bool(true, title="Power Intensity",       group=grp2, tooltip="Higher power OBs appear more vivid; weaker OBs are more transparent.")

grp3 = "Signals"
showRetests = input.bool(true, title="Show Retest Labels", group=grp3, tooltip="Plots an arrow label when price taps into an active Order Block.")

type OBBlock
    box   bx
    box   infoBox
    line  eqLine
    int   touches
    int   birthBar
    float obTop
    float obBtm
    float powerPct

var OBBlock[] bullBlocks = array.new<OBBlock>()
var OBBlock[] bearBlocks = array.new<OBBlock>()

var int lastBullRetestBar = na
var int lastBearRetestBar = na

bool isBearishCandle = close[1] < open[1]
bool isBullishDisp   = close > open and close > high[1] and (close - open) > (high[1] - low[1]) * dispThresh
bool bullOB          = isBearishCandle and isBullishDisp

bool isBullishCandle = close[1] > open[1]
bool isBearishDisp   = close < open and close < low[1] and (open - close) > (high[1] - low[1]) * dispThresh
bool bearOB          = isBullishCandle and isBearishDisp

float maxCandleSize = ta.highest(high - low, strLookback)
float atr           = ta.atr(14) * 0.2

calcPowerTransp(float powerPct) =>
    int transp = math.round(92 - (powerPct / 100.0) * 32)
    transp

buildLabel(int touches, float pct) =>
    "Power: " + str.tostring(math.round(pct)) + "%  |  Touches: " + str.tostring(touches)

bool bullRetestRaw = false
bool bearRetestRaw = false

int bullSize = array.size(bullBlocks)
if bullSize > 0
    for i = bullSize - 1 to 0
        OBBlock ob  = array.get(bullBlocks, i)
        float   btm = ob.obBtm
        float   top = ob.obTop

        if close < btm
            box.delete(ob.bx)
            box.delete(ob.infoBox)
            if not na(ob.eqLine)
                line.delete(ob.eqLine)
            array.remove(bullBlocks, i)
        else
            int transp = powerFade ? calcPowerTransp(ob.powerPct) : 80
            box.set_bgcolor(ob.bx, color.new(bullColor, transp))
            box.set_right(ob.bx, bar_index + 25)

            box.set_left(ob.infoBox,   bar_index)
            box.set_right(ob.infoBox,  bar_index + 25)
            box.set_top(ob.infoBox,    top)
            box.set_bottom(ob.infoBox, btm)

            if showEqLine and not na(ob.eqLine)
                line.set_x2(ob.eqLine, bar_index)

            if low[1] <= top and low >= top and bar_index > box.get_left(ob.bx)
                bullRetestRaw := true
                ob.touches    += 1
                float pct      = maxCandleSize > 0 ? ((top - btm) / maxCandleSize) * 100 : 0
                box.set_text(ob.infoBox, "Bullish OB\n" + buildLabel(ob.touches, pct))

int bearSize = array.size(bearBlocks)
if bearSize > 0
    for i = bearSize - 1 to 0
        OBBlock ob  = array.get(bearBlocks, i)
        float   top = ob.obTop
        float   btm = ob.obBtm

        if close > top
            box.delete(ob.bx)
            box.delete(ob.infoBox)
            if not na(ob.eqLine)
                line.delete(ob.eqLine)
            array.remove(bearBlocks, i)
        else
            int transp = powerFade ? calcPowerTransp(ob.powerPct) : 80
            box.set_bgcolor(ob.bx, color.new(bearColor, transp))
            box.set_right(ob.bx, bar_index + 25)

            box.set_left(ob.infoBox,   bar_index)
            box.set_right(ob.infoBox,  bar_index + 25)
            box.set_top(ob.infoBox,    top)
            box.set_bottom(ob.infoBox, btm)

            if showEqLine and not na(ob.eqLine)
                line.set_x2(ob.eqLine, bar_index)

            if high[1] >= btm and high <= btm and bar_index > box.get_left(ob.bx)
                bearRetestRaw := true
                ob.touches    += 1
                float pct      = maxCandleSize > 0 ? ((top - btm) / maxCandleSize) * 100 : 0
                box.set_text(ob.infoBox, "Bearish OB\n" + buildLabel(ob.touches, pct))

bool bullRetest = bullRetestRaw and (na(lastBullRetestBar) or bar_index - lastBullRetestBar >= 10)
bool bearRetest = bearRetestRaw and (na(lastBearRetestBar) or bar_index - lastBearRetestBar >= 10)

if bullRetest
    lastBullRetestBar := bar_index
if bearRetest
    lastBearRetestBar := bar_index

if bullOB
    float  obTop  = high[1]
    float  obBtm  = low[1]
  

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

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

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

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

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

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

Стоимость полного кода
701,80₽ ≈ $8.58