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

GG Beluga KHST

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

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

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

О программе

GG Beluga KHST — индикатор анализа для TradingView, построенный на основе трендовой системы Kalman Hull Supertrend (KHST). Он отображает трендовую линию на графике с цветовым кодированием направления и стрелками переключения тренда, а также предоставляет расширенные средства фильтрации сигналов. Индикатор работает поверх цены (overlay) и предназначен для визуального анализа текущей рыночной динамики.

Среди ключевых средств фильтрации — многотаймфреймный гейтинг (совпадение направления на нескольких таймфреймах), режим NO TRADE с фильтрами по волатильности (ATR, узкий диапазон) и опциональным значением ADX, а также фильтр ADX Rising, отслеживающий ускорение тренда. Для подтверждения разворотов реализован механизм Early Flip, оценивающий ускорение наклона калмановской оценки с адаптацией к волатильности.

Индикатор предлагает два режима отображения торговых уровней: замороженные уровни входа, тейк-профита и стоп-лосса (обновляемые при развороте тренда), а также режим Market NOW с отображением актуальных ценовых уровней. Дополнительно реализована система подтверждений по свинг-точкам с периодом охлаждения и механизм оповещений с настраиваемыми условиями срабатывания.

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

НастройкаОписание
preset Выбор пресета настроек, определяющего базовые параметры для конкретного инструмента: Gold, US100, US30 или FX.
usePresetDefaults При включении используются предустановленные значения параметров, соответствующие выбранному пресету. При отключении доступна ручная настройка.
src Источник данных (цена), используемый для расчёта трендовой линии и всех производных показателей.
measNoise Параметр шума измерения для калмановского фильтра, влияющий на скорость реакции оценки к изменениям цены. Используется при отключённом пресете по умолчанию.
procNoise Параметр шума процесса для калмановского фильтра, определяющий допустимую степень отклонения оценки. Используется при отключённом пресете по умолчанию.
atrLenST Период усреднения ATR, используемый в расчёте Supertrend. Определяет чувствительность трендовой линии.
factorST Множитель, определяющий ширину полос Supertrend. Увеличение значения делает трендовую линию менее чувствительной к краткосрочным колебаниям.
showTrend Отображает основную трендовую линию KHST (Kalman Hull Supertrend) на графике с цветовым кодированием направления.
showFlips Отображает стрелки переключения тренда (BUY/SELL) при изменении направления трендовой линии Supertrend.
colLong Цвет отрисовки трендовой линии и маркеров при восходящем направлении.
colShort Цвет отрисовки трендовой линии и маркеров при нисходящем направлении.
useAlign Включает многотаймфреймное выравнивание: сигналы считаются достоверными только при совпадении направления тренда на выбранных таймфреймах.
tfCount Количество таймфреймов (включая текущий), участвующих в проверке совпадения направления для выравнивания.
tf2In Второй таймфрейм для многотаймфреймного выравнивания. Пустое значение означает автоматический выбор (текущий таймфрейм × 2).
tf3In Третий таймфрейм для многотаймфреймного выравнивания. Пустое значение означает автоматический выбор (текущий таймфрейм × 3).
tf4In Четвёртый таймфрейм для многотаймфреймного выравнивания. Пустое значение означает автоматический выбор (текущий таймфрейм × 4).
alignGraceBars Количество баров, в течение которых сигнал считается допустимым после первого совпадения направления на всех выбранных таймфреймах (льготный период).
useNoTrade Включает режим NO TRADE, блокирующий отображение торговых сигналов при невыполнении условий по волатильности, узости диапазона и/или значению ADX.
useATRfloor Включает фильтр минимальной волатильности на основе ATR. При недостаточной волатильности режим NO TRADE активируется.
atrFloorLen Период расчёта ATR для фильтра минимальной волатильности в режиме NO TRADE.
atrFloor Минимально допустимое значение ATR. Если текущий ATR ниже этого порога, режим NO TRADE активируется. Значение 0 отключает фильтр.
useTight Включает фильтр узкого диапазона. При сжатии диапазона цены ниже заданного порога режим NO TRADE активируется.
tightLen Количество баров, в пределах которых вычисляется диапазон цены (high − low) для фильтра узкого диапазона.
tightATRMult Множитель ATR для определения узкого диапазона. Если текущий диапазон не превышает ATR × этот множитель, режим NO TRADE активируется.
useADXBase Включает дополнительную базовую проверку значения ADX в режиме NO TRADE. Если ADX ниже установленного минимума, торговля блокируется.
adxMin Минимально допустимое значение ADX для прохождения базовой фильтрации в режиме NO TRADE. Используется только при включённом параметре «Base ADX filter».
useADXRising Включает фильтр ADX Rising, который разрешает торговлю при достаточном уровне ADX или при значительном ускорении его роста.
adxLen Период расчёта индикатора DMI, используемого для вычисления значения ADX. Влияет на чувствительность фильтра направленного движения.
adxSmooth Период сглаживания линии ADX. Уменьшает значение делает фильтр менее чувствительным к краткосрочным колебаниям.
adxSlopeLenIn Количество баров, за которое вычисляется изменение (наклон) значения ADX для фильтра ADX Rising.
adxSlopeThreshIn Пороговое значение наклона ADX, при превышении которого фильтр ADX Rising считается выполненным.
useEarlyFlip Включает механизм Early Flip — предварительного подтверждения разворота на основе ускорения наклона калмановской оценки с адаптацией к волатильности.
efLookbackATR Количество баров для усреднения ATR, используемого как базовое значение волатильности в механизме Early Flip.
efBaseThresh Базовое пороговое значение для подтверждения Early Flip, которое корректируется в зависимости от волатильности.
efAdaptK Коэффициент адаптации порога Early Flip к текущей волатильности. Позволяет динамически корректировать чувствительность подтверждения разворота.
showA Отображает замороженные уровни входа, TP1, TP2 и SL на графике. Уровни обновляются при развороте тренда или включении выравнивания при устаревании.
entryMode Режим задания расстояния до уровня входа: «ATR» (в кратных единицах среднего истинного диапазона) или «Percent» (в процентах от цены).
entryAtrMult Множитель ATR для расчёта расстояния от цены до уровня входа при режиме «ATR».
entryPct Процент от текущей цены, используемый для расчёта уровня входа при режиме «Percent».
riskMode Режим задания уровней тейк-профита и стоп-лосса: «ATR» (в кратных единицах среднего истинного диапазона) или «Percent» (в процентах от цены входа).
tp1AtrMult Множитель ATR для расчёта первого уровня тейк-профита от цены входа при режиме «ATR».
tp2AtrMult Множитель ATR для расчёта второго уровня тейк-профита от цены входа при режиме «ATR».
slAtrMult Множитель ATR для расчёта уровня стоп-лосса от цены входа при режиме «ATR».
tp1Pct Процент от цены входа, используемый для расчёта первого уровня тейк-профита при режиме «Percent».
tp2Pct Процент от цены входа, используемый для расчёта второго уровня тейк-профита при режиме «Percent».
slPct Процент от цены входа, используемый для расчёта уровня стоп-лосса при режиме «Percent».
extendBars Количество баров вправо от текущего бара, на которые продлеваются линии уровней Entry, TP1, TP2 и SL.
staleBars Количество баров неактивности, после которого замороженные уровни считаются устаревшими и могут быть обновлены при повторном включении выравнивания.
showB Отображает стрелки Market NOW на графике, указывающие точки актуального входа в направлении тренда при выполнении всех фильтров.
showBLabel Отображает текстовую метку Market NOW с информацией об уровне входа, TP1, TP2 и SL рядом со стрелками.
showPending Отображает маркеры Pending — предварительные сигналы Early Flip до подтверждения полноценным разворотом тренда.
showPC Отображает графические маркеры в точках подтверждения свинга (Swing High и Swing Low), не являющихся точками входа.
pcPivotL Количество баров влево от текущего для определения свинг-вершины или свинг-низины.
pcPivotR Количество баров вправо от текущего для определения свинг-вершины или свинг-низины.
pcCooldownBars Количество баров периода охлаждения после отображения подтверждения свинга, в течение которого новые подтверждения свинг-точек не отрисовываются.
pcGateOnAlignTradeOK При включении подтверждения свингов отображаются только при одновременном выполнении условий выравнивания таймфреймов и допустимости торговли.
pcTrendFilter При включении подтверждение SwingHigh отображается только в нисходящем тренде, а SwingLow — только в восходящем.
pcShowPopupLabel Отображает небольшую текстовую метку рядом с подтверждённой свинг-точкой, указывающую тип подтверждения.
pcSizeOpt Размер графических маркеров подтверждений свингов: tiny (маленький), small (средний) или normal (нормальный).
showCooldownViz Отображает текстовую метку справа, показывающую состояние периода охлаждения подтверждений свингов.
labelYOffsetATR Вертикальное смещение информационной метки состояния от верхней цены бара, измеряемое в единицах ATR.
rightLabelX Горизонтальный отступ в барах от текущего бара для размещения информационных меток справа на графике.
showScaleMarks Отображает уровни Entry, TP1, TP2 и SL на ценовом масштабе (правая панель) графика.
enableAlerts Включает или отключает отправку оповещений через функцию alert() при наступлении настроенных событий.
alertOnConfirmedClose При включении оповещения срабатывают только после подтверждения закрытия бара, а не на каждом обновлении в процессе формирования.
Получить полный код

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

