Stratégie de tendance adaptative ATR-ADX V2


Date de création: 2023-12-05 18:08:14 Dernière modification: 2023-12-05 18:08:14
Copier: 0 Nombre de clics: 1056
1
Suivre
1619
Abonnés

Stratégie de tendance adaptative ATR-ADX V2

Aperçu

Cette stratégie est une stratégie de suivi de tendance combinant l’indicateur ATR et l’indicateur ADX. Elle ajuste dynamiquement le multiplicateur d’ATR en fonction de l’état de tendance du marché, permettant ainsi un meilleur suivi de tendance.

Principe de stratégie

La stratégie est basée sur les indices ATR et ADX.

Tout d’abord, on calcule la portée réelle des fluctuations (ATR) et l’ADX. L’ATR reflète la volatilité du marché et l’ADX détermine la force de la tendance.

Ensuite, en fonction de la différence entre l’indicateur d’orientation polyvalent ADX et DX, jugez l’état polyvalent de la tendance actuelle. Si DI+ est supérieur à DI-, il s’agit d’une tendance polyvalente et si DI- est supérieur à DI+, il s’agit d’une tendance sans tête.

Ensuite, on utilise un ATR plus grand lorsque l’ADX est en hausse (m1) et un ATR plus petit lorsque l’ADX est en baisse (m2), ce qui permet un ajustement dynamique. C’est le cœur de la stratégie.

Finalement, la moyenne combinée de l’ATR et du prix est calculée pour déterminer la direction de la tendance. Voir plus quand le prix est en hausse et moins quand il est en baisse.

Ainsi, la stratégie intègre l’indicateur ATR et l’indicateur ADX, afin de mieux capturer les tendances en ajustant dynamiquement les paramètres ATR.

Analyse des avantages

Cette stratégie présente plusieurs avantages évidents:

  1. Les paramètres peuvent être ajustés dynamiquement pour mieux capturer les tendances
  2. La combinaison de l’ATR et de l’ADX est plus complète.
  3. Le retrait devrait être limité
  4. Le processus de mise en œuvre est simple et facile à comprendre

C’est donc une stratégie de suivi de tendance très pratique, avec une excellente capacité de contrôle des retraits, et qui est recommandée.

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. L’indicateur ADX est en retard et risque de manquer le point de basculement
  2. Le mauvais choix de la taille d’un ATR peut entraîner un manque à gagner ou une perte excessive.
  3. Un incident a provoqué une rupture rapide de la voie ferrée, causant des dégâts

Par conséquent, il est nécessaire de prêter attention à l’optimisation des paramètres et au contrôle des risques. De plus, les événements Black Swan peuvent avoir un impact important sur la stratégie.

Direction d’optimisation

Cette stratégie peut être optimisée dans les directions suivantes:

  1. Optimisation des paramètres de l’ATR et de l’ADX pour une meilleure capture des tendances
  2. Ajout de confirmation d’autres indicateurs pour éviter le retard de l’ADX
  3. Construire des mécanismes d’arrêt dynamiques pour contrôler les pertes individuelles
  4. Adaptation de la gestion des positions et des stratégies adaptées aux différents environnements de marché

Par conséquent, la stratégie a encore beaucoup à optimiser et il est nécessaire d’ajuster les paramètres et les mécanismes en fonction des problèmes.

Résumer

La stratégie de tendance auto-adaptative ATR-ADX est excellente pour l’ensemble de la V2, capture bien les tendances en ajustant dynamiquement les paramètres ATR; elle est également très tolérante à l’erreur en combinant les deux indicateurs de jugement ATR et ADX. Cependant, nous devons également faire attention au contrôle des risques et à l’optimisation de la stratégie pour éviter l’expansion des retards et des pertes.

