Двойная скользящая средняя и стратегия следования за трендом


Дата создания: 2023-11-06 15:41:23 Последнее изменение: 2023-11-06 15:41:23
Копировать: 0 Количество просмотров: 558
1
Подписаться
1617
Подписчики

Двойная скользящая средняя и стратегия следования за трендом

Обзор

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

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

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

  2. ADX используется для определения наличия и силы тенденции. Когда ADX больше, чем установленное ключевое значение, считается, что тенденция существует и тенденция сильна. Только когда тенденция сильна, создается торговый сигнал.

  3. DI+ в DMI используется для определения направления тренда. Когда DI+ является положительным, то это означает, что тренд идет вверх; когда DI+ является отрицательным, то это означает, что тренд идет вниз.

  4. В сочетании с тестированием временного диапазона можно отслеживать эффективность стратегии в разные периоды времени, чтобы проверить ее.

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

  1. Используя двойную систему, можно фильтровать прорывы, чтобы избежать потерь, вызванных ложными прорывами.

  2. Используйте ADX, чтобы оценить наличие и силу тенденции, избегайте частого трейдинга в условиях шока.

  3. Используйте DMI, чтобы определить направление тренда, убедитесь, что он соответствует тренду, и избегайте контрастной торговли.

  4. Тестирование временного диапазона позволяет проверить, работают ли параметры стратегии в разных ситуациях, оптимизировать параметры.

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

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

  2. ADX считает, что существует отставание, возможно, упущенная возможность в начале тренда, может снизить ключевые значения.

  3. DMI также имеет задержку в определении направления, что также может быть пропущено в начале тренда, что может привести к сокращению параметров цикла.

  4. Параметры в разных временных интервалах могут нуждаться в корректировке и оптимизации.

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

  1. Можно тестировать комбинации параметров различных длин циклов, чтобы найти оптимальные.

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

  3. Можно добавить стратегию “стоп-лосс”, чтобы избежать увеличения убытков.

  4. Параметры могут быть автоматически оптимизированы с помощью методов машинного обучения.

  5. Повышение эффективности стратегии может быть достигнуто с помощью дополнительных факторов, таких как эмоциональные показатели, новостная лента.

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

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

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

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    title = "From Month",      minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA