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

Adaptive Trend Trail

indicator adaptive trend trail for tradingview.pine

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

!!!-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 общих теговsureforexhedging 1.09 a (2).mq4MQL4 / MetaTrader 4 · 2 общих тегов
Вы автор или правообладатель?

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

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

О программе

Индикатор «Adaptive Trend Trail» для TradingView (Pine Script v6) отображает адаптивную трендовую ленту на графике цены. Он рассчитывает базовую линию тренда на скользящей средней, оценивает направленный импульс, эффективность движения и режим волатильности, а также использует три скрытых уровня Supertrend для подтверждения направления. На основе этих данных индикатор определяет бычьи и медвежьи сигналы и отрисовывает соответствующие линии, заливки и графические метки.

Индикатор предлагает два режима отображения: трендовую ленту (Trail) и волатильные зоны (Bands). В верхней части графика может быть размещён измеритель оценки (Valuation Meter), показывающий текущее состояние в виде шкалы с указателем. Также предусмотрены условия оповещений для смены направления тренда.

Внутри индикатора реализована имитация торговли: при появлении сигналов открываются и закрываются условные позиции с фиксацией убытков по внешней линии ленты. Результаты (возврат, процент выигрышных сделок, коэффициент прибыли, максимальная просадка, количество закрытых сделок) отображаются в окне данных графика. Индикатор не является автоматическим советником и не исполняет сделки.

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

НастройкаОписание
trendLength Основной период для расчёта базовой линии тренда. Более высокие значения формируют более медленную и стабильную трендовую базу.
momentumLength Период для измерения направленного импульса цены.
sensitivity Определяет, какой объём подтверждающих данных требуется для разворота тренда. Более высокие значения генерируют меньше сигналов.
stFastLength Период усреднения для быстрого скрытого уровня Supertrend.
stFastFactor Множитель волатильности для быстрого скрытого уровня Supertrend. Более высокие значения требуют более сильного движения для смены направления.
stMidLength Период усреднения для среднего скрытого уровня Supertrend.
stMidFactor Множитель волатильности для среднего скрытого уровня Supertrend.
stSlowLength Период усреднения для медленного скрытого уровня Supertrend.
stSlowFactor Множитель волатильности для медленного скрытого уровня Supertrend, обеспечивающий широкое подтверждение тренда.
overlayMode Выбирает режим отображения на графике: трендовая лента (Trail), волатильные зоны (Bands) или скрытие наложения (None).
trailSize Управляет общим расстоянием и толщиной выбранного наложения на графике.
smoothness Сглаживает геометрию отображения. Более высокие значения создают более плавное движение линий.
meterMode Управляет видимостью и общим размером измерителя оценки (Valuation Meter) на графике.
meterPosition Задаёт положение измерителя оценки на графике: верхний левый, верхний центр, верхний правый, нижний левый, нижний центр или нижний правый угол.
Получить полный код

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

indicator("Adaptive Trend Trail", shorttitle="Adaptive Trend Trail", overlay=true, max_labels_count=300, max_bars_back=5000)

gEngine = "01. Trend Engine"

trendLength = input.int(34, "Trend Length", minval=10, maxval=200, group=gEngine,
     tooltip="Controls the primary trend baseline. Higher values create slower and more stable trend states.")

momentumLength = input.int(12, "Momentum Length", minval=3, maxval=100, group=gEngine,
     tooltip="Lookback used to measure directional momentum.")

sensitivity = input.float(0.35, "Signal Selectivity", minval=0.10, maxval=1.25, step=0.05, group=gEngine,
     tooltip="Controls how much directional evidence is required before the trend can reverse. Higher values produce fewer signals.")

gST = "02. Supertrend Confirmation"

stFastLength = input.int(9, "Fast Length", minval=2, maxval=100, group=gST,
     tooltip="ATR length of the fast hidden Supertrend. Lower values react more quickly.")

stFastFactor = input.float(1.45, "Fast Factor", minval=0.25, maxval=10.0, step=0.05, group=gST,
     tooltip="Base ATR multiplier of the fast hidden Supertrend. Higher values require a larger move before its direction changes.")

stMidLength = input.int(14, "Medium Length", minval=2, maxval=150, group=gST,
     tooltip="ATR length of the medium hidden Supertrend.")

stMidFactor = input.float(1.95, "Medium Factor", minval=0.25, maxval=10.0, step=0.05, group=gST,
     tooltip="Base ATR multiplier of the medium hidden Supertrend.")

stSlowLength = input.int(21, "Slow Length", minval=2, maxval=200, group=gST,
     tooltip="ATR length of the slow hidden Supertrend. This acts as the broader continuation confirmation.")

stSlowFactor = input.float(2.55, "Slow Factor", minval=0.25, maxval=10.0, step=0.05, group=gST,
     tooltip="Base ATR multiplier of the slow hidden Supertrend. Higher values make broader trend confirmation more selective.")

gOverlay = "03. Overlay"

overlayMode = input.string("Trail", "Overlay", options=["Trail", "Bands", "None"], group=gOverlay,
     tooltip="Trail displays the complete trend ribbon with depth. Bands displays layered volatility zones. None hides the overlay.")

trailSize = input.float(1.00, "Width", minval=0.40, maxval=2.50, step=0.05, group=gOverlay,
     tooltip="Controls the overall distance and thickness of the selected overlay.")

smoothness = input.int(5, "Smoothness", minval=1, maxval=20, group=gOverlay,
     tooltip="Smooths the overlay geometry. Higher values create softer movement.")

gMeter = "04. Valuation"

meterMode = input.string("Normal", "Meter Size", options=["Off", "Compact", "Normal", "Large"], group=gMeter,
     tooltip="Controls whether the Valuation meter is displayed and its overall size.")

meterPosition = input.string("Top Center", "Position", options=["Top Left", "Top Center", "Top Right", "Bottom Left", "Bottom Center", "Bottom Right"], group=gMeter,
     tooltip="Sets the chart position of the Valuation meter.")

bullColor = #00FFE5
bearColor = #FF00B5
neutralColor = #FFD84D

black = #000000
white = #FFFFFF

f_clamp(_v, _min, _max) =>
    math.max(_min, math.min(_max, _v))

f_position(_p) =>
    _p == "Top Left" ? position.top_left :
     _p == "Top Center" ? position.top_center :
     _p == "Bottom Left" ? position.bottom_left :
     _p == "Bottom Center" ? position.bottom_center :
     _p == "Bottom Right" ? position.bottom_right :
     position.top_right

f_tradePnl(_side, _entry, _exit, _capital) =>
    float gross = _capital * _side * ((_exit - _entry) / _entry)
    float fee = _capital * 0.001
    gross - fee

basis = ta.ema(close, trendLength)

atr = ta.atr(14)
safeATR = math.max(atr, syminfo.mintick)

momentum = ta.ema(close - close[momentumLength], 5) / safeATR
distance = (close - basis) / safeATR

effLength = 10

netMovement = math.abs(close - close[effLength])
travelPath = math.sum(math.abs(close - close[1]), effLength)

efficiency = travelPath > 0.0 ? f_clamp(netMovement / travelPath, 0.0, 1.0) : 0.0
chop = 1.0 - efficiency

effDirection = close > close[effLength] ? 1.0 :
     close < close[effLength] ? -1.0 : 0.0

efficiencyField = efficiency * effDirection

normalATR = ta.ema(safeATR, 50)
volRatio = normalATR > 0.0 ? safeATR / normalATR : 1.0

volExpansion = f_clamp(volRatio - 1.0, 0.0, 1.25)
volDeviation = f_clamp(math.abs(volRatio - 1.0), 0.0, 1.50)

fastAdaptiveFactor = stFastFactor + chop * 0.25 + volExpansion * 0.10
midAdaptiveFactor = stMidFactor + chop * 0.35 + volExpansion * 0.15
slowAdaptiveFactor = stSlowFactor + chop * 0.45 + volExpansion * 0.20

[stFast, stFastDirection] = ta.supertrend(fastAdaptiveFactor, stFastLength)
[stMid, stMidDirection] = ta.supertrend(midAdaptiveFactor, stMidLength)
[stSlow, stSlowDirection] = ta.supertrend(slowAdaptiveFactor, stSlowLength)

stFastBull = stFastDirection < 0
stFastBear = stFastDirection > 0

stMidBull = stMidDirection < 0
stMidBear = stMidDirection > 0

stSlowBull = stSlowDirection < 0
stSlowBear = stSlowDirection > 0

bullSTVotes = (stFastBull ? 1 : 0) + (stMidBull ? 1 : 0) + (stSlowBull ? 1 : 0)
bearSTVotes = (stFastBear ? 1 : 0) + (stMidBear ? 1 : 0) + (stSlowBear ? 1 : 0)

requiredSTVotes = chop > 0.70 ? 3 : 2

bullSTConfirmed = bullSTVotes >= requiredSTVotes
bearSTConfirmed = bearSTVotes >= requiredSTVotes