Code source de la stratégie
/*backtest
start: 2022-11-28 00:00:00
end: 2023-12-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// From mortdiggiddy's indicator to strategy
// See also: https://www.tradingview.com/u/mortdiggiddy/

strategy(title = "Adaptive ATR-ADX Trend V2", shorttitle = "Adaptive ATR V2 Strategy", overlay = true)

//Mode
src = input(title = "Source",  defval = hlc3)
atrLen = input(title = "ATR",  defval = 21, minval = 1, maxval = 100)
m1 = input(title = "ATR Multiplier - ADX Rising", type = float, defval = 3.5, minval = 1, step = 0.1, maxval = 100)
m2 = input(title = "ATR Multiplier - ADX Falling", type = float, defval = 1.75, minval = 1, step = 0.1, maxval = 100)

adxLen = input(title = "ADX",  defval = 14, minval = 1, maxval = 100)
adxThresh = input(title = "ADX Threshold",  defval = 30, minval = 1)
aboveThresh = input(true, title = "ADX Above Threshold uses ATR Falling Multiplier Even if Rising?")
useHeiken = input(false, title = "Use Heiken-Ashi Bars (Source will be ohlc4)")
    
// DI-Pos, DI-Neg, ADX

hR = change(high)
lR = -change(low)

dmPos = hR > lR ? max(hR, 0) : 0
dmNeg = lR > hR ? max(lR, 0) : 0

sTR = nz(sTR[1]) - nz(sTR[1]) / adxLen + tr
sDMPos = nz(sDMPos[1]) - nz(sDMPos[1]) / adxLen + dmPos
sDMNeg = nz(sDMNeg[1]) - nz(sDMNeg[1]) / adxLen + dmNeg

DIP = sDMPos / sTR * 100
DIN = sDMNeg / sTR * 100
DX = abs(DIP - DIN) / (DIP + DIN) * 100
adx = sma(DX, adxLen)

// Heiken-Ashi

xClose = ohlc4
xOpen = (nz(xOpen[1]) + nz(close[1])) / 2
xHigh = max(high, max(xOpen, xClose))
xLow = min(low, min(xOpen, xClose))

// Trailing ATR

v1 = abs(xHigh - xClose[1])
v2 = abs(xLow - xClose[1])
v3 = xHigh - xLow

trueRange = max(v1, max(v2, v3))
atr = useHeiken ? rma(trueRange, atrLen) : atr(atrLen)

m = rising(adx, 1) and (adx < adxThresh or not aboveThresh) ? m1 : falling(adx, 1) or (adx > adxThresh and aboveThresh) ? m2 : nz(m[1])
mUp = DIP >= DIN ? m : m2
mDn = DIN >= DIP ? m : m2

src_ = useHeiken ? xClose : src
c = useHeiken ? xClose : close
t = useHeiken ? (xHigh + xLow) / 2 : hl2

up = t - mUp * atr
dn = t + mDn * atr

TUp = max(src_[1], c[1]) > TUp[1] ? max(up, TUp[1]) : up
TDown = min(src_[1], c[1]) < TDown[1] ? min(dn, TDown[1]) : dn

trend = min(src_, min(c, close)) > TDown[1] ? 1 : max(src_, max(c, close)) < TUp[1]? -1 : nz(trend[1], 1)
stop = trend == 1 ? TUp : TDown
trendChange = change(trend)

longCondition = (trendChange > 0)
if (longCondition)
    strategy.entry("long", strategy.long)
shortCondition = (trendChange < 0)
if (shortCondition)
    strategy.entry("short", strategy.short)    
    
// Plot

lineColor = not(trendChange) ? trend > 0 ? #00FF00DD : #FF0000DD : #00000000
shapeColor = trendChange ? trendChange > 0 ? #00FF00F8 : #FF0000F8 : #00000000

plot(stop, color = lineColor, style = line, linewidth = 1, title = "ATR Trend")
plotshape(trendChange ? stop : na, style = shape.circle, size = size.tiny, location = location.absolute, color = shapeColor, title = "Change")

alertcondition(trendChange > 0, title = "ATR-ADX Change Up", message = "ATR-ADX Change Up")
alertcondition(trendChange < 0, title = "ATR-ADX Change Down", message = "ATR-ADX Change Down")

// end