Динамическая стратегия ATR trailing stop loss и комбинирования скользящих средних с пересечением

EMA ATR RSI SMA VOLUME
Дата создания: 2025-02-18 15:48:18 Последнее изменение: 2025-02-18 15:48:18
Копировать: 1 Количество просмотров: 504
1
Подписаться
1617
Подписчики

Динамическая стратегия ATR trailing stop loss и комбинирования скользящих средних с пересечением

Обзор

Стратегия представляет собой сложную торговую систему, основанную на ATR, динамически отслеживающую стоп-порог и перекрёстку равновесия, в сочетании с несколькими техническими показателями для фильтрации сделок и контроля риска. Стратегия работает в 15-минутный период времени, определяет торговые сигналы с помощью многомерных показателей, таких как средняя линия EMA, ATR-волатильность, RSI-индикатор и объем сделок, и использует динамически отслеживаемый метод управления риском.

Стратегический принцип

Основная логика стратегии включает в себя следующие ключевые компоненты:

  1. Условия приема с использованием нескольких фильтров:
    • Цена находится выше/ниже 100-циклической ЭМА
    • Тенденция 100 EMA на часовой период подтверждена
    • Пересечение цены с ATR, отслеживающей стоп-линию
    • RSI в нейтральной зоне между 30 и 70
    • Текущий объем сделок больше, чем в среднем за 20 циклов
  2. Система управления рисками:
    • Остановка убытков с динамическим отслеживанием на основе 3-кратного ATR
    • Настройка ATR в два раза в качестве целевой прибыли
  3. Механизм выхода из игры:
    • 15 и 17 циклов EMA с перекрестным сигналом двух последовательных K-линий
    • Триггер для отслеживания стоп-лосса или прибыли

Стратегические преимущества

  1. Круговая проверка многочисленных технических показателей, эффективное снижение ложных сигналов
  2. Использование многоциклической фильтрации тенденций для повышения точности направления торговли
  3. Динамические остановки ATR могут быть адаптированы к рыночным колебаниям
  4. Цель прибыли привязана к остановке убытков, обеспечивая динамический баланс между риском и прибылью
  5. Используйте перекресток EMA в качестве сигнала для выхода из игры, чтобы избежать преждевременного выхода из игры.
  6. Подтверждение количества сделок повышает эффективность сделки

Стратегический риск

  1. Многочисленные условия фильтрации могут привести к упущенным возможностям.
  2. ATR-стоп может быть слишком широким в условиях резкой волатильности рынка
  3. Последовательное перекрестное выступление на EMA может привести к частичному возврату прибыли
  4. Сильная зависимость от рыночных тенденций, возможно, плохая динамика во время колебаний рынка
  5. Высокая сложность вычислений, возможные риски задержки выполнения

Направление оптимизации стратегии

  1. Внедрение механизма оптимизации адаптивных параметров:
    • ATR может быть изменен в зависимости от динамики рынка
    • EMA-циклы автоматически оптимизируются на основе рыночных колебаний
  2. Повышение идентификации состояния рынка:
    • Добавить индикатор силы тренда
    • Введение циклического суждения волатильности
  3. Улучшить контроль рисков:
    • Поэтапное строительство и уменьшение складов
    • Увеличение максимального срока хранения
  4. Оптимизация механизма выхода из игры:
    • Динамическая корректировка целевых показателей прибыли в сочетании с интенсивностью тенденции
    • Добавление механизма временной потери

Подвести итог

Стратегия создает относительно целостную торговую систему, использующую в комплексе несколько технических показателей и средств контроля риска. Основная особенность стратегии заключается в использовании динамического ATR для отслеживания остановок, чтобы адаптироваться к рыночным колебаниям, а также использование фильтрации с использованием нескольких показателей и скрещивания равномерных линий для подтверждения торговых сигналов. Хотя есть определенное пространство для оптимизации, общая концепция дизайна соответствует требованиям современной количественной торговли и имеет хорошую практическую ценность.

