Cette stratégie est basée sur l'indice de dynamique dynamique (DMI), qui mesure l'écart en pourcentage entre le prix et les moyennes mobiles de différentes longueurs pour déterminer la tendance.
La logique de négociation est la suivante:
Calculer l'écart en pourcentage du prix par rapport à un MA long (par exemple 200 jours) comme 1er DMI
Calculer l'écart par rapport à un MA moyen (p. ex. 50 jours) en tant que 2e IMD
Calculer l'écart par rapport à un MA court (p. ex. 20 jours) en tant que 3ème DMI
Lorsque le 3ème DMI est supérieur au 1er DMI, baissier.
Signals commerciaux générés sur la base de la relation DMI
En comparant dynamiquement la résistance relative entre les périodes de MA, le DMI vise à identifier les points tournants de la tendance.
Le DMI combine le lookback multipériodique pour la robustesse
Comparaison de la force relative par rapport aux niveaux absolus
Périodes d'AM flexibles pour l'adaptation au marché
DMI a un décalage et peut manquer les renversements
Optimisation minutieuse des paramètres de la période
Prédisposé à plusieurs faux signaux
DMI juge les points tournants en comparant la dynamique de la force de plusieurs périodes MA. L'optimisation peut s'adapter à différents environnements de marché.
/*backtest start: 2023-08-14 00:00:00 end: 2023-09-13 00:00:00 period: 3h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 31/06/2018 // The related article is copyrighted materialfrom Stocks & Commodities Dec 2009 // My strategy modification. // // You can change long to short in the Input Settings // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// strategy(title="CMOaDisparity Index Backtest") LengthFirst = input(200, minval=1) LengthSecond = input(50, minval=1) LengthThird = input(20, minval=1) ShowFirst = input(type=bool, defval=true) ShowSecond = input(type=bool, defval=true) ShowThird = input(type=bool, defval=true) reverse = input(false, title="Trade reverse") xEMAFirst = ema(close,LengthFirst) xEMASecond = ema(close,LengthSecond) xEMAThird = ema(close,LengthThird) xResFirst = 100 * (close - xEMAFirst) / close xResSecond = 100 * (close - xEMASecond) / close xResThird = 100 * (close - xEMAThird) / close pos = iff(xResThird > xResFirst, -1, iff(xResThird < xResSecond, 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(ShowFirst ? xResFirst : na, color=red, title="DIX 1") plot(ShowSecond ? xResSecond : na, color=blue, title="DIX 2") plot(ShowThird ? xResThird : na, color=green, title="DIX 3")