fullBullST = bullSTVotes == 3
fullBearST = bearSTVotes == 3

var int bullSTBars = 0
var int bearSTBars = 0

if barstate.isconfirmed
    bullSTBars := bullSTConfirmed ? math.min(bullSTBars + 1, 5) : 0
    bearSTBars := bearSTConfirmed ? math.min(bearSTBars + 1, 5) : 0

stPersistenceRequired = chop > 0.72 ? 2 : 1

bullSTPersistent = bullSTBars >= stPersistenceRequired
bearSTPersistent = bearSTBars >= stPersistenceRequired

distanceField = f_clamp(distance / 1.20, -1.0, 1.0)
momentumField = f_clamp(momentum / 0.35, -1.0, 1.0)

basisSlope = (basis - basis[3]) / safeATR
slopeField = f_clamp(basisSlope / 0.25, -1.0, 1.0)

rsi = ta.rsi(close, 14)
rsiField = f_clamp((rsi - 50.0) / 20.0, -1.0, 1.0)

stField = (bullSTVotes - bearSTVotes) / 3.0

slowCenter = ta.ema(hl2, math.max(10, int(math.round(trendLength * 0.70))))

slowSlope = (slowCenter - slowCenter[3]) / safeATR
slowSlopeField = f_clamp(slowSlope / 0.25, -1.0, 1.0)

structureLength = math.max(3, int(math.round(trendLength * 0.12)))

recentHigh = ta.highest(high[1], structureLength)
recentLow = ta.lowest(low[1], structureLength)

bullStructure = close > recentHigh
bearStructure = close < recentLow

structureField = bullStructure ? 1.0 :
     bearStructure ? -1.0 : 0.0

barRange = math.max(high - low, syminfo.mintick)

bodyPressure = (close - open) / barRange
closeLocation = ((close - low) / barRange - 0.50) * 2.0

pressureField = f_clamp(bodyPressure * 0.60 + closeLocation * 0.40, -1.0, 1.0)

rawRegime =
     distanceField * 0.22 +
     momentumField * 0.19 +
     slopeField * 0.14 +
     slowSlopeField * 0.10 +
     rsiField * 0.08 +
     efficiencyField * 0.09 +
     pressureField * 0.05 +
     structureField * 0.05 +
     stField * 0.20

regime = ta.ema(rawRegime, 3)

chopPenalty = chop * 0.085
volPenalty = f_clamp(volDeviation * 0.04, 0.0, 0.06)

dynamicGate = 0.22 + sensitivity * 0.12 + chopPenalty + volPenalty

bullZone = regime > dynamicGate
bearZone = regime < -dynamicGate

bullPriceOK = close > basis + safeATR * sensitivity * 0.30
bearPriceOK = close < basis - safeATR * sensitivity * 0.30

bullCandidate = bullZone and bullPriceOK and momentum > 0.025 and bullSTPersistent
bearCandidate = bearZone and bearPriceOK and momentum < -0.025 and bearSTPersistent
var table wm = table.new(position.bottom_right, 1, 1)
if barstate.isfirst
    table.cell(wm, 0, 0, "Telegram @SimpleForexTools", text_color = color.new(color.gray, 70), text_size = size.large)

requiredBars = chop > 0.72 ? 3 :
     chop > 0.40 ? 2 : 1

var int bullConfirm = 0
var int bearConfirm = 0

if barstate.isconfirmed
    bullConfirm := bullCandidate ? math.min(bullConfirm + 1, 4) : 0
    bearConfirm := bearCandidate ? math.min(bearConfirm + 1, 4) : 0

bullPersistent = bullConfirm >= requiredBars
bearPersistent = bearConfirm >= requiredBars

strongBull =
     bullCandidate and
     fullBullST and
     regime > dynamicGate + 0.26 and
     momentum > 0.16 and
     efficiency > 0.42

strongBear =
     bearCandidate and
     fullBearST and
     regime < -(dynamicGate + 0.26) and
     momentum < -0.16 and
     efficiency > 0.42

bullReady = bullPersistent or strongBull
bearReady = bearPersistent or strongBear

bullTakeover = stFastBull and (stMidBull or stSlowBull)
bearTakeover = stFastBear and (stMidBear or stSlowBear)

bullReady := bullReady and bullTakeover
bearReady := bearReady and bearTakeover

cooldownBars = 6 + int(math.round(chop * 4.0))

var int trend = 0
var int lastFlipBar = na

barsSinceFlip 

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

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

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

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

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

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

Стоимость полного кода
1 407,30₽ ≈ $17.20