Торговая система, следующая за трендом, с динамическим трейлинг-стоп-лоссом ATR

ATR EMA ROI TSL
Дата создания: 2025-02-20 13:22:24 Последнее изменение: 2025-02-20 14:53:21
Копировать: 2 Количество просмотров: 445
2
Подписаться
319
Подписчики

Торговая система, следующая за трендом, с динамическим трейлинг-стоп-лоссом ATR Торговая система, следующая за трендом, с динамическим трейлинг-стоп-лоссом ATR

Обзор

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

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

  1. Используйте индикатор ATR для расчета величины колебаний цены и определения стоп-дистанции отслеживания в соответствии с установленным коэффициентом чувствительности (Key Value)
  2. Посредством средней линии EMA можно определить направление рыночной тенденции, открывая многопорядочные ордера только в том случае, если цена находится выше средней линии, и открывая пустые ордера только в том случае, если цена находится ниже средней линии
  3. Сигнал для торговли срабатывает, когда цена пересекает линию стоп-лосса и соответствует тренду.
  4. Система использует методы поэтапного получения прибыли для управления позициями:
    • Прибыль 20%-50% будет увеличена до уровня стоимости-цены.
    • При прибыли 50% - 80%, часть прибыли закрывается и затягивается остановка убытка
    • В случае прибыли в размере 80%-100% дополнительно ужесточают защиту прибыли от остановки
    • Если выручка превышает 100%, выигрыш будет равным погашению.

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

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

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

  1. Частые сделки могут привести к убыткам на нестабильных рынках
  2. Начало обратного тренда может привести к значительному отступлению
  3. Неправильные настройки параметров могут повлиять на эффективность стратегии Предложения по контролю рисков:
  • Рекомендуется использовать на рынках с заметной тенденцией
  • Осторожно выбирайте параметры, которые можно оптимизировать с помощью обратного измерения
  • Настройка максимального ограничения на отзыв
  • Рассмотрение дополнительных рыночных фильтров

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

  1. Добавление механизмов идентификации рыночных условий с использованием различных параметров в различных рыночных условиях
  2. Введение вспомогательных показателей, таких как трафик, повышает надежность сигнала
  3. Оптимизация механизмов управления прибылью, динамическая корректировка целевой прибыли в соответствии с волатильностью
  4. Увеличение временной фильтрации, чтобы избежать торговли в неблагоприятное время
  5. Рассмотреть возможность добавления фильтра волатильности, чтобы снизить частоту торговли при чрезмерной волатильности

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

Это целостная, логически ясная система отслеживания трендов. Благодаря динамическому отслеживанию ATR и комбинации фильтрации трендов EMA, лучше контролируется риск при одновременном удержании тренда. Дизайн механизма поэтапной прибыли также отражает зрелое мышление о торговле.

Исходный код стратегии
/*backtest
start: 2024-10-15 00:00:00
end: 2025-02-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Enhanced UT Bot with Long & Short Trades", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Input Parameters
keyvalue = input.float(1.1, title="Key Value (Sensitivity)", step=0.1)
atrperiod = input.int(200, title="ATR Period")
emaPeriod = input.int(50, title="EMA Period")
roi_close = input.float(100, title="Close Trade at ROI (%)", step=1)

// ATR Calculation
src = close
xATR = ta.atr(atrperiod)
nLoss = keyvalue * xATR

// EMA for Trend Filtering
ema = ta.ema(src, emaPeriod)

// Trailing Stop Logic
var float xATRTrailingStop = na
if na(xATRTrailingStop)
    xATRTrailingStop := src - nLoss

if src > nz(xATRTrailingStop[1]) and src[1] > nz(xATRTrailingStop[1])
    xATRTrailingStop := math.max(nz(xATRTrailingStop[1]), src - nLoss)
else if src < nz(xATRTrailingStop[1]) and src[1] < nz(xATRTrailingStop[1])
    xATRTrailingStop := math.min(nz(xATRTrailingStop[1]), src + nLoss)
else
    xATRTrailingStop := src > nz(xATRTrailingStop[1]) ? src - nLoss : src + nLoss

// Buy/Sell Signal with Trend Filter
buySignal = ta.crossover(src, xATRTrailingStop) and src > ema
sellSignal = ta.crossunder(src, xATRTrailingStop) and src < ema

// Strategy Logic: Long Trades
if buySignal and strategy.position_size <= 0
    strategy.entry("Buy", strategy.long)

if sellSignal and strategy.position_size > 0
    strategy.close("Buy")

// Strategy Logic: Short Trades
if sellSignal and strategy.position_size >= 0
    strategy.entry("Sell", strategy.short)

if buySignal and strategy.position_size < 0
    strategy.close("Sell")

// ROI Calculation for Both Long and Short Trades
var float entryPrice = na
var bool isLong = na
if strategy.position_size > 0
    entryPrice := strategy.opentrades.entry_price(0)
    isLong := true
if strategy.position_size < 0
    entryPrice := strategy.opentrades.entry_price(0)
    isLong := false

// Calculate current profit
currentProfit = isLong ? (close - entryPrice) / entryPrice * 100 : (entryPrice - close) / entryPrice * 100

// Enhanced ROI Management
if strategy.position_size > 0 // Long Position
    if currentProfit >= 20 and currentProfit < 50
        stopLevel = entryPrice // Breakeven
        strategy.exit("TSL Breakeven", from_entry="Buy", stop=stopLevel)
    if currentProfit >= 50 and currentProfit < 80
        stopLevel = entryPrice * 1.30 // 30% ROI
        strategy.exit("TSL 30%", from_entry="Buy", stop=stopLevel)
        strategy.close("Partial Profit", qty_percent=50) // Take 50% profit
    if currentProfit >= 80 and currentProfit < roi_close
        stopLevel = entryPrice * 1.60 // 60% ROI
        strategy.exit("TSL 60%", from_entry="Buy", stop=stopLevel)
    if currentProfit >= roi_close
        strategy.close("Full Exit at 100% ROI")

if strategy.position_size < 0 // Short Position
    if currentProfit >= 20 and currentProfit < 50
        stopLevel = entryPrice // Breakeven
        strategy.exit("TSL Breakeven", from_entry="Sell", stop=stopLevel)
    if currentProfit >= 50 and currentProfit < 80
        stopLevel = entryPrice * 0.70 // 30% ROI (Short stop)
        strategy.exit("TSL 30%", from_entry="Sell", stop=stopLevel)
        strategy.close("Partial Profit", qty_percent=50) // Take 50% profit
    if currentProfit >= 80 and currentProfit < roi_close
        stopLevel = entryPrice * 0.40 // 60% ROI (Short stop)
        strategy.exit("TSL 60%", from_entry="Sell", stop=stopLevel)
    if currentProfit >= roi_close
        strategy.close("Full Exit at 100% ROI")

// Plotting
plot(xATRTrailingStop, color=buySignal ? color.green : sellSignal ? color.red : color.gray, title="Trailing Stop")
plot(ema, color=color.blue, title="EMA Trend Filter")
plotshape(buySignal, title="Buy Signal", style=shape.labelup, location=location.belowbar, color=color.green, text="Buy")
plotshape(sellSignal, title="Sell Signal", style=shape.labeldown, location=location.abovebar, color=color.red, text="Sell")