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

WAE 1H Zones + WAE 5m Signals + SMC HTF v2

wae_smc_htf_v2.pine

Похожие материалы по тегам

#dtosc 2.06 + bells&whistles nmc.mq5MQL5 / MetaTrader 5 · 2 общих тегов!!!-mt4 x-xardg-rsi.mq5MQL5 / MetaTrader 5 · 2 общих тегов!!! rsi ma simple+arrows 1.2 (mtf).mq5MQL5 / MetaTrader 5 · 2 общих теговea robofibo source v.11.2.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedingvonepointoneone.mq4MQL4 / MetaTrader 4 · 2 общих теговsureforexhedging 1.10 optimized.mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор «WAE 1H Zones + WAE 5m Signals + SMC HTF v2» — это многоуровневый инструмент анализа для TradingView, объединяющий расчёт зон WAE (мomentum-состояние рынка) с методами Smart Money Concepts на старших таймфреймах. Он отображает зоны спроса и предложения, определяет события BOS, CHoCH, ликвидностных свипов и рисует соответствующие линии и метки на графике.

Индикатор получает данные с нескольких таймфреймов одновременно: зоны WAE — с часового фрейма, структурные события и зоны (Order Block, FVG, Breaker) — с фрейма событий, общий тренд — с фрейма Bias. Сигналы CALL и PUT формируются на фрейме входа (по умолчанию 5 минут) и отображаются в виде меток под/над свечами. Встроенная информационная панель показывает текущее состояние тренда, структуры, WAE-зоны, триггера, волн Эллиотта и RSI.

Для фильтрации сигналов предусмотрены дополнительные настройки: режим RSI с уровнями насыщения, упрощённый анализ волн Эллиотта через ZigZag, логические переключатели для каждого типа событий и триггеров, а также параметры отображения зон и глубины их поиска. Все условия проверяются только на закрытых свечах, что обеспечивает отсутствие перерисовки сигнальных меток.

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

