for для поиска и визуализации паттерна ‘Три маленьких индейца’ (Three Little Indians). Этот паттерн, состоящий из трех последовательных пиковых точек (минимумов или максимумов), часто сигнализирует о потенциальном развороте тренда.Исходный код
Паттерн ‘Три маленьких индейца’ (Three Little Indians) — это ценовая формация, которая может указывать на истощение текущего тренда и потенциальный разворот. В бычьем варианте это три последовательных более высоких минимума после нисходящего тренда, а в медвежьем — три последовательных более низких максимума после восходящего тренда. Наш скрипт будет использовать встроенные функции Pine Script для определения пивотов, а затем применять циклы for для итерации по этим пивотам и проверки условий паттерна.
Для более глубокого понимания работы с паттернами в Pine Script, рекомендуем ознакомиться с нашей статьей Поиск паттернов Гартли, Bat и Butterfly на матрицах в Pine Script v5.
//@version=5
indicator("Three Little Indians Pattern", overlay=true)
// --- Входные параметры ---
// Параметры для определения пивотов
i_lookback = input.int(20, "Pivot Lookback Bars", minval=5, maxval=100, tooltip="Количество баров для хранения истории пивотов.")
i_pivotStrength = input.int(2, "Pivot Strength (Left/Right Bars)", minval=1, maxval=10, tooltip="Количество баров слева и справа от пивота, которые должны быть ниже/выше для его определения.")
// Параметры для определения паттерна "Три индейца"
i_priceTolerancePct = input.float(1.5, "Price Tolerance % (Indians)", minval=0.1, maxval=10.0, step=0.1, tooltip="Максимально допустимое процентное отклонение между первым и третьим 'индейцем'.")
i_barTolerance = input.int(10, "Max Bar Distance (Indians)", minval=1, maxval=50, tooltip="Максимальное количество баров между первым и третьим 'индейцем'.")
// Параметры для определения тренда
i_trendLookback = input.int(50, "Trend Lookback Bars", minval=10, maxval=200, tooltip="Количество баров для расчета скользящей средней, используемой для определения текущего тренда.")
// Параметры отображения
i_showBullish = input.bool(true, "Show Bullish Patterns")
i_showBearish = input.bool(true, "Show Bearish Patterns")
i_bullishColor = input.color(color.new(color.lime, 0), "Bullish Color")
i_bearishColor = input.color(color.new(color.red, 0), "Bearish Color")
// --- Обнаружение пивотов ---
// Используем ta.pivothigh/pivotlow для эффективного нахождения пивотов.
// Затем будем использовать циклы for для итерации по этим найденным пивотам.
ph = ta.pivothigh(i_pivotStrength, i_pivotStrength)
pl = ta.pivotlow(i_pivotStrength, i_pivotStrength)
// Храним данные пивотов (значение и bar_index) в массивах.
// Используем var для инициализации массивов только один раз.
var float[] pivotHighValues = array.new_float()
var int[] pivotHighIndices = array.new_int()
var float[] pivotLowValues = array.new_float()
var int[] pivotLowIndices = array.new_int()
// Добавляем новые пивоты в массивы и ограничиваем их размер.
if not na(ph)
array.push(pivotHighValues, ph)
array.push(pivotHighIndices, bar_index)
if array.size(pivotHighValues) > i_lookback
array.shift(pivotHighValues)
array.shift(pivotHighIndices)
if not na(pl)
array.push(pivotLowValues, pl)
array.push(pivotLowIndices, bar_index)
if array.size(pivotLowValues) > i_lookback
array.shift(pivotLowValues)
array.shift(pivotLowIndices)
// --- Определение тренда ---
// Простая скользящая средняя для определения общего направления тренда.
ma = ta.sma(close, i_trendLookback)
isUptrend = close > ma and close[1] > ma[1] // Текущий и предыдущий бар выше MA
isDowntrend = close < ma and close[1] < ma[1] // Текущий и предыдущий бар ниже MA
// --- Обнаружение паттерна с использованием циклов for ---
var bool bullishPatternFound = false
var int[] bullishPatternIndices = array.new_int(3) // Индексы баров для 3-х индейцев
var float[] bullishPatternVals = array.new_float(3) // Значения цен для 3-х индейцев
var bool bearishPatternFound = false
var int[] bearishPatternIndices = array.new_int(3)
var float[] bearishPatternVals = array.new_float(3)
bullishPatternFound := false
bearishPatternFound := false
// Поиск бычьего паттерна "Три маленьких индейца" (три более высоких минимума после нисходящего тренда)
if i_showBullish and isDowntrend and array.size(pivotLowValues) >= 3
// Итерируем в обратном порядке по сохраненным пивот-минимумам
for i = array.size(pivotLowValues) - 1 to 2 // Необходимо как минимум 3 пивота
L3_val = array.get(pivotLowValues, i)
L3_idx = array.get(pivotLowIndices, i)
L2_val = array.get(pivotLowValues, i - 1)
L2_idx = array.get(pivotLowIndices, i - 1)
L1_val = array.get(pivotLowValues, i - 2)
L1_idx = array.get(pivotLowIndices, i - 2)
// Проверяем условия:
// 1. L1 < L2 < L3 (последовательные более высокие минимумы)
// 2. Ценовая толерантность: L3 не слишком далеко от L1 по цене
// 3. Временная толерантность: L3, L2, L1 находятся в пределах i_barTolerance баров друг от друга
// 4. L3 является достаточно недавним пивотом (в пределах 2*i_pivotStrength баров от текущего)
if L1_val < L2_val and L2_val < L3_val and
math.abs(L3_val - L1_val) / L1_val * 100 <= i_priceTolerancePct and
(L3_idx - L1_idx) <= i_barTolerance and
(bar_index - L3_idx) <= i_pivotStrength * 2 // L3 достаточно недавний
bullishPatternFound := true
array.set(bullishPatternIndices, 0, L1_idx)
array.set(bullishPatternIndices, 1, L2_idx)
array.set(bullishPatternIndices, 2, L3_idx)
array.set(bullishPatternVals, 0, L1_val)
array.set(bullishPatternVals, 1, L2_val)
array.set(bullishPatternVals, 2, L3_val)
break // Паттерн найден, выходим из цикла
// Поиск медвежьего паттерна "Три маленьких индейца" (три более низких максимума после восходящего тренда)
if i_showBearish and isUptrend and array.size(pivotHighValues) >= 3
// Итерируем в обратном порядке по сохраненным пивот-максимумам
for i = array.size(pivotHighValues) - 1 to 2 // Необходимо как минимум 3 пивота
H3_val = array.get(pivotHighValues, i)
H3_idx = array.get(pivotHighIndices, i)
H2_val = array.get(pivotHighValues, i - 1)
H2_idx = array.get(pivotHighIndices, i - 1)
H1_val = array.get(pivotHighValues, i - 2)
H1_idx = array.get(pivotHighIndices, i - 2)
// Проверяем условия:
// 1. H1 > H2 > H3 (последовательные более низкие максимумы)
// 2. Ценовая толерантность: H3 не слишком далеко от H1 по цене
// 3. Временная толерантность: H3, H2, H1 находятся в пределах i_barTolerance баров друг от друга
// 4. H3 является достаточно недавним пивотом (в пределах 2*i_pivotStrength баров от текущего)
if H1_val > H2_val and H2_val > H3_val and
math.abs(H3_val - H1_val) / H1_val * 100 <= i_priceTolerancePct and
(H3_idx - H1_idx) <= i_barTolerance and
(bar_index - H3_idx) <= i_pivotStrength * 2 // H3 достаточно недавний
bearishPatternFound := true
array.set(bearishPatternIndices, 0, H1_idx)
array.set(bearishPatternIndices, 1, H2_idx)
array.set(bearishPatternIndices, 2, H3_idx)
array.set(bearishPatternVals, 0, H1_val)
array.set(bearishPatternVals, 1, H2_val)
array.set(bearishPatternVals, 2, H3_val)
break // Паттерн найден, выходим из цикла
// --- Отображение паттернов ---
if bullishPatternFound
line.new(array.get(bullishPatternIndices, 0), array.get(bullishPatternVals, 0),
array.get(bullishPatternIndices, 1), array.get(bullishPatternVals, 1),
color=i_bullishColor, width=2, style=line.style_solid, xloc=xloc.bar_index)
line.new(array.get(bullishPatternIndices, 1), array.get(bullishPatternVals, 1),
array.get(bullishPatternIndices, 2), array.get(bullishPatternVals, 2),
color=i_bullishColor, width=2, style=line.style_solid, xloc=xloc.bar_index)
label.new(array.get(bullishPatternIndices, 2), array.get(bullishPatternVals, 2),
"3LI Bull", color=i_bullishColor, textcolor=color.white, style=label.style_label_up, xloc=xloc.bar_index)
if bearishPatternFound
line.new(array.get(bearishPatternIndices, 0), array.get(bearishPatternVals, 0),
array.get(bearishPatternIndices, 1), array.get(bearishPatternVals, 1),
color=i_bearishColor, width=2, style=line.style_solid, xloc=xloc.bar_index)
line.new(array.get(bearishPatternIndices, 1), array.get(bearishPatternVals, 1),
array.get(bearishPatternIndices, 2), array.get(bearishPatternVals, 2),
color=i_bearishColor, width=2, style=line.style_solid, xloc=xloc.bar_index)
label.new(array.get(bearishPatternIndices, 2), array.get(bearishPatternVals, 2),
"3LI Bear", color=i_bearishColor, textcolor=color.white, style=label.style_label_down, xloc=xloc.bar_index)
// Для отладки можно отображать сами пивоты
// plotshape(ph, "Pivot High", shape.triangledown, location.abovebar, color.red, size=size.tiny)
// plotshape(pl, "Pivot Low", shape.triangleup, location.belowbar, color.green, size=size.tiny)
Разбор параметров
Pivot Lookback Bars: Определяет максимальное количество последних пивотов, которые скрипт будет хранить в памяти для анализа. Чем больше значение, тем глубже история, но и больше потребление памяти.Pivot Strength (Left/Right Bars): Задает количество баров слева и справа от потенциального пивота, которые должны быть ниже (для максимума) или выше (для минимума), чтобы точка была признана пивотом. Большее значение делает пивоты более значимыми, но менее частыми.Price Tolerance % (Indians): Максимально допустимое процентное отклонение цены между первым и третьим 'индейцем' в паттерне. Это помогает отфильтровать паттерны, где пивоты слишком сильно расходятся по цене.Max Bar Distance (Indians): Максимальное количество баров, которое может разделять первый и третий 'индеец' в паттерне. Это гарантирует, что паттерн формируется в относительно короткий промежуток времени.Trend Lookback Bars: Количество баров, используемых для расчета простой скользящей средней (SMA), которая определяет текущий тренд. Паттерн 'Три маленьких индейца' является разворотным, поэтому важно определить предшествующий тренд.Show Bullish Patterns: Включение/отключение отображения бычьих паттернов на графике.Show Bearish Patterns: Включение/отключение отображения медвежьих паттернов на графике.Bullish Color: Цвет линий и метки для бычьего паттерна.Bearish Color: Цвет линий и метки для медвежьего паттерна.
Как запустить
Чтобы использовать этот скрипт в TradingView, выполните следующие шаги:
- Откройте TradingView и перейдите в редактор Pine Script (обычно находится в нижней части экрана).
- Убедитесь, что выбран Pine Script v5. Если нет, измените версию в настройках редактора.
- Скопируйте весь предоставленный выше код и вставьте его в редактор Pine Script, заменив любой существующий код.
- Нажмите кнопку 'Добавить на график' (Add to Chart).
- Скрипт появится на вашем графике, автоматически обнаруживая и отображая паттерны 'Три маленьких индейца' в соответствии с заданными параметрами. Вы можете настроить параметры через меню настроек индикатора на графике.
Для автоматизации торговых стратегий на основе обнаруженных паттернов, вы можете интегрировать Pine Script с внешними платформами, такими как Finandy, используя вебхуки. Подробнее об этом читайте в нашей статье Интеграция Pine Script v5 с Finandy через вебхуки. Также, для более продвинутого анализа рынка, рассмотрите возможность использования индикаторов, таких как Gamma Exposure, о котором мы писали в статье Расчет и отрисовка Gamma Exposure (GEX) в Pine Script v5.




