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

Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in publication is governed by House rules. You can favorite it to use it on a chart.

Want to use this script on a chart?

Disclaimer