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

AetherEdge - STRUCTURA Adaptive Price-Action Intelligence

indicator_aetheredge_structura_adaptive_price_action_intelligence.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 общих тегов
Вы автор или правообладатель?

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

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

О программе

AetherEdge — STRUCTURA Adaptive Price-Action Intelligence — индикатор анализа рыночной структуры для TradingView, написанный на Pine Script v6. Определяет подтверждённые точки свинга (swing highs/lows) и на их основе строит структуру рынка: сигналы BOS (Break of Structure) и CHoCH (Change of Character), отображаемые в виде горизонтальных линий и меток на графике.

Индикатор визуализирует ордер-блоки и зоны справедливой стоимости (Fair Value Gaps) в виде прямоугольников, окрашивает свечи по направлению структуры и предоставляет информационную панель HUD с текущим трендом, счётчиками сигналов и статистикой адаптивного слоя. Все структурные сигналы доступны для настройки оповещений TradingView.

Включён адаптивный ИИ-слой: онлайн-оценка надёжности типов зон на основе их исторической эффективности и вероятностная оценка каждого сигнала CHoCH с помощью онлайн-логистической регрессии. Пользовательские параметры позволяют настраивать длину свинга, визуальное оформление, параметры ордер-блоков и FVG, а также поведение AI-модели.

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

НастройкаОписание
ms_swingLenInp Swing Length — Количество баров на каждой стороне пивота для подтверждения точки разворота. Большее значение — только значимые структурные уровни, меньшее — более частые, но шумные сигналы.
ms_showBOSInp Show BOS — Включает отображение сигналов Break of Structure — продолжение тренда при пробое последнего свинга в направлении тренда.
ms_showCHoCHInp Show CHoCH — Включает отображение сигналов Change of Character — контртрендовый пробой, сигнализирующий о возможном изменении характера движения.
ms_showSwingInp Show Swing Points (HH/HL/LH/LL) — Отображает метки подтверждённых точек свинга: HH, HL, LH, LL.
ms_colorBarsInp Color Candles by Structure — Окрашивает свечи в цвета бычьего или медвежьего тренда в зависимости от текущего состояния структуры.
ai_zoneScoreInp Adaptive Zone Reliability — Включает онлайн-обучение надёжности типов зон (бычьи/медвежьи OB и FVG) на основе их исторической эффективности.
ai_zoneRateInp Zone Learning Rate — Скорость адаптации оценки надёжности зон к новым данным. Выше — быстрее реакция на текущий режим.
ai_chochProbInp CHoCH Confidence (Logistic Regression) — Присваивает каждому сигналу CHoCH вероятностную оценку удержания характера изменения на основе онлайн-обученной модели.
ai_lrRateInp CHoCH Model Learning Rate — Скорость обучения модели логистической регрессии для оценки CHoCH.
ai_lrHorizonInp CHoCH Outcome Horizon (bars) — Количество баров вперёд, используемых для оценки того, удержался ли сигнал CHoCH.
ai_dimInput Dim Low-Confidence CHoCH — Затемняет сигналы CHoCH с низкой вероятностной оценкой для визуального акцента на более надёжных.
ob_showInput Show Order Blocks — Включает отображение ордер-блоков — зон последней противоположной свечи перед пробоем структуры.
ob_maxInput Max Order Blocks Shown — Максимальное количество немитигированных ордер-блоков, отображаемых на графике.
ob_mitigInput Mitigation Method — Метод определения митигации зоны: по касанию тени или по закрытию свечи через зону.
ob_showVolInp Show Volume in Order Blocks — Отображает объём сделок внутри ордер-блоков на метках зон.
fvg_showInput Show Fair Value Gaps — Включает отображение зон справедливой стоимости (Fair Value Gaps) в виде прямоугольников.
fvg_maxInput Max FVGs Shown — Максимальное количество незаполненных FVG, отображаемых на графике.
fvg_threshInput Min Gap Size (ATR) — Минимальный размер разрыва в единицах ATR для фильтрации малых FVG.
fvg_extendInput FVG Extend (bars) — Горизонт вправо для продления незаполненной FVG-зоны.
vi_themeInput Palette — Выбор цветовой палитры для бычьих и медвежьих элементов индикатора.
vi_glowInput Neon Glow on Structure Lines — Добавляет свечение к структурным линиям для лучшей визуальной заметности.
vi_lineStyleInp Line Style — Стиль линий: сплошной для свингов, пунктирный для внутренних сигналов или оба одинаковые.
vi_labelSizeInp Label Size — Размер текстовых меток на графике.
hud_showInput Show HUD — Включает информационную панель с текущим состоянием структуры и статистикой.
hud_posInput Position — Позиция информационной панели на графике.
hud_sizeInput Text Size — Размер текста в информационной панели.
Получить полный код

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

