request.security для получения данных RSI с более высокого таймфрейма. Скрипт идентифицирует ситуации, когда цена формирует более высокий минимум, а RSI — более низкий минимум, что является сигналом продолжения нисходящего тренда.Исходный код
Представленный ниже Pine Script v5 код разработан для автоматического поиска скрытой медвежьей дивергенции на графике. Он использует индикатор RSI и функцию request.security для получения значений RSI с указанного более высокого таймфрейма. Это позволяет анализировать трендовые условия на старшем таймфрейме, выявляя потенциальные точки продолжения нисходящего движения на текущем графике. Для обнаружения дивергенции скрипт ищет два последовательных минимума цены и два соответствующих минимума RSI, сравнивая их значения и временные метки.
//@version=5
indicator("Hidden Bearish Divergence (RSI, HTF)", overlay=true, max_bars_back=500)
// --- Входные параметры ---
// Длина RSI
rsi_length = input.int(14, 'RSI Length', minval=1)
// Количество баров слева и справа для определения пивотов (ta.pivotlow)
left_bars = input.int(5, 'Pivot Left Bars', minval=1)
right_bars = input.int(5, 'Pivot Right Bars', minval=1)
// Максимальное количество баров для поиска дивергенции между двумя пивотами
max_divergence_bars = input.int(50, 'Max Divergence Lookback Bars', minval=10)
// Высший таймфрейм для RSI (например, "60" для 1 часа, "240" для 4 часов)
htf = input.timeframe('60', 'Higher Timeframe')
// --- Расчет RSI текущего таймфрейма ---
rsi_current = ta.rsi(close, rsi_length)
// --- Получение RSI с высшего таймфрейма через request.security ---
// Используем rsi_current как выражение для request.security.
// lookahead=barmerge.lookahead_on критически важен для предотвращения перерисовки
// при получении данных с более высокого таймфрейма.
htf_rsi = request.security(syminfo.tickerid, htf, rsi_current, lookahead=barmerge.lookahead_on)
// --- Логика обнаружения дивергенции ---
// Переменные для хранения двух последних пивотных минимумов цены и RSI
var float p_low1 = na, p_low2 = na // p_low1 - более свежий минимум цены, p_low2 - предыдущий
var int p_idx1 = na, p_idx2 = na // p_idx1 - индекс более свежего минимума цены, p_idx2 - предыдущего
var float r_low1 = na, r_low2 = na // r_low1 - более свежий минимум RSI, r_low2 - предыдущий
var int r_idx1 = na, r_idx2 = na // r_idx1 - индекс более свежего минимума RSI, r_idx2 - предыдущего
// Обнаружение пивотных минимумов цены и RSI
is_price_pivot_low = ta.pivotlow(low, left_bars, right_bars)
is_rsi_pivot_low = ta.pivotlow(htf_rsi, left_bars, right_bars)
// Обновление последних пивотных минимумов цены
if is_price_pivot_low
p_low2 := p_low1
p_idx2 := p_idx1
p_low1 := low[right_bars] // Значение в точке пивота
p_idx1 := bar_index - right_bars // Индекс точки пивота
// Обновление последних пивотных минимумов RSI
if is_rsi_pivot_low
r_low2 := r_low1
r_idx2 := r_idx1
r_low1 := htf_rsi[right_bars] // Значение в точке пивота
r_idx1 := bar_index - right_bars // Индекс точки пивота
// Проверка условий скрытой медвежьей дивергенции
// Условия:
// 1. Цена формирует более высокий минимум (Higher Low).
// 2. RSI формирует более низкий минимум (Lower Low).
// 3. Пивоты должны быть выровнены по времени (происходить примерно в одно и то же время).
// 4. Более старый пивот должен находиться в пределах max_divergence_bars.
var bool is_hidden_bearish = false
is_hidden_bearish := false // Сброс на каждом баре
if not na(p_low1) and not na(p_low2) and not na(r_low1) and not na(r_low2)
// Убедимся, что пивоты упорядочены по времени (более свежий > предыдущего)
if p_idx1 > p_idx2 and r_idx1 > r_idx2
// Убедимся, что более старые пивоты находятся в пределах окна поиска
if (bar_index - p_idx2 <= max_divergence_bars) and (bar_index - r_idx2 <= max_divergence_bars)
// Проверка выравнивания пивотов цены и RSI по времени
// Текущий пивот цены (p_idx1) должен быть близок к текущему пивоту RSI (r_idx1)
// Предыдущий пивот цены (p_idx2) должен быть близок к предыдущему пивоту RSI (r_idx2)
if math.abs(p_idx1 - r_idx1) <= right_bars and math.abs(p_idx2 - r_idx2) <= right_bars
// Условия скрытой медвежьей дивергенции:
// Цена: Higher Low (p_low1 > p_low2)
// RSI: Lower Low (r_low1 < r_low2)
if p_low1 > p_low2 and r_low1 < r_low2
is_hidden_bearish := true
// --- Визуализация ---
// Отображение RSI с высшего таймфрейма
plot(htf_rsi, 'HTF RSI', color.new(color.blue, 0), linewidth=2)
// Отображение RSI текущего таймфрейма (для сравнения)
plot(rsi_current, 'Current RSI', color.new(color.orange, 0), linewidth=1)
// Отмечаем скрытую медвежью дивергенцию на графике
plotshape(is_hidden_bearish, title='Hidden Bearish Divergence', location=location.abovebar, color=color.new(color.red, 0), style=shape.triangledown, size=size.small)
// Опционально: отображение пивотов для отладки/визуализации
// plotchar(is_price_pivot_low, 'Price Pivot Low', 'P', location.belowbar, color.new(color.green, 0), size=size.tiny)
// plotchar(is_rsi_pivot_low, 'RSI Pivot Low', 'R', location.abovebar, color.new(color.purple, 0), size=size.tiny)
// Дополнительные линии для визуализации дивергенции (более сложная реализация, здесь не включена для простоты)
// Для отрисовки линий необходимо сохранять индексы и значения конкретных пивотов, сформировавших дивергенцию.
Разбор параметров
rsi_length: Длина периода для расчета индикатора RSI. Стандартное значение — 14.left_bars: Количество баров слева от центрального бара, используемых функциейta.pivotlowдля определения пивотного минимума. Чем больше значение, тем более значимые пивоты будут найдены.right_bars: Количество баров справа от центрального бара, используемых функциейta.pivotlowдля определения пивотного минимума. Аналогичноleft_bars, влияет на значимость пивотов.max_divergence_bars: Максимальное количество баров, в пределах которого скрипт будет искать два пивота для формирования дивергенции. Это окно поиска для предыдущего пивота относительно текущего.htf: (Higher Timeframe) Высший таймфрейм, с которого будут запрашиваться данные RSI с помощьюrequest.security. Например, '60' для часового графика, '240' для 4-часового. Использование более высокого таймфрейма помогает сгладить шум и подтвердить тренд, что особенно полезно при поиске скрытых дивергенций. Подробнее о работе с данными с разных таймфреймов можно узнать в статье Интеграция Open Interest из Binance Futures в Pine Script v5 через request.seed, где также используется механизм запроса данных.
Как запустить
Для того чтобы использовать данный скрипт в TradingView и начать поиск скрытой медвежьей дивергенции, выполните следующие шаги:
-
Откройте TradingView: Перейдите на сайт TradingView и откройте график интересующего вас актива.
-
Откройте Pine Editor: В нижней части экрана TradingView найдите вкладку 'Pine Editor' и нажмите на нее.
-
Создайте новый скрипт: Удалите весь существующий код в редакторе (если он есть) и вставьте предоставленный выше код в окно Pine Editor.
-
Добавьте на график: Нажмите кнопку 'Add to Chart' (Добавить на график) в правом верхнем углу Pine Editor.
-
Настройте параметры: После добавления скрипта на график, он появится в списке индикаторов. Нажмите на значок шестеренки (Настройки) рядом с названием индикатора 'Hidden Bearish Divergence (RSI, HTF)'. В открывшемся окне вы сможете настроить параметры, такие как
RSI Length,Pivot Left Bars,Pivot Right Bars,Max Divergence Lookback BarsиHigher Timeframe. Экспериментируйте с этими значениями, чтобы найти оптимальные настройки для вашего стиля торговли и актива. Например, для более точного бэктеста стратегий на различных типах графиков, таких как ренко, может потребоваться адаптация параметров, как описано в статье Бэктест стратегии на ренко-графиках в Pine Script v5 без перерисовки. -
Анализируйте сигналы: Скрипт будет автоматически отмечать на графике места обнаружения скрытой медвежьей дивергенции красными треугольниками, указывающими вниз. Эти сигналы могут служить подтверждением продолжения нисходящего тренда. Помните, что дивергенции лучше всего работают в сочетании с другими инструментами технического анализа, такими как уровни поддержки/сопротивления и объем, для фильтрации ложных сигналов, о чем говорится в статье Фильтрация ложных пробоев уровней в Pine Script v5: RSI и Объем.