indicator("GG Beluga KHST (Presets + NO-TRADE + EarlyFlip + ADX Rising + Frozen TP1/TP2 + Psych Confirm + Alerts)",
     overlay=true, max_lines_count=300, max_labels_count=300)

grpPreset = "Presets"
preset = input.string("Gold", "Symbol Preset", options=["Gold","US100","US30","FX"], group=grpPreset)
usePresetDefaults = input.bool(true, "Use preset defaults (recommended)", group=grpPreset)

measBase = switch preset
    "Gold"  => 10.0
    "US100" => 12.0
    "US30"  => 14.0
    => 16.0

procBase = switch preset
    "Gold"  => 0.010
    "US100" => 0.012
    "US30"  => 0.015
    => 0.020

atrLenBase = switch preset
    "Gold"  => 12
    "US100" => 14
    "US30"  => 14
    => 12

factorBase = switch preset
    "Gold"  => 1.60
    "US100" => 1.70
    "US30"  => 1.80
    => 1.50

entryAtrMultBase = switch preset
    "Gold"  => 0.60
    "US100" => 0.60
    "US30"  => 0.70
    => 0.50

tp1AtrMultBase = switch preset
    "Gold"  => 1.00
    "US100" => 1.00
    "US30"  => 1.10
    => 0.90