indicator("AetherEdge - STRUCTURA Adaptive Price-Action Intelligence", "AE-SAPAI", overlay = true,
     max_lines_count = 500, max_labels_count = 500, max_boxes_count = 500)

gM = "▓ MARKET STRUCTURE ▓"
ms_swingLenInp = input.int(10, "Swing Length", minval = 2, maxval = 100, group = gM,
     tooltip = "Bars on each side of a swing pivot. Larger = only major structure; smaller = more granular, faster (but noisier).")
ms_showBOSInp  = input.bool(true, "Show BOS", group = gM,
     tooltip = "Break of Structure — trend continuation breaks.")
ms_showCHoCHInp= input.bool(true, "Show CHoCH", group = gM,
     tooltip = "Change of Character — counter-trend breaks signaling possible reversal.")
ms_showSwingInp= input.bool(true, "Show Swing Points (HH/HL/LH/LL)", group = gM)
ms_colorBarsInp= input.bool(false, "Color Candles by Structure", group = gM)

gAI = "▓ AI · ADAPTIVE INTELLIGENCE ▓"
ai_zoneScoreInp= input.bool(true, "Adaptive Zone Reliability", group = gAI,
     tooltip = "Learn online how often each zone TYPE (bull/bear OB & FVG) actually causes a reaction vs. gets broken, and emphasize reliable zone types visually.")
ai_zoneRateInp = input.float(0.08, "Zone Learning Rate", minval = 0.01, maxval = 0.5, step = 0.01, group = gAI,
     tooltip = "How fast zone reliability adapts to recent outcomes. Higher = tracks current regime faster.")
ai_chochProbInp= input.bool(true, "CHoCH Confidence (Logistic Regression)", group = gAI,
     tooltip = "Attach an online-learned probability to each CHoCH estimating whether the character change will hold.")
ai_lrRateInp   = input.float(0.05, "CHoCH Model Learning Rate", minval = 0.001, maxval = 0.5, step = 0.001, group = gAI)
ai_lrHorizonInp= input.int(10, "CHoCH Outcome Horizon (bars)", minval = 2, maxval = 50, group = gAI,
     tooltip = "Bars ahead used to judge whether a CHoCH 'held' (price continued in the new direction), for supervised learning.")
ai_dimInput    = input.bool(true, "Dim Low-Confidence CHoCH", group = gAI)

gO = "▓ ORDER BLOCKS ▓"
ob_showInput   = input.bool(true, "Show Order Blocks", group = gO)
ob_maxInput    = input.int(5, "Max Order Blocks Shown", minval = 1, maxval = 20, group = gO,
     tooltip = "How many most-recent unmitigated order blocks to keep on the chart.")
ob_mitigInput  = input.string("Wick", "Mitigation Method",
     options = ["Wick", "Close"], group = gO,
     tooltip = "Wick: zone is mitigated when a wick enters it. Close: only when price closes through it (stricter).")
ob_showVolInp  = input.bool(true, "Show Volume in Order Blocks", group = gO)

gF = "▓ FAIR VALUE GAPS ▓"
fvg_showInput  = input.bool(true, "Show Fair Value Gaps", group = gF)
fvg_maxInput   = input.int(6, "Max FVGs Shown", minval = 1, maxval = 20, group = gF)
fvg_threshInput= input.float(0.0, "Min Gap Size (ATR)", minval = 0.0, maxval = 5.0, step = 0.1, group = gF,
     tooltip = "Filter out small FVGs below this many ATRs. 0 = show all gaps.")
fvg_extendInput= input.int(20, "FVG Extend (bars)", minval = 1, maxval = 100, group = gF,
     tooltip = "How far right to extend an unfilled FVG box.")

gV = "▓ VISUALS ▓"
vi_themeInput  = input.string("Emerald / Ruby", "Palette",
     options = ["Emerald / Ruby", "Mint / Coral", "Forest / Crimson"], group = gV,
     tooltip = "Refined red/green palettes. Bullish = green family, bearish = red family.")
vi_glowInput   = input.bool(true, "Neon Glow on Structure Lines", group = gV)
vi_lineStyleInp= input.string("Solid Swing / Dashed Internal", "Line Style",
     options = ["Solid Swing / Dashed Internal", "All Solid", "All Dashed"], group = gV)
