Cette stratégie combine l'indice de mouvement directionnel (DMI) et la moyenne mobile pour identifier la direction de la tendance et générer des signaux de trading.
La stratégie repose sur deux indicateurs principaux:
DMI, y compris DMI+ et DMI-, est utilisé pour identifier l'existence et la direction d'une tendance.
La moyenne mobile, généralement fixée à 15 à 50 jours, est utilisée pour déterminer la direction de la tendance des prix.
La stratégie calcule d'abord le DMI+, le DMI- et la moyenne mobile. Lorsque le DMI montre un état de tendance (DMI+ au-dessus du DMI- ou vice versa) et que la moyenne mobile confirme la direction, un signal de trading est généré.
Lorsque le DMI+ dépasse le DMI- et que le prix dépasse le MA, passez long.
Lorsque le DMI- dépasse le DMI+ et que le prix dépasse le MA, passez au short.
Une option d'entrée inverse est également incluse.
La combinaison d'un indicateur de tendance comme le DMI et d'un indicateur de tendance comme la moyenne mobile peut améliorer la fiabilité du signal en utilisant les forces des deux.
L'avantage du DMI est son identification rapide des tendances émergentes. La moyenne mobile aide à filtrer le bruit et à confirmer la direction de la tendance.
L'option inverse ajoute également de la souplesse pour négocier avec ou contre la tendance.
Les principaux risques de cette stratégie sont les suivants:
Des signaux erronés peuvent se produire autour des transitions de tendance, conduisant à des pertes.
La formation des tendances prend du temps. Pendant ce temps, les fluctuations de prix peuvent générer de faux signaux. L'allongement des périodes DMI et MA peut filtrer ce bruit.
L'option inverse consiste à limiter la taille des pertes et à utiliser des arrêts de trailing pour verrouiller les bénéfices.
Les paramètres doivent être ré-optimisés pour différents produits et délais.
Les optimisations possibles de cette stratégie sont les suivantes:
Tester différentes périodes de moyennes mobiles pour trouver la meilleure adaptation aux transitions de tendance.
Tester les périodes d'assouplissement du DMI pour filtrer les courts retours dans les tendances.
Évaluer l'effet de l'option inverse par rapport à la tendance de défaut en suivant les tests antérieurs pour choisir la meilleure approche.
Incorporer des stratégies d'arrêt comme les arrêts de trailing, les arrêts de temps ou les arrêts de rupture pour limiter la taille des pertes.
Évaluer les performances des paramètres sur différents produits et délais et optimiser les paramètres.
Ajout de filtres comme RSI pour éviter les faux signaux à des extrêmes localisés.
Cette stratégie combine les atouts de l'indicateur DMI et des indicateurs de moyenne mobile pour entrer dans les tendances tôt tout en évitant les coups de fouet sur les marchés agités. L'option inverse ajoute également de la flexibilité.
/*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")