НастройкаОписание
htf Указывает таймфрейм, с которого берётся состояние WAE-зон (зелёная/красная/нейтральная). По умолчанию 1-часовой фрейм.
zoneMode Определяет метод расчёта состояния WAE-зон: «Direct» — текущее состояние на часском фрейме, «Closed Hour» — состояние последнего закрытого часского бара.
etf Указывает таймфрейм входа, на котором формируются и отображаются сигналы CALL/PUT. По умолчанию 5-минутный фрейм.
sensitivity Задаёт множитель чувствительности для расчёта momentum-компонента WAE. Влияет на порог срабатывания зелёной/красной зоны.
fastLength Задаёт период быстрой экспоненциальной скользящей средней (EMA), используемой в расчёте WAE.
slowLength Задаёт период медленной экспоненциальной скользящей средней (EMA), используемой в расчёте WAE.
channelLength Задаёт период расчёта канала для индикатора Боллинджера, используемого в алгоритме WAE для оценки волатильности.
mult Задаёт множитель стандартного отклонения для расчёта верхней и нижней полосы Боллинджера, используемой в алгоритме WAE.
greenColor Определяет цвет заливки фона графика для отображения зелёной (бычьей) WAE-зоны.
redColor Определяет цвет заливки фона графика для отображения красной (медвежьей) WAE-зоны.
biasTF Указывает таймфрейм, с которого берётся данные для определения общего направления тренда (Bias). По умолчанию 4-часовой фрейм.
biasLen Задаёт длину свинга (количество баров) для определения пивотов на фрейме общего тренда (Bias). Используется для расчёта направления старшего тренда.
trigTF Указывает таймфрейм, с которого берутся данные о структурных событиях (BOS, CHoCH, Sweep) и зонах. По умолчанию 1-часовой фрейм.
trigLen Задаёт длину свинга (количество баров) для определения пивотов на фрейме событий (BOS, CHoCH, Sweep, зоны).
showStruct При включении рисует линии и метки BOS (Break of Structure), CHoCH (Change of Character) и события ликвидностного свипа на графике.
showLvls При включении отображает линии последнего максимума и минимума на фрейме событий как уровни ликвидности.
showDash При включении отображает информационную панель в правом верхнем углу графика с данными о тренде, структуре, WAE, триггере, волнах Эллиотта и RSI.
useBias При включении торговые сигналы формируются только в направлении общего тренда, определённого на фрейме Bias.
reqTrigger При включении требует наличия события ликвидности или структуры (триггера) перед формированием торгового сигнала CALL/PUT.
useSweep При включении событие ликвидностного свипа (Sweep) учитывается как триггер для формирования сигнала.
useChoch При включении событие CHoCH (изменение характера) учитывается как триггер для формирования сигнала.
useBos При включении событие BOS (прорыв структуры) учитывается как триггер для формирования сигнала (трендовое продолжение).
armBars Определяет количество свечей, в течение которых сработанный триггер остаётся действительным. После истечения этого периода триггер деактивируется до следующего события.
showOB При включении отображает зоны Order Block (OB) на графике.
showBB При включении отображает зоны Breaker Block (бывшие Order Block, которые не выдержали и развернулись) на графике.
showFVG При включении отображает зоны Fair Value Gap (FVG) на графике.
fvgMin Задаёт минимальный размер Fair Value Gap (FVG) в кратных единицах ATR. FVG меньшего размера не создаются как зоны.
obBack Определяет максимальную глубину поиска в свечах фрейма событий для определения Order Block при бычьем или медвежьем пробое.
maxZones Задаёт максимальное количество зон (Order Block, FVG, Breaker), одновременно отображаемых на графике. При превышении старейшие зоны удаляются.
zoneReqWae При включении зональный сигнал (попадание в зону OB/FVG/BB) требует дополнительного подтверждения — зелёное или красное состояние WAE-зоны.
rsiMode Определяет режим фильтрации по RSI: отключён, предотвращение противоположного насыщения или требование насыщения в пользу сделки.
rsiTF Указывает таймфрейм для расчёта значения RSI. Если пусто, используется таймфрейм графика.
rsiLen Задаёт период расчёта индекса относительной силы (RSI), используемого в качестве фильтра для сигналов.
rsiOB Указывает уровень RSI, выше которого считается покупательское насыщение (перекупленность).
rsiOS Указывает уровень RSI, ниже которого считается продажное насыщение (перепроданность).
ewMode Определяет режим фильтрации по волнам Эллиотта: отключён, предотвращение разворота или требование подтверждения направления.
ewTF Указывает таймфрейм, с которого берутся данные для упрощённого анализа волн Эллиотта. По умолчанию 1-часовой фрейм.
ewLen Задаёт длину свинга (количество баров) для определения пивотов при упрощённом анализе волн Эллиотта через ZigZag.
Получить полный код

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

indicator("WAE 1H Zones + WAE 5m Signals + SMC HTF v2", overlay=true, max_labels_count=500, max_lines_count=500, max_boxes_count=200)

htf      = input.timeframe("60", "Zone Frame (60 = Hour)")
zoneMode = input.string("Direct (like the Hour chart)", "Zone Method",
     options=["Direct (like the Hour chart)", "Closed Hour (fixed)"])
etf      = input.timeframe("5", "Entry Frame (5 = Five minutes)")

sensitivity   = input.int(150,   "Sensitivity")
fastLength    = input.int(20,    "FastEMA Length")
slowLength    = input.int(40,    "SlowEMA Length")
channelLength = input.int(20,    "BB Channel Length")
mult          = input.float(2.0, "BB Stdev Multiplier")

greenColor = input.color(color.new(color.green, 75), "Green zone color")
redColor   = input.color(color.new(color.red,   75), "Red zone color")

grpS      = "SMC - Market Structure"
biasTF    = input.timeframe("240", "Overall Trend Frame (Bias)", group=grpS)
biasLen   = input.int(5, "Swing Length - Trend Frame", minval=2, group=grpS)
trigTF    = input.timeframe("60",  "Events Frame (BOS / CHoCH / Sweep / Zones)", group=grpS)
trigLen   = input.int(5, "Swing Length - Events Frame", minval=2, group=grpS)
showStruct = input.bool(true,  "Draw BOS / CHoCH (lines + labels) and Sweep", group=grpS)
showLvls   = input.bool(true,  "Show last high/low on Events Frame", group=grpS)
showDash   = input.bool(true,  "Show Info Panel", group=grpS)