vi_labelSizeInp= input.string("Normal", "Label Size",
     options = ["Tiny", "Small", "Normal"], group = gV)

gH = "▓ HUD ▓"
hud_showInput  = input.bool(true, "Show HUD", group = gH)
hud_posInput   = input.string("Top Right", "Position",
     options = ["Top Right", "Top Left", "Bottom Right", "Bottom Left", "Middle Right"], group = gH)
hud_sizeInput  = input.string("Normal", "Text Size",
     options = ["Tiny", "Small", "Normal", "Large"], group = gH)

var color cBull   = na
var color cBear   = na
var color cBullD  = na
var color cBearD  = na
var color cGold   = na   // shared accent (gold) for HUD frames & highlights
var color cTxt    = #eef2f0
var color cTxtD   = #6b7d76
var color cPanel  = #080b0a
var color cPanelHd= #0f1614

setPalette() =>
    [b, s, bd, sd] = switch vi_themeInput
        "Emerald / Ruby"   => [#10e0a0, #ff3860, #0a6b54, #8c2238]
        "Mint / Coral"     => [#4ef0c0, #ff6b6b, #1f7d68, #9c3d3d]
        => [#2ecc71, #e23c4e, #176638, #842029]   // Forest / Crimson
    [b, s, bd, sd]
[pb, ps, pbd, psd] = setPalette()
cBull  := pb
cBear  := ps
cBullD := pbd
cBearD := psd
cGold  := #d4af37   // refined gold accent

sdiv(a, b) =>
    b != 0 ? a / b : 0.0
clamp(v, lo, hi) =>
    math.max(lo, math.min(hi, v))

labelSize() =>
    switch vi_labelSizeInp
        "Tiny"  => size.tiny
        "Small" => size.small
        => size.normal

lineStyleSwing() =>
    switch vi_lineStyleInp
        "All Dashed" => line.style_dashed
        => line.style_solid
lineStyleInternal() =>
    switch vi_lineStyleInp
        "All Solid" => line.style_solid
        => line.style_dashed

ph = ta.pivothigh(high, ms_swingLenInp, ms_swingLenInp)
pl = ta.pivotlow(low,  ms_swingLenInp, ms_swingLenInp)
pivBar = bar_index - ms_swingLenInp

var float lastSwingHigh = na
var float lastSwingLow  = na
var int   lastSHBar     = na
var int   lastSLBar     = na

var float prevSwingHigh = na
var float prevSwingLow  = na

swingHighType = 0   // +1 = HH, -1 = LH
swingLowType  = 0   // +1 = HL, -1 = LL

if not na(ph)
    prevSwingHigh := lastSwingHigh
    lastSwingHigh := ph
    lastSHBar := pivBar
    swingHighType := na(prevSwingHigh) ? 0 : (ph > prevSwingHigh ? 1 : -1)

if not na(pl)
    prevSwingLow := lastSwingLow
    lastSwingLow := pl
    lastSLBar := pivBar
    swingLowType := na(prevSwingLow) ? 0 : (pl > prevSwingLow ? 1 : -1)

var int   trend       = 0
var float brokenHigh  = na   // the swing high level most recently broken
var float brokenLow   = na
var int   bosCount    = 0
var int   chochCount  = 0

var bool  highActive  = false
var bool  lowActive   = false

if not na(ph)
    highActive := true
if not na(pl)
    lowActive := true

bullBreak = highActive and not na(lastSwingHigh) and close > lastSwingHigh
bearBreak = lowActive  and not na(lastSwingLow)  and close < lastSwingLow

isBOS_bull   = false
isCHoCH_bull = false
isBOS_bear   = false
isCHoCH_bear = false

if bullBreak
    if trend == -1
        isCHoCH_bull := true
        chochCount += 1
    else
        isBOS_bull := true
        bosCount += 1
    trend := 1
    brokenHigh := lastSwingHigh
    highActive := false   // consume this level

if bearBreak
    if trend == 1
        isCHoCH_bear := true
        chochCount += 1
    else
        isBOS_bear := true
        bosCount += 1
    trend := -1
    brokenLow := lastSwingLow
    lowActive := false

atr = ta.atr(14)

var float[] zoneRel = array.new<float>(4, 0.5)   // start neutral 0.5

NF = 4   // bias + 3 features
var float[] chW = array.new<float>(NF, 0.0)

fWin = 50
rawMomC = sdiv(close - close[5], atr)
rawBody = sdiv(close - open, atr)
rawVolC = sdiv(volume - ta.sma(volume, fWin), ta.stdev(volume, fWin))
zc0 = 1.0
zc1 = clamp(sdiv(rawMomC - ta.sma(rawMomC, fWin), ta.stdev(rawMomC, fWin)), -4, 4)
zc2 = clamp(sdiv(rawBody - ta.sma(rawBody, fWin), ta.stdev(rawBody, fWin)), -4, 4)
zc3 = clamp(nz(rawVolC), -4, 4)

sigmoid(z) =>
    z > 0 ? 1.0 / (1.0 + math.exp(-z)) : math.exp(z) / (1.0 + math.exp(z))

dotW() =>
    array.get(chW,0)*zc0 + array.get(chW,1)*zc1 + array.get(chW,2)*zc2 + array.get(chW,3)*zc3

chochProbRaw = sigmoid(dotW())   // probability this CHoCH context "holds"

var float[] chFeat = array.new<float>(0)   // flattened NF per row
var int[]   chDir  = array.new<int>(0)     // +1 bull choch, -1 bear choch
var float[] chPx   = array.new<float>(0)   // price at choch
var int[]   chAge  = array.new<int>(0)     // bars elapsed
var float[] chHit  = array.new<float>(0)   // rolling training accuracy

var float[] obTop   = array.new<float>(0)
var float[] obBot   = array.new<float>(0)
var float[] obVol   = array.new<float>(0)
var int[]   obBull  = array.new<int>(0)
var int[]   obBarA  = array.new<int>(0)
var box[]   obBox   = array.new<box>(0)
var label[] obLbl   = array.new<label>(0)
var int[]   obState = array.new<int>(0)

findBullOB() =>
    idx = -1
    for k = 1 to 30
        if close[k] < open[k]
            idx := k
            break
    idx
findBearOB() =>
    idx = -1
    for k = 1 to 30
        if close[k] > open[k]
            idx := k
            break
    idx

newBullOB = (isBOS_bull or isCHoCH_bull) and ob_showInput
newBearOB = (isBOS_bear or isCHoCH_bear) and ob_showInput

if newBullOB
    k = findBullOB()
    if k >= 0
        t = high[k]
        b = low[k]
        array.push(obTop, t)
        array.push(obBot, b)
        array.push(obVol, nz(volume[k]))
        array.push(obBull, 1)
        array.push(obBarA, bar_index - k)
        array.push(obState, 1)
        bx = box.new(bar_index - k, t, bar_index, b,
             border_color = color.new(cBull, 40), bgcolor = color.new(cBull, 85))
        array.push(obBox, bx)
        lb = label.new(bar_index - k, b, "", yloc = yloc.price, color = color.new(cBull, 100),
             textcolor = cBull, style = label.style_label_up, size = size.tiny)
        array.push(obLbl, lb)

if newBearOB
    k = findBearOB()
    if k >= 0
        t = high[k]
        b = low[k]
        array.push(obTop, t)
        array.push(obBot, b)
        array.push(obVol, nz(volume[k]))
        array.push(obBull, 0)
        array.push(obBarA, bar_index - k)
        array.push(obState, 1)
        bx = box.new(bar_index - k, t, bar_index, b,
             border_color = color.new(cBear, 40), bgcolor = color.new(cBear, 85))
        array.push(obBox, bx)
        lb = label.new(bar_index - k, t, "", yloc = yloc.price, color = color.new(cBear, 100),
             textcolor = cBear, style = label.style_label_down, size = size.tiny)
        array.push(obLbl, lb)

if array.size(obTop) > 0
    i = array.size(obTop) - 1
    while i >= 0
        st = array.get(obState, i)
        if st == 1
            t = array.get(obTop, i)
            b = array.get(obBot, i)
            bull = array.get(obBull, i) == 1

            mitiged = ob_mitigInput == "Close" ? (bull ? close < b : close > t) : (bull ? low < b : high > t)
            bx = array.get(obBox, i)

            box.set_right(bx, bar_index)

            touched = bull ? (low <= t and low >= b) or (high >= b and low <= t) : (high >= b and high <= t) or (low <= t and high >= b)
            inZone = high >= b and low <= t
            if ai_zoneScoreInp and inZone

                reacted = mitiged ? 0.0 : 1.0
                zIdx = bull ? 0 : 1
                zOld = array.get(zoneRel, zIdx)
                array.set(zoneRel, zIdx, zOld + ai_zoneRateInp * (reacted - zOld))
            if mitiged
                array.set(obState, i, 0)
                box.set_bgcolor(bx, color.new(bull ? cBull : cBear, 94))
                box.set_border_style(bx, line.style_dotted)
            else

                if ob_showVolInp
 

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

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

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

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

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

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

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