Технический трейдинг (Pine Script): Как правильно использовать функции ta.pivothigh и ta.pivotlow для автоматического определения уровней поддержки и сопротивления?

Функции ta.pivothigh и ta.pivotlow в Pine Script — это мощные инструменты для автоматического определения локальных экстремумов цены, которые служат основой для построения уровней поддержки и сопротивления.

## Синтаксис функций

pine
ta.pivothigh(source, leftbars, rightbars)
ta.pivotlow(source, leftbars, rightbars)

— **source** — источник данных (обычно high для pivothigh и low для pivotlow)
— **leftbars** — количество баров слева для подтверждения экстремума
— **rightbars** — количество баров справа для подтверждения экстремума

Функция возвращает значение цены в точке экстремума или `na`, если текущий бар не является пивотом.

## Базовый пример использования

pine
//@version=5
indicator(‘Pivot Support/Resistance’, overlay=true)

leftBars = input.int(5, ‘Left Bars’)
rightBars = input.int(5, ‘Right Bars’)

ph = ta.pivothigh(high, leftBars, rightBars)
pl = ta.pivotlow(low, leftBars, rightBars)

// Отрисовка уровней
if not na(ph)
line.new(bar_index[rightBars], ph, bar_index, ph, color=color.red, width=2)

if not na(pl)
line.new(bar_index[rightBars], pl, bar_index, pl, color=color.green, width=2)

## Важные нюансы

**Смещение баров**: Поскольку для подтверждения пивота нужны бары справа, сигнал появляется с задержкой на rightBars баров. Учитывайте это при построении стратегий.

**Хранение уровней**: Для построения горизонтальных линий поддержки/сопротивления удобно использовать массивы:

pine
var float[] resistanceLevels = array.new_float(0)
var float[] supportLevels = array.new_float(0)

if not na(ph)
array.push(resistanceLevels, ph)

if not na(pl)
array.push(supportLevels, pl)

**Фильтрация близких уровней**: Чтобы избежать дублирования, добавляйте проверку на минимальное расстояние между уровнями (например, через ATR).

## Продвинутое применение

Для построения динамических линий тренда соединяйте последовательные пивоты:

pine
var float prevPH = na
var int prevPHBar = na

if not na(ph)
if not na(prevPH)
line.new(prevPHBar, prevPH, bar_index[rightBars], ph, color=color.red)
prevPH := ph
prevPHBar := bar_index[rightBars]

## Рекомендации по настройке параметров

— **Скальпинг**: leftBars/rightBars = 2–3
— **Внутридневная торговля**: 5–8
— **Свинг-трейдинг**: 10–20

Большие значения дают более значимые уровни, но с большей задержкой. Меньшие значения — более чувствительные, но с большим шумом.

## Ограничение количества линий

Pine Script имеет лимит на количество объектов (500 линий по умолчанию). Используйте `line.delete()` для удаления старых линий или ограничивайте массивы через `array.shift()`.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.