tp2AtrMultBase = switch preset
    "Gold"  => 1.70
    "US100" => 1.80
    "US30"  => 2.00
    => 1.50

slAtrMultBase = switch preset
    "Gold"  => 1.20
    "US100" => 1.30
    "US30"  => 1.40
    => 1.10

adxMinBase = switch preset
    "Gold"  => 16.0
    "US100" => 18.0
    "US30"  => 18.0
    => 15.0

earlyBaseThresh = switch preset
    "Gold"  => 0.10
    "US100" => 0.12
    "US30"  => 0.14
    => 0.08

adxSlopeLenBase = switch preset
    "Gold"  => 6
    "US100" => 7
    "US30"  => 8
    => 6

adxSlopeThreshBase = switch preset
    "Gold"  => 0.25
    "US100" => 0.35
    "US30"  => 0.45
    => 0.25

grpTrend = "Trend Engine (Kalman Hull Supertrend)"
src       = input.source(close, "Price Source", group=grpTrend)
measNoise = input.float(12.0, "Measurement Noise (Length)", step=1.0, group=grpTrend)
procNoise = input.float(0.01, "Process Noise", step=0.001, group=grpTrend)
atrLenST  = input.int(12, "Supertrend ATR Period", minval=1, group=grpTrend)
factorST  = input.float(1.7, "Supertrend Factor", step=0.01, group=grpTrend)

showTrend = input.bool(true, "Show KHST Trendline", group=grpTrend)
showFlips = input.bool(true, "Show Flip arrows", group=grpTrend)

colLong   = input.color(color.lime, "Up Color", group=grpTrend, inline="c1")
colShort  = input.color(color.red,  "Down Color", group=grpTrend, inline="c1")

