Динамический трейлинг-стоп по ATR в Pine Script v5: Инструкция

Динамический трейлинг-стоп по ATR в Pine Script v5: Инструкция Pine Script
Пошаговое руководство по созданию адаптивного трейлинг-стопа на основе индикатора ATR в Pine Script v5. Готовый код стратегии с разбором параметров.
Суть: Динамический трейлинг-стоп на основе ATR (Average True Range) адаптируется к текущей волатильности рынка. В периоды высокой турбулентности стоп-лосс расширяется, предотвращая случайный выход из сделки («рыночный шум»), а во время направленного тренда с низкой волатильностью — подтягивается ближе к цене, фиксируя накопленную прибыль. Реализация в Pine Script v5 требует использования глобальных переменных с ключевым словом var для сохранения уровня стопа между барами.

Исходный код

Ниже представлен готовый шаблон торговой стратегии в TradingView на языке Pine Script v5. В качестве триггера входа используется классическое пересечение скользящих средних EMA, а выход из позиции полностью контролируется динамическим трейлинг-стопом по ATR. Для крупных ордеров перед входом в позицию вы можете использовать Скрипт TWAP на Pine Script v5: Алгоритмическое исполнение, чтобы минимизировать проскальзывание.

//@version=5
strategy('ATR Dynamic Trailing Stop Strategy', overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Inputs
atrLength = input.int(14, title='ATR Length', minval=1)
atrMultiplier = input.float(3.0, title='ATR Multiplier', step=0.1)
src = input.source(close, title='Source')

// Entry Condition (Simple EMA Crossover)
fastEma = ta.ema(src, 9)
slowEma = ta.ema(src, 21)
longCondition = ta.crossover(fastEma, slowEma)
shortCondition = ta.crossunder(fastEma, slowEma)

// ATR Calculation
atrValue = ta.atr(atrLength)

// Trailing Stop Variables
var float longTrailingStop = na
var float shortTrailingStop = na

// Logic for Long Trailing Stop
if (strategy.position_size > 0)
    float newStop = close - (atrValue * atrMultiplier)
    longTrailingStop := na(longTrailingStop) ? newStop : math.max(newStop, longTrailingStop)
else
    longTrailingStop := na

// Logic for Short Trailing Stop
if (strategy.position_size < 0)
    float newStop = close + (atrValue * atrMultiplier)
    shortTrailingStop := na(shortTrailingStop) ? newStop : math.min(newStop, shortTrailingStop)
else
    shortTrailingStop := na

// Execution
if (longCondition and strategy.position_size <= 0)
    strategy.entry('Long', strategy.long)
    longTrailingStop := close - (atrValue * atrMultiplier)

if (shortCondition and strategy.position_size >= 0)
    strategy.entry('Short', strategy.short)
    shortTrailingStop := close + (atrValue * atrMultiplier)

// Exit orders based on trailing stop
if (strategy.position_size > 0)
    strategy.exit('Exit Long', 'Long', stop=longTrailingStop)

if (strategy.position_size < 0)
    strategy.exit('Exit Short', 'Short', stop=shortTrailingStop)

// Plotting
plot(strategy.position_size > 0 ? longTrailingStop : na, title='Long Trailing Stop', color=color.green, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? shortTrailingStop : na, title='Short Trailing Stop', color=color.red, style=plot.style_linebr, linewidth=2)
plot(fastEma, color=color.blue, title='Fast EMA')
plot(slowEma, color=color.orange, title='Slow EMA')

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

Для гибкой настройки алгоритма мы вынесли ключевые параметры в блок настроек скрипта:

  • atrLength: Период усреднения индикатора ATR. Стандартное значение — 14. Увеличение периода делает стоп-лосс более плавным, уменьшение — более чувствительным к последним изменениям цены.
  • atrMultiplier: Множитель волатильности. Определяет, на какое количество величин ATR стоп-лосс будет отстоять от экстремумов цены. Обычно настраивается в диапазоне от 1.5 до 3.5.
  • src: Источник данных для расчета скользящих средних (по умолчанию используется цена закрытия close).

Если вы хотите использовать более сложные сигналы для входа, рекомендуем обратить внимание на Pine Script v5: Скринер MACD кроссоверов для 40 тикеров, который поможет находить точки входа по множеству активов одновременно.

При работе с сеткой ордеров или усреднением позиций обязательно изучите материал Бэктест пирамидинга в Pine Script v5: Средняя цена входа, так как динамический стоп в таких сценариях должен рассчитываться от средней цены входа, а не от цены последнего бара.

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

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

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

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

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

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

5. Перейдите во вкладку Strategy Tester (Тестер стратегий), чтобы проанализировать результаты бэктеста, кривую доходности и просадку.

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