Adaptive Trend Trail
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «indicator adaptive trend trail for tradingview.pine» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Индикатор «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? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.