Технический трейдинг (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()`.
