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

Adaptive SuperTrend - Trend, Regime Filter & Buy/Sell Signals

indicator adaptive supertrend for tradingview.pine
Вы автор или правообладатель?

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

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

О программе

Адаптивный SuperTrend — индикатор анализа и отображения для TradingView, который автоматически подстраивает чувствительность трендовой линии под текущую волатильность рынка. Вместо фиксированного множителя используется ранжирование текущего ATR по окну истории: при высокой волатильности стоп расширяется, при низкой — сужается. Это позволяет индикатору работать на форекс, криптовалютах и индексах без ручной перенастройки.

Помимо адаптивного тренда, индикатор включает два фильтра для снижения ложных сигналов. Фильтр режима на основе коэффициента эффективности Кауфмана определяет, находится ли рынок в тренде или в боковике, и разрешает сигналы только в первом случае. Проверка импульса через экспоненциальную скользящую среднюю подтверждает совпадение направления импульса с новым трендом перед генерацией сигнала.

Индикатор отображает линию SuperTrend с эффектом свечения и заливкой, окрашивает свечи по тренду, выводит метки BUY и SELL, а также автоматически строит лестницу тейк-профитов и стоп-лосса (1R/2R/3R) для последнего сигнала. Информационная панель показывает текущий тренд, уровень уверенности, режим рынка, импульс и статистику сделок в реальном времени. Поддерживаются условия оповещений TradingView.

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

НастройкаОписание
atrLen Период расчёта ATR (среднего истинного диапазона), используемого для построения трендовой линии стопа.
multMin Минимальный множитель SuperTrend при низкой волатильности. Чем меньше значение, тем быстрее реакция на изменения тренда.
multMax Максимальный множитель SuperTrend при высокой волатильности. Чем больше значение, тем устойчивее индикатор к ложным сигналам.
volLen Размер окна для ранжирования текущей волатильности, определяющей адаптивный множитель.
useReg При включении сигналы Buy/Sell генерируются только при наличии тренда, а не в боковике.
erLen Период расчёта коэффициента эффективности (эффективность Кауфмана) для определения трендового режима.
erThr Пороговое значение коэффициента эффективности: выше — рынок считается трендовым, ниже — боковым.
useMom При включении сигналы принимаются только при совпадении направления импульса с новым трендом.
momLen Период экспоненциальной скользящей средней, используемой для оценки импульса цены.
showFill Отображение заливки области между трендовой линией и ценой.
glow Включает эффект свечения для линии SuperTrend.
neonOn Окрашивает свечи по цвету адаптивного тренда (бирюзовый вверх, розовый вниз).
showSig Отображает графические метки BUY и SELL при появлении сигналов.
showLad Рисует линии стоп-лосса и нескольких уровней тейк-профита (1R/2R/3R) для последнего сигнала.
showStat Отслеживает статистику прошлых сигналов: процент выигрышных сделок (достигших TP1 до стоп-лосса). Без опережения.
showHUD Отображает информационную панель (дашборд) с данными о тренде, уровне уверенности, режиме и статистике.
hudPos Позиция размещения информационной панели на графике.
hudBg Цвет фона информационной панели.
accent Цвет акцентных элементов на информационной панели.
Получить полный код

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

indicator("Adaptive SuperTrend - Trend, Regime Filter & Buy/Sell Signals", "Adaptive SuperTrend", overlay = true, max_labels_count = 200)

TEAL_MID = #12B8A6
TEAL_HI  = #4DFCE6
PINK_MID = #FF2E63
PINK_HI  = #FF6FA3
GOLD     = #FFB938
INK      = #0B0E14
MUTE     = #5C6675
INKHI    = #EAEEF6

gT      = "Adaptive Trend"
atrLen  = input.int(10,  "ATR length",            minval = 2, group = gT, tooltip = "Lookback for the volatility (ATR) the trend stop is built on.")
multMin = input.float(1.5,"Min multiplier (calm)", minval = 0.5, step = 0.1, group = gT, tooltip = "Sensitivity in LOW volatility — smaller = reacts sooner.")
multMax = input.float(4.0,"Max multiplier (wild)", minval = 1.0, step = 0.1, group = gT, tooltip = "Sensitivity in HIGH volatility — larger = avoids whipsaw.")
volLen  = input.int(100, "Volatility window",     minval = 20, group = gT, tooltip = "Window used to rank current volatility (drives the adaptive multiplier).")

gR      = "Regime Filter"
useReg  = input.bool(true, "Only signal in trending regime", group = gR, tooltip = "Suppresses Buy/Sell while the market is ranging/choppy.")
erLen   = input.int(14,  "Efficiency length",     minval = 3, group = gR, tooltip = "Kaufman efficiency-ratio lookback: directional travel vs total path.")
erThr   = input.float(0.30,"Trend threshold",     minval = 0.05, maxval = 0.9, step = 0.05, group = gR, tooltip = "Above this = trending (signals allowed). Below = range.")

gM      = "Momentum Check"
useMom  = input.bool(true, "Require momentum agreement", group = gM)
momLen  = input.int(20,  "Momentum EMA",          minval = 2, group = gM)

gV      = "Visuals"
showFill= input.bool(true, "Trend fill",          group = gV)
glow    = input.bool(true, "Glow line",           group = gV)
neonOn  = input.bool(true, "Neon trend candles",  group = gV, tooltip = "Colour candles by the adaptive trend (turquoise up / magenta down).")
showSig = input.bool(true, "Buy/Sell labels",     group = gV)