grpT      = "SMC - Trade Conditions"
useBias    = input.bool(true,  "Trade only in the direction of the larger frame (Bias)", group=grpT)
reqTrigger = input.bool(true,  "Require liquidity/structure event before entry (WAE trades)", group=grpT)
useSweep   = input.bool(true,  "Treat liquidity sweep (Sweep) as a trigger", group=grpT)
useChoch   = input.bool(true,  "Treat CHoCH/MSS as a trigger", group=grpT)
useBos     = input.bool(true,  "Treat BOS as a trigger (trend continuation)", group=grpT)
armBars    = input.int(60, "Trigger validity period (number of chart candles)", minval=1, group=grpT)

grpZ      = "SMC - OB / Breaker / FVG Zones"
showOB     = input.bool(true, "Order Block", group=grpZ)
showBB     = input.bool(true, "Breaker Block (OB failed and reversed)", group=grpZ)
showFVG    = input.bool(true, "FVG", group=grpZ)
fvgMin     = input.float(0.1, "Minimum FVG size (x ATR)", minval=0.0, step=0.05, group=grpZ)
obBack     = input.int(40, "Maximum OB search depth (frame candles)", minval=5, group=grpZ)
maxZones   = input.int(30, "Maximum number of zones on the chart", minval=5, maxval=80, group=grpZ)
zoneReqWae = input.bool(false, "Zone signal requires WAE zone confirmation", group=grpZ)

grpF      = "RSI / Elliott Filters"
rsiMode = input.string("Prevent opposite saturation", "RSI Mode",
     options=["Disabled", "Prevent opposite saturation", "Require saturation in favor of the trade"], group=grpF)
rsiTF   = input.timeframe("", "RSI Frame (empty = chart frame)", group=grpF)
rsiLen  = input.int(14, "RSI Length", minval=2, group=grpF)
rsiOB   = input.int(70, "RSI Buy Saturation", group=grpF)
rsiOS   = input.int(30, "RSI Sell Saturation", group=grpF)
ewMode  = input.string("Prevent reversal", "Elliott Mode",
     options=["Disabled", "Prevent reversal", "Requires confirmation"], group=grpF)
ewTF    = input.timeframe("60", "Elliott Frame", group=grpF)
ewLen   = input.int(5, "Swing Length - Elliott", minval=2, group=grpF)

waeState(int off) =>
    deadZone  = nz(ta.rma(ta.tr(true), 100)) * 3.7
    macdNow   = ta.ema(close, fastLength) - ta.ema(close, slowLength)
    t1        = (macdNow - macdNow[1]) * sensitivity
    e1        = 2 * mult * ta.stdev(close, channelLength)
    trendUp   = t1 >= 0 ? t1 : 0
    trendDown = t1 < 0 ? -t1 : 0
    s = trendUp > e1 and trendUp > deadZone ? 1 : trendDown > e1 and trendDown > deadZone ? -1 : 0
    s[off]

liveState = request.security(syminfo.tickerid, htf, waeState(0), lookahead=barmerge.lookahead_on)
confState = request.security(syminfo.tickerid, htf, waeState(1), lookahead=barmerge.lookahead_on)
state     = zoneMode == "Direct (like the Hour chart)" ? liveState : confState

isGreen = state == 1
isRed   = state == -1

bgcolor(isGreen ? greenColor : isRed ? redColor : na)

chartSec = timeframe.in_seconds()
etfSec   = timeframe.in_seconds(etf)

chartState = waeState(0)

etfClosed  = request.security(syminfo.tickerid, etf, waeState(1), lookahead=barmerge.lookahead_on)

entryState = chartSec == etfSec ? chartState : etfClosed

sigTF = chartSec <= etfSec and chartSec < timeframe.in_seconds(htf)

