Сочетание DMI и стратегии торговли скользящими средними

Автор:Чао Чжан, Дата: 2023-09-28 12:39:44
Тэги:

Обзор

Эта стратегия сочетает в себе индекс направленного движения (DMI) и скользящую среднюю для определения направления тренда и генерации торговых сигналов.

Логика стратегии

Стратегия основана на двух основных показателях:

  1. DMI, включая DMI+ и DMI-, используется для определения существования и направления тренда. Когда DMI+ выше DMI-, присутствует восходящий тренд. Когда DMI- выше DMI+, присутствует нисходящий тренд.

  2. Движущаяся средняя, обычно установленная на 15-50 дней, используется для определения направления ценового тренда.

Стратегия сначала рассчитывает DMI+, DMI- и скользящую среднюю. Когда DMI показывает состояние тренда (DMI+ выше DMI- или наоборот) и скользящая средняя подтверждает направление, генерируется торговый сигнал.

  • Когда DMI+ пересекается над DMI- и цена пересекается над MA, делайте длинный.

  • Когда DMI- пересекается над DMI+ и цена пересекается ниже MA, переходите на короткий.

Включается опция обратного ввода.

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

Сочетание индикатора тренда, такого как DMI, и индикатора тренда, такого как скользящая средняя, может улучшить надежность сигнала, используя сильные стороны обоих.

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

Обратный вариант также добавляет гибкость для торговли с тенденцией или против нее.

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

Основными рисками этой стратегии являются:

  1. Неправильные сигналы могут возникать вокруг переходов тренда, что приводит к потерям.

  2. Формирование тренда требует времени. В то же время колебания цен могут генерировать ложные сигналы. Удлинение периодов DMI и MA может отфильтровать этот шум.

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

  4. Параметры должны быть повторно оптимизированы для различных продуктов и временных рамок. Копирование параметров напрямую может не работать хорошо.

Руководство по оптимизации

Возможные оптимизации для этой стратегии включают:

  1. Испытание различных скользящих средних периодов, чтобы найти наиболее подходящий для переходов тренда.

  2. Испытание периодов сглаживания DMI для отфильтрации коротких отклонений в рамках тенденций.

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

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

  5. Оценка производительности параметров в различных продуктах и временных рамках и оптимизация параметров.

  6. Добавление фильтров вроде RSI, чтобы избежать ложных сигналов в локальных экстремалах.

Резюме

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


/*backtest
start: 2023-08-28 00:00:00
end: 2023-09-27 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 03/03/2017
// The related article is copyrighted material from Stocks & Commodities Aug 2009 
//
// You can change long to short in the Input Settings
// Please, use it only for learning or paper trading. Do not for real trading.
////////////////////////////////////////////////////////////
strategy(title="Combining DMI And Moving Average For A EUR/USD Trading System")
Length_MA = input(30, minval=1)
Length_DMI = input(14, minval=1)
reverse = input(false, title="Trade reverse")
xMA = sma(close, Length_MA)
up = change(high)
down = -change(low)
trur = rma(tr, Length_DMI)
xPDI = fixnan(100 * rma(up > down and up > 0 ? up : 0, Length_DMI) / trur)
xNDI = fixnan(100 * rma(down > up and down > 0 ? down : 0, Length_DMI) / trur)
nPDI = xPDI
nNDI = xNDI
nMA = xMA
nPDI_1 = xPDI[1]
nNDI_1 = xNDI[1]
nMA_1 = xMA[1]
bMDILong =iff(nPDI > nNDI and nPDI_1 < nNDI_1, true, 
           iff(nPDI < nNDI and nPDI_1 > nNDI_1, false, false)) 
bMDIShort =  iff(nPDI > nNDI and nPDI_1 < nNDI_1, false, 
              iff(nPDI < nNDI and nPDI_1 > nNDI_1, true, false)) 
bMALong = iff(close > nMA and close[1] < nMA_1, true, 
           iff(close < nMA and close[1] > nMA_1, false, false))
bMAShort = iff(close > nMA and close[1] < nMA_1, false, 
             iff(close < nMA and close[1] > nMA_1, true, false))
pos = iff(bMDILong and bMALong, 1, 
     iff(bMDIShort and bMAShort, -1, nz(pos[1], 0)))
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1, 1, pos))	   
if (possig == 1 )
    strategy.entry("Long", strategy.long)
if (possig == -1 )
    strategy.entry("Short", strategy.short)	   	    
barcolor(possig == -1 ? red: possig == 1 ? green : blue )
plot(nPDI, color=green, title="DMI Plus")
plot(nNDI, color=red, title="DMI Minus")

Больше