Фильтрация ложных пробоев уровней в Pine Script v5: RSI и Объем

Фильтрация ложных пробоев уровней в Pine Script v5: RSI и Объем Pine Script
Пошаговое руководство по фильтрации ложных пробоев уровней поддержки и сопротивления в Pine Script v5 с помощью индикатора RSI и анализа объемов.
Суть: Для фильтрации ложных пробоев (bull/bear traps) используется комбинация пробоя локальных экстремумов (Pivot High/Low) с подтверждением от объема (выше скользящей средней) и осциллятора RSI (нахождение в зоне импульса без признаков перекупленности/перепроданности). Если объем низкий или RSI перегружен, пробой классифицируется как ложный.

Исходный код

Ложные пробои уровней поддержки и сопротивления — одна из главных причин убытков трейдеров, торгующих на пробой (breakout traders). Крупные игроки часто создают искусственную ликвидность, выбивая стопы розничных инвесторов. Чтобы отсечь такие ловушки, профессиональные кванты используют фильтрацию по объему и импульсу.

Представленный ниже скрипт на Pine Script v5 автоматически строит динамические уровни поддержки и сопротивления на основе локальных экстремумов ta.pivothigh() и ta.pivotlow(). Затем он анализирует пробой этих уровней. Истинным считается пробой, подтвержденный всплеском объема выше среднего значения и здоровым импульсом по ta.rsi(). Если эти условия не выполняются, скрипт маркирует пробой как ложный.

Этот алгоритм отлично дополняет автоматическое определение рыночной структуры (BOS и CHoCH) в Pine Script v5, позволяя входить только в истинные структурные сдвиги.

//@version=5
indicator('False Breakout Filter (Volume & RSI)', overlay=true, max_bars_back=500)

// Inputs
leftLen   = input.int(15, 'Pivot Left Bars', minval=1)
rightLen  = input.int(15, 'Pivot Right Bars', minval=1)
volLength = input.int(20, 'Volume MA Length')
volMult   = input.float(1.5, 'Volume Multiplier')
rsiLength = input.int(14, 'RSI Length')
rsiMaxOb  = input.float(70.0, 'RSI Max Overbought (Long Filter)')
rsiMinOs  = input.float(30.0, 'RSI Min Oversold (Short Filter)')

// Pivot Calculations for S/R
ph = ta.pivothigh(high, leftLen, rightLen)
pl = ta.pivotlow(low, leftLen, rightLen)

var float resistance = na
var float support = na

if not na(ph)
    resistance := ph
if not na(pl)
    support := pl

// RSI and Volume Calculations
rsiVal = ta.rsi(close, rsiLength)
volMa = ta.sma(volume, volLength)
isHighVolume = volume > (volMa * volMult)

// Breakout Conditions
breakoutUp   = ta.crossover(close, resistance)
breakoutDown = ta.crossunder(close, support)

// Filters
trueBreakoutUp   = breakoutUp and isHighVolume and (rsiVal > 50 and rsiVal < rsiMaxOb)
trueBreakoutDown = breakoutDown and isHighVolume and (rsiVal < 50 and rsiVal > rsiMinOs)

falseBreakoutUp   = breakoutUp and (not isHighVolume or rsiVal >= rsiMaxOb or rsiVal <= 50)
falseBreakoutDown = breakoutDown and (not isHighVolume or rsiVal <= rsiMinOs or rsiVal >= 50)

// Plotting S/R Levels
plot(resistance, 'Resistance', color=color.red, style=plot.style_linebr)
plot(support, 'Support', color=color.green, style=plot.style_linebr)

// Plot Signals
plotshape(trueBreakoutUp, title='True Bullish Breakout', style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal)
plotshape(falseBreakoutUp, title='False Bullish Breakout', style=shape.flag, location=location.abovebar, color=color.orange, size=size.normal)

plotshape(trueBreakoutDown, title='True Bearish Breakout', style=shape.triangledown, location=location.abovebar, color=color.red, size=size.normal)
plotshape(falseBreakoutDown, title='False Bearish Breakout', style=shape.flag, location=location.belowbar, color=color.purple, size=size.normal)

Разбор параметров

  • leftLen / rightLen: Количество баров слева и справа для определения локальных пиков и впадин. Чем больше значения, тем более глобальные уровни поддержки и сопротивления будут построены.
  • volLength: Период простой скользящей средней (ta.sma()) для расчета среднего объема торгов.
  • volMult: Множитель объема. Пробой считается истинным только в том случае, если текущий объем превышает среднее значение, умноженное на этот коэффициент (по умолчанию 1.5).
  • rsiLength: Стандартный период для расчета индекса относительной силы (ta.rsi()).
  • rsiMaxOb / rsiMinOs: Граничные значения перекупленности и перепроданности. Если при пробое сопротивления вверх RSI уже находится выше rsiMaxOb (например, 70), это сигнализирует об истощении импульса, и пробой классифицируется как ложный.

Как запустить

Чтобы запустить этот индикатор на платформе TradingView, выполните следующие шаги:

1. Откройте график любого актива на TradingView.

2. В нижней панели выберите вкладку Pine Editor.

3. Скопируйте предоставленный выше код и вставьте его в редактор, полностью заменив стандартный шаблон.

4. Нажмите кнопку Add to Chart (Добавить на график) в правом верхнем углу редактора.

После отладки сигналов вы можете настроить интеграцию Pine Script v5 с 3Commas для отправки кастомных JSON сигналов прямо на вашего торгового бота. Также для глубокого анализа коррелирующих активов рекомендуем изучить, как работают матрицы в Pine Script v5 для расчета корреляции криптовалют, чтобы фильтровать ложные движения за счет анализа рыночного контекста.

Оцените статью
FinFluct