Dynamischer Anstieg der ADX-Trend nach Strategie

Schriftsteller:ChaoZhang, Datum: 2023-12-11 17:18:32
Tags:

img

Übersicht

Diese Strategie verfolgt die dynamischen Veränderungen des ADX-Indikators, um die frühen Veränderungen in den Markttrends für eine zeitnahe Trendverfolgung zu erfassen. Wenn der ADX schnell von niedrigen Niveaus steigt, signalisiert er, dass sich ein Trend bildet, der eine große Gelegenheit bietet, einzutreten. Mit Hilfe von gleitenden Durchschnitten kann er falsche Signale effektiv filtern.

Strategie Logik

Der Kern dieser Strategie liegt darin, die Trendentwicklung anhand der dynamischen Veränderungen des ADX-Indikators zu beurteilen.

Insbesondere besteht das Eingangssignal aus folgenden Faktoren:

  1. ADX überschreitet einen Schwellenwert (z. B. 10)
  2. ADX steigt rasant nach oben
  3. Preiskreuzungen über dem einfachen oder exponentiellen gleitenden Durchschnitt

Wenn alle oben genannten Bedingungen erfüllt sind, signalisiert es, dass sich ein Aufwärtstrend bildet, um lang zu gehen. Wenn der Preis unter die gleitenden Durchschnitte fällt, werden Positionen geschlossen. Zwei gleitende Durchschnitte werden verwendet, um Trends genauer zu beurteilen.

Die Stop-Loss-Logik ist ähnlich: Geh kurz, wenn der ADX schnell fällt, und schließe Positionen, wenn der Preis über den gleitenden Durchschnitten steigt.

Analyse der Vorteile

Der größte Vorteil hierbei ist die zeitnahe Erfassung aufstrebender Trends. Die herkömmliche Art, die absoluten ADX-Werte zu betrachten, erfordert oft eine Bestätigung über 20 oder 25 um einen Trend zu bezeichnen, wodurch der optimale Einstiegszeitpunkt verpasst wird. Diese Strategie greift die frühe Entwicklung des Trends auf, indem sie den schnellen Anstieg des ADX verfolgt.

Darüber hinaus helfen die gleitenden Durchschnitte, falsche Signale effektiv zu filtern und die Stabilität der Strategie zu erhöhen.

Risiko- und Optimierungsanalyse

Das größte Risiko liegt in der Verzögerung des ADX selbst. Obwohl der schnelle Anstieg aufgenommen wurde, um die Verzögerung zu reduzieren, gibt es immer noch eine gewisse Verzögerung. Dies führt dazu, dass einige schnell rückgängige Märkte verpasst werden.

Außerdem beurteilt ADX Trends nicht perfekt und diagnostiziert sie unweigerlich von Zeit zu Zeit falsch.

Es gibt immer noch viel Raum für die Optimierung dieser Strategie, vor allem die Verbesserung der Genauigkeit von ADX bei der Erfassung von Trends. Methoden wie maschinelles Lernen können erforscht werden, Trainingsmodelle zur Vorhersage der Wahrscheinlichkeitsverteilung basierend auf ADX-Änderungen. Andere Aspekte wie Parameter-Tuning, zusätzliche Indikatoren usw. können ebenfalls getestet werden.

Schlussfolgerung

Diese dynamische steigende ADX-Trend-Folge-Strategie erfasst Trendverschiebungen schnell, indem sie scharfe ADX-Steigerungen identifiziert und so Trends rechtzeitig verfolgt. Der größte Vorteil ist seine Agilität in der Zeit, die frühe Trendentwicklung effektiv erfasst. In der Zwischenzeit bleiben bestimmte Risiken von Fehleinschätzungen bestehen, die eine kontinuierliche Optimierung und Prüfung erfordern.


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

Mehr