Dies ist eine Trendfolgestrategie, die den ATR-Indikator und den ADX-Indikator kombiniert und den ATR-Multiplikator entsprechend den Markttrendbedingungen dynamisch anpasst, um eine bessere Trendverfolgung zu erreichen.
Die Strategie basiert hauptsächlich auf dem ATR-Indikator und dem ADX-Indikator.
Erstens berechnet es den True Range (ATR) und den ADX. Der ATR spiegelt die Volatilität des Marktes wider, während der ADX die Trendstärke beurteilt.
Zweitens bestimmt es die aktuelle Trendrichtung nach der Differenz zwischen DI+ und DI- im ADX-Indikator. Wenn DI+ höher ist als DI-, ist es ein Aufwärtstrend. Wenn DI- höher ist als DI+, ist es ein Abwärtstrend.
Wenn der ADX dann steigt, verwendet er einen größeren ATR-Multiplikator (m1).
Schließlich berechnet es in Kombination mit ATR und dem Mittelpunkt des Preises die oberen und unteren Bands, um die Trendrichtung zu bestimmen.
Die Strategie beinhaltet also ATR und ADX und kann durch dynamische Anpassung der ATR-Parameter Trends für den Handel besser erfassen.
Die Strategie hat mehrere offensichtliche Vorteile:
Daher ist dies ein sehr praktischer Trend, der eine Strategie mit einer guten Abnahmekontrolle beinhaltet.
Die Strategie birgt auch einige Risiken:
Die Optimierung der Parameter und die Risikokontrolle bedürfen daher einer besonderen Aufmerksamkeit.
Die Strategie kann in folgenden Aspekten optimiert werden:
Es gibt also noch viel Raum für Optimierung durch Anpassung von Parametern und Mechanismen entsprechend den Problemen.
Im Allgemeinen funktioniert diese Adaptive ATR-ADX Trend Strategy V2 sehr gut. Durch die dynamische Anpassung der ATR-Parameter erfasst sie Trends gut. Außerdem macht die Kombination von zwei Indikatoren in ATR und ADX sie robuster. Aber wir müssen immer noch auf Risikokontrolle und Optimierung achten, um Verzögerungen und übergroße Verluste zu vermeiden. Insgesamt lohnt sich die Strategie zu lernen und anzuwenden.
/*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