AetherEdge - STRUCTURA Adaptive Price-Action Intelligence
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator_aetheredge_structura_adaptive_price_action_intelligence.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.