
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.
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:
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.
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.
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.
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é.
/*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)