Трейлинг-стоп по теням свечей (Wick Trailing Stop) с ATR в Pine Script v5

Трейлинг-стоп по теням свечей (Wick Trailing Stop) с ATR в Pine Script v5 Pine Script
Пошаговое руководство по созданию адаптивного трейлинг-стопа по теням свечей с учетом волатильности ATR в Pine Script v5. Готовый код стратегии.
Суть: Реализация динамического трейлинг-стопа в Pine Script v5, который следует за экстремумами свечей (тенями) с учетом текущей волатильности рынка через ATR. Это позволяет минимизировать ложные срабатывания при рыночном шуме.

Исходный код

Ниже представлен готовый код торговой стратегии на Pine Script v5. В качестве триггера для входа используется классическое пересечение скользящих средних EMA, а выход из позиции контролируется адаптивным трейлинг-стопом, привязанным к теням свечей (low для лонга и high для шорта) с фильтрацией шума через ta.atr().

Этот алгоритм отлично дополняет торговые системы, основанные на ликвидности, например, скрипт для выделения Order Blocks с проверкой объема, позволяя защищать прибыль при выходе из ключевых зон интереса.

//@version=5
strategy("Wick Trailing Stop with ATR", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// Inputs
atr_length = input.int(14, title="ATR Length", minval=1)
atr_mult = input.float(1.5, title="ATR Multiplier", step=0.1)
src_long = input.string("Wick (Low)", title="Long Trail Source", options=["Wick (Low)", "Close"])
src_short = input.string("Wick (High)", title="Short Trail Source", options=["Wick (High)", "Close"])

// Entry Conditions (Simple EMA Cross for demonstration)
fast_ema = ta.ema(close, 9)
slow_ema = ta.ema(close, 21)
long_cond = ta.crossover(fast_ema, slow_ema)
short_cond = ta.crossunder(fast_ema, slow_ema)

// ATR Calculation
atr = ta.atr(atr_length)

// Trailing Stop Variables
var float long_trail = na
var float short_trail = na

// Logic for Long Trailing Stop
long_source = src_long == "Wick (Low)" ? low : close
if strategy.position_size > 0
    float new_trail = long_source - (atr * atr_mult)
    long_trail := na(long_trail) ? new_trail : math.max(new_trail, long_trail)
else
    long_trail := na

// Logic for Short Trailing Stop
short_source = src_short == "Wick (High)" ? high : close
if strategy.position_size < 0
    float new_trail = short_source + (atr * atr_mult)
    short_trail := na(short_trail) ? new_trail : math.min(new_trail, short_trail)
else
    short_trail := na

// Strategy Execution
if long_cond and strategy.position_size <= 0
    strategy.entry("Long", strategy.long)
    long_trail := long_source - (atr * atr_mult)

if short_cond and strategy.position_size >= 0
    strategy.entry("Short", strategy.short)
    short_trail := short_source + (atr * atr_mult)

// Exit logic using trailing stops
if strategy.position_size > 0 and not na(long_trail)
    strategy.exit("Exit Long", "Long", stop=long_trail)

if strategy.position_size < 0 and not na(short_trail)
    strategy.exit("Exit Short", "Short", stop=short_trail)

// Plots
plot(fast_ema, color=color.blue, title="Fast EMA")
plot(slow_ema, color=color.orange, title="Slow EMA")
plot(strategy.position_size > 0 ? long_trail : na, color=color.green, style=plot.style_linebr, linewidth=2, title="Long Trailing Stop")
plot(strategy.position_size < 0 ? short_trail : na, color=color.red, style=plot.style_linebr, linewidth=2, title="Short Trailing Stop")

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

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

  • atr_length: Период усреднения True Range. Определяет глубину исторического окна для расчета текущей волатильности. Стандартное значение — 14.
  • atr_mult: Множитель волатильности. Умножается на значение ATR для создания буфера безопасности ниже low (для лонгов) или выше high (для шортов). Защищает от случайных рыночных шумов.
  • src_long / src_short: Источник расчета стопа. Позволяет переключаться между экстремумами свечей (тенями) и ценами закрытия (close) для сравнительного бэктеста.

Если вы ищете качественные паттерны для входа, которые можно защитить таким стопом, обратите внимание на Python скринер пин-баров с аномальным объемом, который находит идеальные точки разворота на множестве пар одновременно.

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

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

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

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

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

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

5. Перейдите в настройки добавленной стратегии, чтобы оптимизировать параметры atr_mult под ваш таймфрейм.

Помните, что волатильность ATR сильно зависит от времени суток и торговой сессии. Логику работы стопа можно существенно улучшить, если знать, как отрисовать торговые сессии в Pine Script v5, и динамически изменять множитель волатильности во время Азиатской или Нью-Йоркской сессий.

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