gTr     = "Trade Levels & Stats"
showLad = input.bool(true, "Auto TP/SL ladder (R:R)", group = gTr, tooltip = "Draws stop (on the trend line) and TP1/TP2/TP3 at 1R/2R/3R for the latest signal.")
showStat= input.bool(true, "Live signal stats",       group = gTr, tooltip = "Tracks past signals on the fly: win rate = share that reached TP1 (1R) before the stop. No lookahead.")

gP      = "Panel"
showHUD = input.bool(true, "Show dashboard",      group = gP)
hudPos  = input.string("Top Right","Position",    options = ["Top Right","Top Left","Bottom Right","Bottom Left","Middle Right"], group = gP)
hudBg   = input.color(#0C0F16, "Background",      group = gP)
accent  = input.color(TEAL_MID, "Accent",        group = gP)

hudPosition(string s) =>
    switch s
        "Top Right"    => position.top_right
        "Top Left"     => position.top_left
        "Bottom Right" => position.bottom_right
        "Bottom Left"  => position.bottom_left
        => position.middle_right

atr   = ta.atr(atrLen)
volPr = ta.percentrank(atr, volLen) / 100.0      // 0..1 position of current ATR
mult  = multMin + (multMax - multMin) * volPr

src     = hl2
upBasic = src + mult * atr
loBasic = src - mult * atr

var float upperB = na
var float lowerB = na
var int   dir    = 1

upperB := (upBasic < nz(upperB[1]) or close[1] > nz(upperB[1])) ? upBasic : nz(upperB[1])
lowerB := (loBasic > nz(lowerB[1]) or close[1] < nz(lowerB[1])) ? loBasic : nz(lowerB[1])
dir    := close > nz(upperB[1]) ? 1 : close < nz(lowerB[1]) ? -1 : nz(dir[1], 1)
st      = dir == 1 ? lowerB : upperB

up   = dir == 1
flipUp = dir == 1 and dir[1] == -1
flipDn = dir == -1 and dir[1] == 1

netMove = math.abs(close - close[erLen])
path    = math.sum(math.abs(close - close[1]), erLen)
er      = path != 0 ? netMove / path : 0.0
trending = er >= erThr
regimeOK = not useReg or trending

emaM  = ta.ema(close, momLen)
momUp = close >= emaM
momOK_long  = not useMom or momUp
momOK_short = not useMom or not momUp

buy  = flipUp and regimeOK and momOK_long
sell = flipDn and regimeOK and momOK_short

erComp   = math.min(1.0, er / 0.5)
momComp  = atr > 0 ? math.min(1.0, math.abs(close - emaM) / (atr * 2.0)) : 0.0
momAlign = (close >= emaM) == up ? momComp : 0.0
slopeComp= atr > 0 ? math.min(1.0, math.abs(st - st[5]) / atr) : 0.0
conv     = math.round(100 * (0.45 * erComp + 0.35 * momAlign + 0.20 * slopeComp))
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)

var float tEntry = na
var float tSL = na
var float tT1 = na
var float tT2 = na
var float tT3 = na
var int   tDir = 0
var bool  tOpen = false
var int   wins = 0
var int   losses = 0

if tOpen
    if tDir == 1
        if high >= tT1
            wins += 1
            tOpen := false
        else if low <= tSL
            losses += 1
            tOpen := false
    else
        if low <= tT1
            wins += 1
            tOpen := false
        else if high >= tSL
            losses += 1
            tOpen := false

sig = buy or sell
if sig
    if tOpen                       // flip closed a still-open trade -> counts as a stop
        losses += 1
        tOpen := false
    tDir   := buy ? 1 : -1
    tEntry := close
    tSL    := st
    rr      = math.abs(tEntry - tSL)
    tT1    := buy ? tEntry + rr       : tEntry - rr
    tT2    := buy ? tEntry + 2.0 * rr : tEntry - 2.0 * rr
    tT3    := buy ? tEntry + 3.0 * rr : tEntry - 3.0 * rr
    tOpen  := true

resolved = wins + losses
winRate  = resolved > 0 ? wins / resolved * 100.0 : na

var line  lnS = na
var line  ln1 = na
var line  ln2 = na
var line  ln3 = na
var label lbS = na
var label lb1 = na
var label lb2 = na
var label lb3 = na

f_setLad(line ln, label lb, float price, string txt, color c) =>
    line.set_xy1(ln, bar_index, price)
    line.set_xy2(ln, bar_index + 8, price)
    line.set_color(ln, c)
    label.set_xy(lb, bar_index + 8, price)
    label.set_text(lb, txt)
    label.set_color(lb, color.new(c, 0))

if showLad and sig
    if na(lnS)
        lnS := line.new(bar_index, tSL, bar_index + 8, tSL, color = PINK_MID, width = 1, style = line.style_dashed)
        ln1 := line.new(bar_index, tT1, bar_index + 8, tT1, color = TEAL_MID, width = 1)
        ln2 := line.new(bar_index, tT2, bar_index + 8, tT2, color = TEAL_MID, width = 1)
        ln3 := line.new(bar_index, tT3, bar_index + 8, tT3, color = TEAL_MID, width = 1)
        lbS := label.new(bar

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

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

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

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

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

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

Стоимость полного кода
990,80₽ ≈ $12.11