callCond = isGreen and entryState == 1
putCond  = isRed   and entryState == -1

callSig = sigTF and callCond and not callCond[1] and barstate.isconfirmed
putSig  = sigTF and putCond  and not putCond[1]  and barstate.isconfirmed

plotshape(callSig, "CALL", shape.labelup,   location.belowbar, color.green, text="CALL", textcolor=color.white, size=size.small)
plotshape(putSig,  "PUT",  shape.labeldown, location.abovebar, color.red,   text="PUT",  textcolor=color.white, size=size.small)

alertcondition(callSig, "CALL", "WAE: CALL Signal")
alertcondition(putSig,  "PUT",  "WAE: PUT Signal")

biasFn(int len, int off) =>
    ph = ta.pivothigh(high, len, len)
    pl = ta.pivotlow(low,  len, len)
    var float lastH   = na
    var float lastL   = na
    var int   trend   = 0
    var bool  hBroken = false
    var bool  lBroken = false
    if not na(ph)
        lastH   := ph
        hBroken := false
    if not na(pl)
        lastL   := pl
        lBroken := false
    if not na(lastH) and not hBroken and close > lastH
        trend   := 1
        hBroken := true
    if not na(lastL) and not lBroken and close < lastL
        trend   := -1
        lBroken := true
    trend[off]

structFn(int len, int off, float fvgMinMult, int obMaxBack) =>
    ph   = ta.pivothigh(high, len, len)
    pl   = ta.pivotlow(low,  len, len)
    atrv = ta.atr(14)
    var float lastH   = na
    var float lastL   = na
    var int   lastHT  = na
    var int   lastLT  = na
    var int   lastHBI = na
    var int   lastLBI = na
    var int   trend   = 0
    var bool  hBroken = false
    var bool  lBroken = false
    var float obBuHi = na
    var float obBuLo = na
    var int   obBuT  = na
    var int   obBuN  = 0
    var float obBeHi = na
    var float obBeLo = na
    var int   obBeT  = na
    var int   obBeN  = 0
    var float fvBuHi = na
    var float fvBuLo = na
    var int   fvBuT  = na
    var int   fvBuN  = 0
    var float fvBeHi = na
    var float fvBeLo = na
    var int   fvBeT  = na
    var int   fvBeN  = 0

    if not na(ph)
        lastH   := ph
        lastHT  := time[len]
        lastHBI := bar_index - len
        hBroken := false
    if not na(pl)
        lastL   := pl
        lastLT  := time[len]
        lastLBI := bar_index - len
        lBroken := false

    bool bosUp = false
    bool bosDn = false
    bool chUp  = false
    bool chDn  = false

    bool sweepH = not na(lastH) and not hBroken and high > lastH and close <= lastH
    bool sweepL = not na(lastL) and not lBroken and low  < lastL and close >= lastL

    if not na(lastH) and not hBroken and close > lastH
        if trend == -1
            chUp := true
        else
            bosUp := true
        trend   := 1
        hBroken := true
        int lb  = na(lastLBI) ? obMaxBack : math.max(1, math.min(bar_index - lastLBI, obMaxBack))
        int idx = 0
        float mn = low
        for i = 1 to lb
            if low[i] < mn
                mn  := low[i]
                idx := i
        obBuHi := high[idx]
        obBuLo := low[idx]
        obBuT  := time[idx]
        obBuN  += 1

    if not na(lastL) and not lBroken and close < lastL
        if trend == 1
            chDn := true
        else
            bosDn := true
        trend   := -1
        lBroken := true
        int lb2  = na(lastHBI) ? obMaxBack : math.max(1, math.min(bar_index - lastHBI, obMaxBack))
        int idx2 = 0
        float mx = high
        for j = 1 to lb2
            if high[j] > mx
                mx   := high[j]
                idx2 := j
        obBeHi := high[idx2]
        obBeLo := low[idx2]
        obBeT  := time[idx2]
        obBeN  += 1

    if low > high[2] and (low - high[2]) > atrv * fvgMinMult
        fvBuHi := low
        fvBuLo := high[2]
        fvBuT  := time[2]
        fvBuN  += 1
    if high < low[2] and (low[2] - high) > atrv * fvgMinMult
        fvBeHi := low[2]
        fvBeLo := high
        fvBeT  := time[2]
        fvBeN  += 1

    [trend[off], bosUp[off], bosDn[off], chUp[off], chDn[off], sweepH[off], sweepL[off], lastH[off], lastL[off], lastHT[off], lastLT[off], obBuHi[off], obBuLo[off], obBuT[off], obBuN[off], obBeHi[off], obBeLo[off], obBeT[off], obBeN[off], fvBuHi[off], fvBuLo[off], fvBuT[off], fvBuN[off], fvBeHi[off], fvBeLo[off], fvBeT[off], fvBeN[off]]