Исходный код стратегии
/*backtest
start: 2024-02-19 00:00:00
end: 2025-02-16 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title='UT Bot Strategy with 100 EMA Filter, Trailing Stop and EMA Cross Exit', overlay=true)

// Inputs
a = input(1, title='Key Value. \'This changes the sensitivity\'')
c = input(10, title='ATR Period')
h = input(false, title='Signals from Heikin Ashi Candles')

// Higher timeframe trend filter (1-hour)
higherTimeframeEMA = request.security(syminfo.tickerid, "60", ta.ema(close, 100)) // 1-hour EMA

xATR = ta.atr(c)

// Adjusting ATR multiplier for Gold on 15-minute timeframe
atrMultiplier = 3
nLoss = atrMultiplier * xATR  // ATR-based loss calculation

src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close, lookahead=barmerge.lookahead_off) : close

// Trailing Stop Calculation
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2

pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

// Define 100 EMA
ema100 = ta.ema(src, 100)
plot(ema100, title="100 EMA", color=color.black, linewidth=2)

// Define 15 EMA and 17 EMA for exit conditions
ema15 = ta.ema(src, 15)
ema17 = ta.ema(src, 17)
plot(ema15, title="15 EMA", color=color.blue, linewidth=1)
plot(ema17, title="17 EMA", color=color.purple, linewidth=1)

// Define Entry Conditions
longCondition = src > ema100 and src > xATRTrailingStop and close > higherTimeframeEMA and ta.crossover(ta.ema(src, 1), xATRTrailingStop)
shortCondition = src < ema100 and src < xATRTrailingStop and close < higherTimeframeEMA and ta.crossover(xATRTrailingStop, ta.ema(src, 1))

// RSI Filter
rsi = ta.rsi(close, 14)
longCondition := longCondition and rsi > 30 and rsi < 70  // Ensure RSI is not in extreme conditions
shortCondition := shortCondition and rsi > 30 and rsi < 70

// Volume Filter
volumeMA = ta.sma(volume, 20)
longCondition := longCondition and volume > volumeMA
shortCondition := shortCondition and volume > volumeMA

// ** Trailing Stop Setup **
trailOffset = nLoss  // The trailing stop distance is based on ATR, which is already calculated
trailPriceLong = close - trailOffset  // The trailing stop for long trades is below the entry price
trailPriceShort = close + trailOffset  // The trailing stop for short trades is above the entry price

// Define Take Profit (TP) condition
takeProfitMultiplier = 2  // This sets the take profit at 2x the ATR from the entry
takeProfitLong = close + takeProfitMultiplier * nLoss
takeProfitShort = close - takeProfitMultiplier * nLoss

// Strategy Entries
if (longCondition)
    strategy.entry('long', strategy.long)

if (shortCondition)
    strategy.entry('short', strategy.short)

// Exit conditions for 15 and 17 EMA cross (must be consecutive on two bars)
exitLong = ta.crossover(ema15, ema17) and ta.crossover(ema15[1], ema17[1])  // Exit long if both the current and previous bars have 15 EMA crossing above 17 EMA
exitShort = ta.crossunder(ema15, ema17) and ta.crossunder(ema15[1], ema17[1])  // Exit short if both the current and previous bars have 15 EMA crossing below 17 EMA

// Apply trailing stop and take profit along with EMA cross exit
strategy.exit("Exit Long", "long", trail_price=trailPriceLong, trail_offset=trailOffset, limit=takeProfitLong)  // Long exit with trailing stop and TP
strategy.exit("Exit Short", "short", trail_price=trailPriceShort, trail_offset=trailOffset, limit=takeProfitShort)  // Short exit with trailing stop and TP

// Close positions when 15 and 17 EMAs cross consecutively
strategy.close("long", when=exitLong)
strategy.close("short", when=exitShort)

// Alert condition for trade closure
longExitAlert = exitLong  // Only trigger alert for long if both consecutive bars show crossover
shortExitAlert = exitShort  // Only trigger alert for short if both consecutive bars show crossunder

alertcondition(longExitAlert, title="Close Long Trade", message="Long trade closed. 15 EMA crossed above 17 EMA on two consecutive bars.")
alertcondition(shortExitAlert, title="Close Short Trade", message="Short trade closed. 15 EMA crossed below 17 EMA on two consecutive bars.")