Il s'agit d'une stratégie de suivi des tendances qui combine l'indicateur ATR et l'indicateur ADX. Il ajuste dynamiquement le multiplicateur ATR en fonction des conditions de tendance du marché pour obtenir un meilleur suivi des tendances.
La stratégie repose principalement sur l'indicateur ATR et l'indicateur ADX.
Tout d'abord, il calcule la True Range (ATR) et l'ADX.
Deuxièmement, il détermine la direction de la tendance actuelle en fonction de la différence entre DI+ et DI- dans l'indicateur ADX. Si DI+ est supérieur à DI-, c'est une tendance haussière. Si DI- est supérieur à DI+, c'est une tendance à la baisse.
Ensuite, lorsque l'ADX est en hausse, il utilise un multiplicateur d'ATR plus grand (m1).
Enfin, combiné à l'ATR et au point médian du prix, il calcule les bandes supérieures et inférieures pour déterminer la direction de la tendance.
Ainsi, la stratégie intègre ATR et ADX, et en ajustant dynamiquement les paramètres ATR, elle peut mieux capturer les tendances pour le trading.
Cette stratégie présente plusieurs avantages évidents:
Il s'agit donc d'une tendance très pratique à suivre une stratégie avec un bon contrôle du tirage.
La stratégie comporte également certains risques:
L'optimisation des paramètres et le contrôle des risques nécessitent donc une attention particulière.
La stratégie peut être optimisée dans les aspects suivants:
Il y a donc encore beaucoup de place pour l'optimisation en ajustant les paramètres et les mécanismes en fonction des problèmes.
En général, cette stratégie de tendance adaptative ATR-ADX V2 fonctionne très bien. En ajustant dynamiquement les paramètres ATR, elle capte les tendances. En outre, la combinaison de deux indicateurs ATR et ADX la rend plus robuste. Mais nous devons toujours faire attention au contrôle des risques et à l'optimisation pour éviter les pertes en retard et en surdimension. Dans l'ensemble, la stratégie vaut la peine d'être apprise et appliquée.
/*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