Динамическая стратегия стоп-лосса с кроссовером индикатора импульса


Дата создания: 2024-02-29 13:55:16 Последнее изменение: 2024-02-29 13:55:16
Копировать: 0 Количество просмотров: 671
1
Подписаться
1617
Подписчики

Динамическая стратегия стоп-лосса с кроссовером индикатора импульса

Обзор

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

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

  1. Используйте краткосрочную 9-дневную ЭМА и долгосрочную 21-дневную ЭМА, чтобы построить индикатор движущегося среднего значения. Создание сигнала покупки при прохождении долгосрочной ЭМА над краткосрочной ЭМА; создание сигнала продажи при прохождении долгосрочной ЭМА под краткосрочной ЭМА.
  2. Используйте ADX, +DI и -DI, чтобы построить индикатор DMI.
  3. Комбинируя сигналы EMA и DMI, фактический сигнал покупки и продажи будет выпущен только тогда, когда оба индикатора будут удовлетворены.
  4. Используйте динамические стоп-стопы для отслеживания наивысшей / наименьшей цены.

Анализ преимуществ

  1. Двойные индикаторы в сочетании с фильтрацией ложных сигналов повышают точность сигналов. Краткосрочные индикаторы улавливают изменения в тренде; долгосрочные индикаторы определяют направление большого тренда.
  2. Двигательный индикатор может заранее улавливать ценовые тенденции и обладает определенными ведущими характеристиками.
  3. Динамический механизм остановки убытков позволяет максимально закрепить прибыль и одновременно контролировать риски.

Анализ рисков

  1. При сочетании двух индикаторов, сигналы покупки и продажи уменьшаются, и возможно, некоторые возможности пропадают.
  2. Неправильная настройка параметров индикатора может привести к слишком высокой частоте торгов или плохому качеству сигнала.
  3. Слишком мягкая стоп-установка увеличивает риск потери; слишком жесткая стоп-установка увеличивает риск отклонения от тренда.

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

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

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

Эта стратегия объединяет преимущества движущихся средних и динамических показателей, двойной подтверждение сигналов, использование взаимодополняемости между показателями для повышения прибыльности стратегии. В то же время, механизм динамического отслеживания стоп-лосса может эффективно контролировать риск стратегии.

Исходный код стратегии
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)