OPEN-SOURCE SCRIPT

Intraday Futures Strategy with Filters

//version=5
indicator("Intraday Futures Strategy with Filters", overlay=true)

// === Параметры индикатора ===
// Скользящие средние
shortEmaLength = input.int(9, title="Короткая EMA", minval=1)
longEmaLength = input.int(21, title="Длинная EMA", minval=1)

// RSI
rsiLength = input.int(14, title="Период RSI", minval=1)
rsiThreshold = input.int(50, title="RSI Threshold", minval=1, maxval=100)

// ATR (волатильность)
atrLength = input.int(14, title="Период ATR")
atrMultiplier = input.float(1.0, title="ATR Multiplier", minval=0.1, step=0.1)

// Долгосрочный тренд
trendEmaLength = input.int(200, title="EMA для фильтра тренда", minval=1)

// Временные рамки
startHour = input.int(9, title="Час начала торговли", minval=0, maxval=23)
startMinute = input.int(0, title="Минута начала торговли", minval=0, maxval=59)
endHour = input.int(16, title="Час конца торговли", minval=0, maxval=23)
endMinute = input.int(0, title="Минута конца торговли", minval=0, maxval=59)

// Получаем текущие час и минуту
currentHour = hour(time)
currentMinute = minute(time)

// Проверка временного фильтра
timeFilter = (currentHour > startHour or (currentHour == startHour and currentMinute >= startMinute)) and
(currentHour < endHour or (currentHour == endHour and currentMinute <= endMinute))

// === Вычисления ===
// Скользящие средние
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
trendEma = ta.ema(close, trendEmaLength)

// RSI
rsi = ta.rsi(close, rsiLength)

// ATR
atr = ta.atr(atrLength)

// Сигналы пересечения EMA
bullishCrossover = ta.crossover(shortEma, longEma) // Короткая EMA пересекает длинную вверх
bearishCrossover = ta.crossunder(shortEma, longEma) // Короткая EMA пересекает длинную вниз

// Фильтры:
// 1. Трендовый фильтр: цена должна быть выше/ниже 200 EMA
longTrendFilter = close > trendEma
shortTrendFilter = close < trendEma

// 2. RSI фильтр
longRsiFilter = rsi > rsiThreshold
shortRsiFilter = rsi < rsiThreshold

// 3. Волатильность ATR: текущий диапазон должен быть больше заданного значения
atrFilter = (high - low) > atr * atrMultiplier

// Общие сигналы на покупку/продажу
buySignal = bullishCrossover and longTrendFilter and longRsiFilter and atrFilter and timeFilter
sellSignal = bearishCrossover and shortTrendFilter and shortRsiFilter and atrFilter and timeFilter

// === Графические элементы ===
// Отображение EMA на графике
plot(shortEma, color=color.blue, linewidth=2, title="Короткая EMA")
plot(longEma, color=color.orange, linewidth=2, title="Длинная EMA")
plot(trendEma, color=color.purple, linewidth=2, title="EMA для тренда (200)")

// Сигналы на графике
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")

// Фон для сигналов
bgcolor(buySignal ? color.new(color.green, 90) : sellSignal ? color.new(color.red, 90) : na, title="Signal Background")
Bands and ChannelsBill Williams IndicatorsCandlestick analysis

Skrypt open-source

W prawdziwym duchu TradingView autor tego skryptu opublikował go jako open source, aby inwestorzy mogli go zrozumieć i zweryfikować. Pozdrowienia dla autora! Możesz go używać bezpłatnie, ale ponowne użycie tego kodu w publikacji podlega Zasadom Regulaminu. Możesz go oznaczyć jako ulubione, aby użyć go na wykresie.

Chcesz użyć tego skryptu na wykresie?

Wyłączenie odpowiedzialności