Исходный код
Ниже представлен готовый код торговой стратегии на 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, и динамически изменять множитель волатильности во время Азиатской или Нью-Йоркской сессий.




