Tendance dynamique à la hausse de l'ADX à la suite de la stratégie

Auteur:ChaoZhang est là., Date: 2023-12-11 17:18:32 Je suis désolé
Les étiquettes:

img

Résumé

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.

La logique de la stratégie

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:

  1. ADX dépasse un seuil (par exemple 10)
  2. L' ADX augmente rapidement
  3. Les prix dépassent la moyenne mobile simple ou exponentielle

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.

Analyse des avantages

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.

Analyse des risques et optimisation

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.

Conclusion

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)

Plus de