Adaptive ATR-ADX Trendstrategie V2


Erstellungsdatum: 2023-12-05 18:08:14 zuletzt geändert: 2023-12-05 18:08:14
Kopie: 0 Klicks: 1056
1
konzentrieren Sie sich auf
1619
Anhänger

Adaptive ATR-ADX Trendstrategie V2

Überblick

Die Strategie ist eine Trendverfolgung in Kombination mit dem ATR- und dem ADX-Indikator. Sie passt die ATR-Multiplikatoren dynamisch an die Trendlage des Marktes an, um eine bessere Trendverfolgung zu ermöglichen.

Strategieprinzip

Die Strategie basiert hauptsächlich auf den ATR- und ADX-Indikatoren.

Zunächst berechnen wir die tatsächliche Bandbreite (ATR) und die ADX. Die ATR spiegelt die Marktschwankungen wider, während die ADX die Trendstärke beurteilt.

Dann wird der aktuelle Trend nach der Differenz des ADX-Polyhead-Indikators DX als Polyhead beurteilt. Wenn DI+ höher als DI- ist, ist dies ein mehrköpfiger Trend, wenn DI- höher als DI+ ist, ist dies ein leerer Trend.

Anschließend wird ein größerer ATR-Multiplikator verwendet, wenn der ADX steigt, und ein kleinerer ATR-Multiplikator, wenn der ADX fällt, um eine dynamische Anpassung zu erreichen. Dies ist der Kern der Strategie.

Letztendlich werden die Mittelwerte der ATR und der Preise kombiniert, um den Auf- und Abwärtstrend zu berechnen und die Richtung des Trends zu bestimmen. Blick hoch, wenn der Preis den Aufwärtstrend durchbricht, Blick unten, wenn der Preis den Abwärtstrend durchbricht.

Die Strategie kombiniert also ATR- und ADX-Indikatoren und kann Trends besser erfassen und handeln, indem die ATR-Parameter dynamisch angepasst werden.

Analyse der Stärken

Die Strategie hat einige deutliche Vorteile:

  1. Das ist eine sehr einfache Methode, um Trends zu erfassen.
  2. Der ATR- und ADX-Konzentrationsindex ist ein umfassenderer Indikator.
  3. Der Rückzug ist zu einem gewissen Grad abzuwenden.
  4. Die Implementierung ist einfach und verständlich

Daher ist es eine sehr praktische Trend-Tracking-Strategie, die eine hervorragende Rückzugskontrolle bietet und empfohlen wird.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der ADX-Indikator ist zurückgeblieben und könnte einen Trendwendepunkt verpassen
  2. Die falsche ATR-Größe kann zu einem unzureichenden Gewinn oder zu großen Verlusten führen.
  3. Das Ereignis führte zu einem schnellen Abbruch der Ober- und Unterstrecke und verursachte Verluste.

Daher ist die Optimierung der Parameter und die Risikokontrolle wichtig. Darüber hinaus kann der Black Swan-Vorfall einen großen Einfluss auf die Strategie haben.

Optimierungsrichtung

Die Strategie kann in folgenden Richtungen optimiert werden:

  1. Optimierung der ATR- und ADX-Parameter, um Trends besser zu erfassen
  2. Hinzufügen weiterer Indikatoren, um die ADX-Problematik zu vermeiden
  3. Erstellen von dynamischen Stop-Loss-Mechanismen, um einzelne Verluste zu kontrollieren
  4. Anpassung des Positionsmanagements und unterschiedliche Strategien für unterschiedliche Marktumstände

Daher bleibt der Strategie noch viel Optimierungsraum, und es ist notwendig, die Parameter und Mechanismen an die Probleme anzupassen.

Zusammenfassen

Die ATR-ADX-Trendstrategie, die sich an die ATR-ADX-Trends anpasst, ist für V2 insgesamt hervorragend und kann die Trends durch dynamische Anpassung der ATR-Parameter gut erfassen. Gleichzeitig ist die Kombination der beiden Indikatoren ATR und ADX sehr fehleranfällig.

Strategiequellcode
/*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