Эта стратегия сочетает в себе индекс направленного движения (DMI) и скользящую среднюю для определения направления тренда и генерации торговых сигналов.
Стратегия основана на двух основных показателях:
DMI, включая DMI+ и DMI-, используется для определения существования и направления тренда. Когда DMI+ выше DMI-, присутствует восходящий тренд. Когда DMI- выше DMI+, присутствует нисходящий тренд.
Движущаяся средняя, обычно установленная на 15-50 дней, используется для определения направления ценового тренда.
Стратегия сначала рассчитывает DMI+, DMI- и скользящую среднюю. Когда DMI показывает состояние тренда (DMI+ выше DMI- или наоборот) и скользящая средняя подтверждает направление, генерируется торговый сигнал.
Когда DMI+ пересекается над DMI- и цена пересекается над MA, делайте длинный.
Когда DMI- пересекается над DMI+ и цена пересекается ниже MA, переходите на короткий.
Включается опция обратного ввода.
Сочетание индикатора тренда, такого как DMI, и индикатора тренда, такого как скользящая средняя, может улучшить надежность сигнала, используя сильные стороны обоих.
Движущаяся средняя помогает фильтровать шум и подтверждать направление тренда. Использование обоих вместе позволяет ранее вводить тренд, избегая ложных сигналов на рынках без тренда.
Обратный вариант также добавляет гибкость для торговли с тенденцией или против нее.
Основными рисками этой стратегии являются:
Неправильные сигналы могут возникать вокруг переходов тренда, что приводит к потерям.
Формирование тренда требует времени. В то же время колебания цен могут генерировать ложные сигналы. Удлинение периодов DMI и MA может отфильтровать этот шум.
С обратным вариантом размер потерь должен быть ограничен, а для блокировки прибыли следует использовать остановки.
Параметры должны быть повторно оптимизированы для различных продуктов и временных рамок. Копирование параметров напрямую может не работать хорошо.
Возможные оптимизации для этой стратегии включают:
Испытание различных скользящих средних периодов, чтобы найти наиболее подходящий для переходов тренда.
Испытание периодов сглаживания DMI для отфильтрации коротких отклонений в рамках тенденций.
Оценка эффекта обратного варианта по сравнению с тенденцией дефолта, следуя историческим обратным тестам, чтобы выбрать лучший подход.
Включение стратегий остановки, таких как остановки отслеживания, временные остановки или остановки выхода, чтобы ограничить размер потери.
Оценка производительности параметров в различных продуктах и временных рамках и оптимизация параметров.
Добавление фильтров вроде 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")