measEff = usePresetDefaults ? measBase   : measNoise
procEff = usePresetDefaults ? procBase   : procNoise
atrLenE = usePresetDefaults ? atrLenBase : atrLenST
facEff  = usePresetDefaults ? factorBase : factorST

grpAlign = "Timeframe Alignment"
useAlign  = input.bool(true, "Use TF Alignment gating", group=grpAlign)
tfCount   = input.int(2, "TFs incl current", minval=1, maxval=4, group=grpAlign)
tf2In     = input.timeframe("", "TF2 (blank=auto x2)", group=grpAlign)
tf3In     = input.timeframe("", "TF3 (blank=auto x3)", group=grpAlign)
tf4In     = input.timeframe("", "TF4 (blank=auto x4)", group=grpAlign)
alignGraceBars = input.int(6, "Alignment grace bars after turning YES", minval=0, maxval=50, group=grpAlign)

grpNT = "NO TRADE Regime"
useNoTrade  = input.bool(true, "Enable NO TRADE regime", group=grpNT)

useATRfloor = input.bool(true, "ATR floor filter", group=grpNT)
atrFloorLen = input.int(14, "ATR length", minval=1, group=grpNT)
atrFloor    = input.float(0.0, "ATR floor (0=off)", step=0.1, group=grpNT)

useTight    = input.bool(true, "Tight range filter", group=grpNT)
tightLen    = input.int(20, "Tight lookback bars", minval=5, group=grpNT)
tightATRMult= input.float(1.2, "Tight if Range <= ATR * mult", step=0.1, group=grpNT)

useADXBase  = input.bool(false, "Base ADX filter (NO-TRADE) (optional)", group=grpNT)
adxMin      = input.float(18.0, "ADX minimum", step=0.5, group=grpNT)

grpADX = "ADX Rising Filter (Soft gate A - Recommended)"
useADXRising = input.bool(true, "Enable ADX Rising soft gate", group=grpADX)
adxLen       = input.int(14, "DMI length", minval=1, group=grpADX)
adxSmooth    = input.int(14, "ADX smoothing", minval=1, group=grpADX)

adxSlopeLenIn    = input.int(6, "ADX slope length (bars)", minval=1, group=grpADX)
adxSlopeThreshIn = input.float(0.30, "ADX slope threshold", step=0.05, group=grpADX)

adxMinEff        = usePresetDefaults ? adxMinBase         : adxMin
adxSlopeLenEff   = usePresetDefaults ? adxSlopeLenBase    : adxSlopeLenIn
adxSlopeThreshEff= usePresetDefaults ? adxSlopeThreshBase : adxSlopeThreshIn

grpEF = "Early Flip (Kalman slope acceleration)"
useEarlyFlip  = input.bool(true, "Enable Early Flip confirmation", group=grpEF)
efLookbackATR = input.int(200, "ATR baseline lookback", minval=20, group=grpEF)
efBaseThresh  = input.float(0.12, "Base threshold", step=0.01, group=grpEF)
efAdaptK      = input.float(1.0, "Volatility adaptation (K)", step=0.1, group=grpEF)
efBaseEff     = usePresetDefaults ? earlyBaseThresh : efBaseThresh

grpA = "Option A: Frozen Entry/TP/SL"
showA        = input.bool(true, "Show Option A (Frozen levels)", group=grpA)

entryMode    = input.string("ATR", "Entry distance mode", options=["ATR","Percent"], group=grpA)
entryAtrMult = input.float(0.6, "Entry ATR mult", step=0.1, group=grpA)
entryPct     = input.float(0.15, "Entry %", step=0.01, group=grpA)

riskMode     = input.string("ATR", "TP/SL mode", options=["ATR","Percent"], group=grpA)
tp1AtrMult   = input.float(1.0, "TP1 ATR mult", step=0.1, group=grpA)
tp2AtrMult   = input.float(1.7, "TP2 ATR mult", step=0.1, group=grpA)
slAtrMult    = input.float(1.2, "SL ATR mult", step=0.1, group=grpA)

