Cette stratégie suit les changements dynamiques de l'indicateur ADX pour capturer les premiers changements dans les tendances du marché pour suivre la tendance en temps opportun. Lorsque l'ADX augmente rapidement à partir de niveaux bas, il indique qu'une tendance se forme qui présente une excellente occasion d'entrer. Avec l'aide de moyennes mobiles, il peut filtrer efficacement les faux signaux.
Le noyau de cette stratégie réside dans le jugement de l'évolution de la tendance basé sur les changements dynamiques de l'indicateur ADX.
Plus précisément, le signal d'entrée est constitué des facteurs suivants:
Lorsque toutes les conditions ci-dessus sont remplies, cela indique qu'une tendance haussière se forme pour aller long. Lorsque le prix tombe en dessous des moyennes mobiles, fermez les positions. Deux moyennes mobiles sont utilisées pour juger les tendances plus précisément.
La logique de stop loss est similaire: allez court lorsque l'ADX chute rapidement et fermez les positions lorsque le prix dépasse les moyennes mobiles.
L'avantage le plus important ici est la capture en temps opportun des tendances émergentes. La façon conventionnelle de regarder les valeurs absolues de l'ADX nécessite souvent une confirmation supérieure à 20 ou 25 pour appeler une tendance, manquant ainsi le moment d'entrée optimal. Cette stratégie capte le développement précoce de la tendance en suivant la hausse rapide de l'ADX.
En outre, les moyennes mobiles aident à filtrer efficacement les faux signaux, ce qui améliore la stabilité de la stratégie.
Le plus grand risque vient de la nature en retard de l'ADX lui-même. Malgré la prise de la hausse rapide pour réduire le retard, il y a encore un certain retard. Cela provoque la perte de certains marchés en rapide renversement.
En outre, ADX ne juge pas parfaitement les tendances et les diagnostique inévitablement à tort de temps en temps.
Il y a encore beaucoup de place pour optimiser cette stratégie, principalement en améliorant la précision de l'ADX dans la capture des tendances. Des méthodes telles que l'apprentissage automatique peuvent être explorées, des modèles de formation pour prédire la distribution de probabilité basée sur les changements de l'ADX. D'autres aspects tels que le réglage des paramètres, des indicateurs supplémentaires, etc. peuvent également être testés.
Cette stratégie de suivi de tendance dynamique de l'ADX capture rapidement les changements de tendance en identifiant des hausses brusques de l'ADX, suivant ainsi les tendances en temps opportun.
/*backtest start: 2023-12-03 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © dhilipthegreat //@version=4 //Rising ADX strategy strategy(title="Rising ADX strategy", overlay=false) adxlen = input(14, title="ADX Length", minval=1) threshold = input(10, title="threshold", minval=5) hline(threshold, color=color.black, linestyle=hline.style_dashed) atype = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen=input(20, title="Moving average 1 ",minval=1, maxval=50) avg = atype == 1 ? sma(close,malen) : atype == 2 ? ema(close,malen) : atype == 3 ? wma(close,malen) : atype == 4 ? hma(close,malen) : na atype2 = input(2,minval=1,maxval=7,title="1=SMA, 2=EMA, 3=WMA, 4=HullMA") malen2=input(20, title="Moving average 2",minval=1, maxval=200) avg2 = atype2 == 1 ? sma(close,malen2) : atype2 == 2 ? ema(close,malen2) : atype2 == 3 ? wma(close,malen2) : atype2 == 4 ? hma(close,malen2) : na //ADX&DI dilen = 14 dirmov(len,_high,_low,_tr) => up = change(_high) down = -change(_low) plusDM = na(up) ? na : (up > down and up > 0 ? up : 0) minusDM = na(down) ? na : (down > up and down > 0 ? down : 0) truerange = rma(_tr, len) plus = fixnan(100 * rma(plusDM, len) / truerange) minus = fixnan(100 * rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen,_high,_low,_tr) => [plus, minus] = dirmov(dilen,_high,_low,_tr) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [plus, minus] = dirmov(dilen,high,low,tr) sig = adx(dilen, adxlen,high,low,tr) prev_sig = adx(dilen, adxlen,high[1],low[1],tr) plot(sig ? sig : na, color = rising(sig, 1) ? color.lime : falling(sig, 1) ? color.orange : color.purple, title="ADX",linewidth=2) ////// longCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close > avg and close > avg2 barcolor(longCondition ? color.yellow: na) Long_side = input(true, "Long side") if Long_side strategy.entry(id="Long", long=true, when= longCondition and strategy.position_size<1) exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close < avg and close < avg2 strategy.close(id="Long",comment="L exit", qty=strategy.position_size , when= exitCondition) //close all shortCondition= sig > threshold and rising(sig, 1) and falling(prev_sig, 1) and close < avg and close < avg2 barcolor(shortCondition ? color.gray: na) Short_side = input(true, "Short side") if Short_side strategy.entry(id="Short", long=false, when= shortCondition and strategy.position_size<1) sell_exitCondition= (rising(prev_sig, 1) and falling(sig, 1)) or close > avg and close > avg2 strategy.close(id="Short",comment="S exit", qty=strategy.position_size , when= sell_exitCondition) //close all barcolor(strategy.position_size>1 ? color.lime: na) bgcolor(strategy.position_size>1 ? color.lime: na) barcolor(strategy.position_size<0 ? color.orange: na) bgcolor(strategy.position_size<0 ? color.orange: na)