bullImp6(float p0, float p1, float p2, float p3, float p4, float p5) =>
    p1 > p0 and p2 > p0 and p2 < p1 and p3 > p1 and p3 > p2 and p4 > p1 and p4 < p3 and p5 > p3 and p5 > p4 and (p3 - p2) >= math.min(p1 - p0, p5 - p4)

bullImp5(float p0, float p1, float p2, float p3, float p4) =>
    p1 > p0 and p2 > p0 and p2 < p1 and p3 > p1 and p3 > p2 and p4 > p1 and p4 < p3 and (p3 - p2) >= (p1 - p0)

bullImp4(float p0, float p1, float p2, float p3) =>
    p1 > p0 and p2 > p0 and p2 < p1 and p3 > p1 and (p3 - p2) >= (p1 - p0)

ewFn(int len, int off) =>
    ph = ta.pivothigh(high, len, len)
    pl = ta.pivotlow(low,  len, len)
    var array<float> pp = array.new_float()
    var array<int>   pt = array.new_int()
    var int ewDir  = 0
    var int ewCode = 0
    int   typ = 0
    float prc = na
    if not na(ph) and na(pl)
        typ := 1
        prc := ph
    else if not na(pl) and na(ph)
        typ := -1
        prc := pl
    if typ != 0
        int n0 = array.size(pt)
        bool sameType = false
        if n0 > 0
            sameType := array.get(pt, n0 - 1) == typ
        if sameType
            float lastP = array.get(pp, n0 - 1)
            if (typ == 1 and prc > lastP) or (typ == -1 and prc < lastP)
                array.set(pp, n0 - 1, prc)
        else
            array.push(pp, prc)
            array.push(pt, typ)
            if array.size(pp) > 8
                array.shift(pp)
                array.shift(pt)
        int n = array.size(pp)
        float w5 = na
        float w4 = na
        float w3 = na
        float w2 = na
        float w1 = na
        float w0 = na
        int typ6 = 0
        int typ5 = 0
        int typ4 = 0
        if n >= 1
            w5 := array.get(pp, n - 1)
        if n >= 2
            w4 := array.get(pp, n - 2)
        if n >= 3
            w3 := array.get(pp, n - 3)
        if n >= 4
            w2   := array.get(pp, n - 4)
            typ4 := array.get(pt, n - 4)
        if n >= 5
            w1   := array.get(pp, n - 5)
            typ5 := array.get(pt, n - 5)
        if n >= 6
            w0   := array.get(pp, n - 6)
            typ6 := array.get(pt, n - 6)
        int code = 0
        if typ6 == -1 and bullImp6(w0, w1, w2, w3, w4, w5)
            code := 6
        else if typ6 == 1 and bullImp6(-w0, -w1, -w2, -w3, -w4, -w5)
            code := -6
        if code == 0
            if typ5 == -1 and bullImp5(w1, w2, w3, w4, w5)
                code := 5
            else if typ5 == 1 and bullImp5(-w1, -w2, -w3, -w4, -w5)
                code := -5
        if code == 0
            if typ4 == -1 and bullImp4(w2, w3, w4, w5)
                code := 4
            else if typ4 == 1 and bullImp4(-w2, -w3, -w4, -w5)
                code := -4
        ewCo

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

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

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

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

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

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

Стоимость полного кода
1 686,90₽ ≈ $20.90