tp1Pct       = input.float(0.50, "TP1 %", step=0.05, group=grpA)
tp2Pct       = input.float(0.90, "TP2 %", step=0.05, group=grpA)
slPct        = input.float(0.60, "SL %", step=0.05, group=grpA)

extendBars   = input.int(60, "Extend lines (bars)", minval=10, maxval=500, group=grpA)
staleBars    = input.int(6, "Refreeze if stale (bars)", minval=1, maxval=50, group=grpA)

entryAtrEff = usePresetDefaults ? entryAtrMultBase : entryAtrMult
tp1AtrEff   = usePresetDefaults ? tp1AtrMultBase   : tp1AtrMult
tp2AtrEff   = usePresetDefaults ? tp2AtrMultBase   : tp2AtrMult
slAtrEff    = usePresetDefaults ? slAtrMultBase    : slAtrMult

grpB = "Option B: Market NOW + Pending Early"
showB         = input.bool(true, "Show Market NOW arrow", group=grpB)
showBLabel    = input.bool(true, "Show Market NOW label (Entry+TP1+TP2+SL)", group=grpB)
showPending   = input.bool(true, "Show Pending (EarlyFlip) markers", group=grpB)

grpPC = "Psych Confirmation (Swings)"
showPC        = input.bool(true, "Show swing confirmations (not entries)", group=grpPC)
pcPivotL      = input.int(3, "Pivot left", minval=1, group=grpPC)
pcPivotR      = input.int(3, "Pivot right", minval=1, group=grpPC)
pcCooldownBars= input.int(12, "Cooldown bars", minval=0, group=grpPC)
pcGateOnAlignTradeOK = input.bool(true, "Only when AlignOK & TradeOK", group=grpPC)
pcTrendFilter = input.bool(true, "Filter: SwingHigh only in downtrend, SwingLow only in uptrend", group=grpPC)
pcShowPopupLabel = input.bool(true, "Show tiny popup label at pivot", group=grpPC)
pcSizeOpt     = input.string("tiny", "Marker size", options=["tiny","small","normal"], group=grpPC)
showCooldownViz = input.bool(true, "Cooldown visualization (right-side label)", group=grpPC)

grpUI = "UI"
labelYOffsetATR = input.float(2.0, "Status label Y offset (ATR)", step=0.25, group=grpUI)
rightLabelX     = input.int(10, "Right label X padding (bars)", minval=5, maxval=200, group=grpUI)
showScaleMarks  = input.bool(true, "Show Entry/TP/SL on price scale", group=grpUI)

grpAL = "Alerts"
enableAlerts = input.bool(true, "Enable alerts (uses alert() messages)", group=grpAL)
alertOnConfirmedClose = input.bool(true, "Fire alerts on bar close only", group=grpAL)

f_autoTf(mult) =>
    string out = timeframe.period
    if timeframe.isintraday
        out := str.tostring(timeframe.multiplier * mult)
    else if timeframe.isdaily
        out := str.tostring(timeframe.multiplier * mult) + "D"
    else if timeframe.isweekly
        out := str.tostring(timeframe.multiplier * mult) + "W"
    else if timeframe.ismonthly
        out := str.tostring(timeframe.multiplier * mult) + "M"
    out

tf2Str = (tf2In == "" ? f_autoTf(2) : tf2In)
tf3Str = (tf3In == "" ? f_autoTf(3) : tf3In)
tf4Str = (tf4In == "" ? f_autoTf(4) : tf4In)

f_kalman(_x, _R, _Q) =>
    var float est = na
    var float err = na
    if na(est)
        est := _x
        err := 1.0
    predEst = est
    predErr = err + _Q
    K = predErr / (predErr + _R)
    est := predEst + K * (_x - predEst)
    err := (1.0 - K) * predErr
    est

f_khma(_src, _len, _proc) =>
    a = f_kalman(_src, _len/2.0, _proc)
    b = f_kalman(_src, _len,     _proc)
    raw = 2.0 * a - b
    f_kalman(raw, math.max(1.0, math.sqrt(_len)), _proc)

