Стратегия многоуровневой фиксации прибыли EMA-ADX для динамического отслеживания тренда

EMA ADX ATR
Дата создания: 2025-02-18 14:08:02 Последнее изменение: 2025-02-18 14:08:02
Копировать: 0 Количество просмотров: 405
1
Подписаться
1617
Подписчики

Стратегия многоуровневой фиксации прибыли EMA-ADX для динамического отслеживания тренда

Обзор

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

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

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

  1. Используйте 50-циклическую среднюю линию EMA для определения направления тренда, цена пробивает верхнюю часть EMA, открывает больше, пробивает нижнюю часть, открывает больше
  2. Фильтрация слабых тенденций с помощью 14-циклического индикатора ADX, подтверждение эффективности тенденции при ADX> 20
  3. Динамическая стоп-позиция, рассчитанная на основе 14-циклического ATR, плюс 1 ATR на минимальную цену, плюс 1 ATR на максимальную цену
  4. Трехслойный тормозный механизм:
    • Первый уровень: 30% позиции в 1x ATR.
    • Второй уровень: 50% позиции в 2 раза ATR.
    • Третий уровень: 20% позиций используют мобильный стоп с 3-кратным ATR
  5. Когда цена достигнет второго уровня остановки, автоматически ликвидировать все оставшиеся позиции

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

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

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

  1. Частые входы и выходы могут привести к увеличению затрат в условиях нестабильного рынка
  2. EMA как отсталый индикатор может не реагировать вовремя при быстром развороте
  3. Фиксированный порог ADX может нуждаться в корректировке в различных рыночных условиях
  4. Многоуровневый стоп может быть преждевременно снижен в одностороннем тренде Меры по смягчению последствий:
  • В зависимости от динамики рыночных циклов можно корректировать порог ADX
  • Рассмотреть возможность увеличения показателей подтверждения тенденции
  • Оптимизация более детальных параметров для коэффициента остановки

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

  1. Введение показателя объема сделок для усиления подтверждения тенденций
  2. Снижение ADX в зависимости от динамики волатильности рынка
  3. Оптимизация пропорций распределения позиций на уровне сдерживания
  4. Увеличение степени интенсивности тренда в соответствии с различными стратегиями остановки
  5. С учетом сезонности и цикличности рынка

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

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

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

//@version=6
strategy("BTC Optimized Strategy v6", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=250)

// === 參數設定 ===
lengthEMA = input(50, title="EMA 週期")
adxLength = input(14, title="ADX 週期")
atrLength = input(14, title="ATR 週期")
riskReward = input(2.0, title="風險報酬比")
tp1_ratio = input(1.0, title="TP1 (ATR 倍數)")
tp2_ratio = input(2.0, title="TP2 (ATR 倍數)")
trailATR = input(3.0, title="移動止盈 ATR 倍數")

// === 計算技術指標 ===
ema = ta.ema(close, lengthEMA)
atr = ta.atr(atrLength)

// === 計算 ADX ===
upMove = math.max(high - nz(high[1], high), 0)
downMove = math.max(nz(low[1], low) - low, 0)
tr = math.max(math.max(high - low, math.abs(high - nz(close[1], close))), math.abs(low - nz(close[1], close)))
plusDM = upMove > downMove and upMove > 0 ? upMove : 0
minusDM = downMove > upMove and downMove > 0 ? downMove : 0
plusDI = 100 * ta.rma(plusDM, adxLength) / ta.rma(tr, adxLength)
minusDI = 100 * ta.rma(minusDM, adxLength) / ta.rma(tr, adxLength)
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)

// === 趨勢過濾條件 ===
isTrending = adx > 20

// === 進場條件 ===
longCondition = ta.crossover(close, ema) and isTrending
shortCondition = ta.crossunder(close, ema) and isTrending

// === 計算止損、止盈價格 ===
longStopLoss = low - atr
shortStopLoss = high + atr
longTP1 = close + tp1_ratio * atr
longTP2 = close + tp2_ratio * atr
shortTP1 = close - tp1_ratio * atr
shortTP2 = close - tp2_ratio * atr

// === 設定進場和出場 ===
if longCondition
    strategy.entry("Long", strategy.long)
    strategy.exit("Long_Exit1", from_entry="Long", qty_percent=30, limit=longTP1, stop=longStopLoss)
    strategy.exit("Long_Exit2", from_entry="Long", qty_percent=50, limit=longTP2, stop=longStopLoss)
    strategy.exit("Long_Trail", from_entry="Long", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

if shortCondition
    strategy.entry("Short", strategy.short)
    strategy.exit("Short_Exit1", from_entry="Short", qty_percent=30, limit=shortTP1, stop=shortStopLoss)
    strategy.exit("Short_Exit2", from_entry="Short", qty_percent=50, limit=shortTP2, stop=shortStopLoss)
    strategy.exit("Short_Trail", from_entry="Short", qty_percent=20, 
                 trail_points=atr * trailATR, 
                 trail_offset=atr * trailATR)

// === 當價格超過 TP2 後,自動平倉 ===
if close >= longTP2
    strategy.close("Long")

if close <= shortTP2
    strategy.close("Short")

// === 畫圖標示 ===
plotshape(series=longCondition, location=location.belowbar, color=color.blue, style=shape.labelup, title="買入")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="賣出")
plot(ema, color=color.orange, title="EMA")