Stratégie de suivi de tendance ADX dynamique à la hausse


Date de création: 2023-12-11 17:18:32 Dernière modification: 2023-12-11 17:18:32
Copier: 0 Nombre de clics: 728
1
Suivre
1621
Abonnés

Stratégie de suivi de tendance ADX dynamique à la hausse

Aperçu

Cette stratégie permet de suivre la tendance en temps opportun en suivant les changements dynamiques de l’indicateur ADX, en capturant les changements initiaux de la tendance du marché. Lorsque l’ADX monte rapidement d’un niveau bas, cela indique que la tendance se forme, ce qui est un bon moment pour entrer.

Principe de stratégie

La stratégie est principalement basée sur les changements dynamiques de l’indicateur ADX pour juger de l’évolution de la tendance. Lorsque l’indicateur ADX est bas, il représente peu de changement de tendance; lorsque l’ADX monte rapidement du bas, il indique que la tendance est en cours de formation. La stratégie capture l’évolution de la tendance en surveillant la hausse rapide de l’ADX.

Plus précisément, les critères d’admission à la Stratégie sont les suivants:

  1. ADX sur le seuil défini ((comme 10)
  2. L’ADX en hausse rapide
  3. Les prix sont affichés sur une moyenne mobile simple ou une moyenne mobile indicielle.

Lorsque les conditions ci-dessus sont remplies simultanément, cela signifie que la tendance est en train de se former, et plus; le moment de la traversée d’une moyenne mobile est à plat. L’utilisation de deux moyennes mobiles permet de juger plus précisément de l’évolution de la tendance.

Les conditions de stop-loss sont similaires: le ADX se vide lorsque le cours baisse rapidement vers le bas; le cours est à plat lorsque le cours franchit la moyenne mobile.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans la capture en temps opportun de l’évolution de la tendance. La méthode traditionnelle de l’ADX, qui consiste à regarder uniquement les valeurs de l’ADX, est souvent d’attendre que l’ADX augmente à 20 ou 25 pour confirmer la tendance, ce qui a manqué le meilleur moment d’entrée.

En outre, la stratégie a été complétée par l’introduction de moyennes mobiles, qui permettent de filtrer efficacement certaines erreurs de diagnostic et d’améliorer la stabilité de la stratégie.

Analyse des risques et des optimisations

Le plus grand risque de cette stratégie réside dans le retard de l’indicateur ADX lui-même. Bien que le retard puisse être réduit en suivant les hausses rapides, il existe encore un certain retard. Cela peut entraîner l’incapacité de capturer une partie du marché qui se retourne rapidement.

De plus, l’indicateur ADX n’est pas précis à 100% pour déterminer les tendances, ce qui entraîne inévitablement des erreurs de diagnostic. L’introduction d’une moyenne mobile peut filtrer une partie du bruit, mais elle doit encore être optimisée.

La stratégie a encore beaucoup de possibilités d’optimisation. La clé est d’améliorer encore la précision de capture des indicateurs ADX. Des méthodes telles que l’introduction de l’apprentissage automatique et l’entraînement des modèles pour déterminer la distribution de probabilité après la modification de l’ADX peuvent être envisagées.

Résumer

Cette stratégie de suivi des tendances dynamiques de l’ADX à la hausse permet de suivre les tendances en temps opportun en capturant les points de changement du marché où l’ADX augmente rapidement. Le plus grand avantage est qu’il est extrêmement agile dans le temps et qu’il est possible de saisir efficacement les tendances au début. Il existe également un risque de jugement erroné avec une certaine probabilité.

Code source de la stratégie
/*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)