f_supertrend(_src, _atrLen, _factor) =>
    atr = ta.atr(_atrLen)
    upper = _src + _factor * atr
    lower = _src - _factor * atr

    var float fUpper = na
    var float fLower = na
    var int   d = 1

    fUpper := na(fUpper[1]) ? upper : ((upper < fUpper[1] or close[1] > fUpper[1]) ? upper : fUpper[1])
    fLower := na(fLower[1]) ? lower : ((lower > fLower[1] or close[1] < fLower[1]) ? lower : fLower[1])

    if na(d[1])
        d := 1
    else
        if d[1] == -1 and close > fUpper[1]
            d := 1
        else if d[1] == 1 and close < fLower[1]
            d := -1
        else
            d := d[1]

    stLine = (d == 1) ? fLower : fUpper
    [d, stLine, atr]

khma = f_khma(src, measEff, procEff)
[dirMain, stLineMain, atrSTMain] = f_supertrend(khma, atrLenE, facEff)

buyFlip  = showFlips and dirMain == 1 and dirMain[1] == -1
sellFlip = showFlips and dirMain == -1 and dirMain[1] == 1

f_dir_on_tf() =>
    khTF = f_khma(src, measEff, procEff)
    [dTF, _, _] = f_supertrend(khTF, atrLenE, facEff)
    dTF

dir2 = request.security(syminfo.tickerid, tf2Str, f_dir_on_tf(), barmerge.gaps_off, barmerge.lookahead_off)
dir3 = request.security(syminfo.tickerid, tf3Str, f_dir_on_tf(), barmerge.gaps_off, barmerge.lookahead_off)
dir4 = request.security(syminfo.tickerid, tf4Str, f_dir_on_tf(), barmerge.gaps_off, barmerge.lookahead_off)

aligned = true
if useAlign
    aligned := false
    if tfCount == 1
        aligned := (dirMain != 0)
    else if tfCount == 2
        aligned := (dirMain != 0 and dir2 == dirMain)
    else if tfCount == 3
        aligned := (dirMain != 0 and dir2 == dirMain and dir3 == dirMain)
    else
        aligned := (dirMain != 0 and dir2 == dirMain and dir3 == dirMain and dir4 == dirMain)

alignTurnOn = aligned and not aligned[1]
var int alignOnBar = na
if alignTurnOn
    alignOnBar := bar_index

inGrace = not na(alignOnBar) and (bar_index - alignOnBar <= alignGraceBars)
alignOK = useAlign ? (aligned or inGrace) : true

atrNow = ta.atr(atrFloorLen)

[pdi, mdi, adxVal] = ta.dmi(adxLen, adxSmooth)

atrOK = true
if useATRfloor and atrFloor > 0
    atrOK := (atrNow >= atrFloor)

rangeNow = ta.highest(high, tightLen) - ta.lowest(low, tightLen)
tightOK = true
if useTight

    tightOK := (rangeNow > atrNow * tightATRMult)

adxBaseOK = true
if useADXBase
    adxBaseOK := (adxVal >= adxMinEff)

noTrade = useNoTrade and (not atrOK or not tightOK or not adxBaseOK)
tradeOK = not noTrade

adxSlope = adxVal - adxVal[adxSlopeLenEff]

adxRisingOK = true
if useADXRising
    slopeOK = (not na(adxSlope)) and (adxSlope >= adxSlopeThreshEff)
    levelOK = (adxVal >= adxMinEff)
    adxRisingOK := (levelOK or slopeOK)

slope = khma - khma[1]
accel = slope - slope[1]

atrBase = ta.sma(atrNow, efLookbackATR)
volRatio = (atrBase > 0) ? (atrNow / atrBase) : 1.0
accelNorm = accel / math.max(atrNow, syminfo.mintick)

thresh = efBaseEff * (1.0 + (volRatio - 1.0) * efAdaptK)

earlyBuy  = useEarlyFlip and (slope > 0 and slope[1] <= 0) and (accelNorm >  thresh)
earlySell = useEarlyFlip and (slope < 0 and slope[1] >= 0) and (accelNorm < -thresh)

pendingBuy  = showPending and earlyBuy and not buyFlip
pendingSell = showPending and earlySell and not sellFlip

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

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

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

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

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

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

Стоимость полного кода
1 913,80₽ ≈ $23.39