Die Strategie ermöglicht die zeitnahe Verfolgung von Trends durch die Beobachtung der dynamischen Veränderungen der ADX-Indikatoren, um die anfänglichen Veränderungen der Markttrends zu erfassen. Wenn der ADX schnell von den Tiefstständen aufsteigt, ist dies ein guter Zeitpunkt, um zu betreten.
Die Strategie basiert hauptsächlich auf den dynamischen Veränderungen des ADX-Indikators, um die Entwicklung des Trends zu beurteilen. Wenn der ADX-Indikator niedrig ist, bedeutet dies, dass sich der Trend nicht stark verändert hat.
Insbesondere beinhaltet die Strategie die folgenden Kriterien für die Aufnahme:
Wenn die oben genannten Bedingungen gleichzeitig erfüllt sind, bedeutet dies, dass ein Trend entsteht, und zwar mehr; wenn der Moment durch einen Moving Average geht, ist die Position gleich. Mit zwei Moving Averages kann die Entwicklung des Trends genauer beurteilt werden.
Die Stop-Loss-Bedingungen sind ähnlich, wenn der ADX nach unten schnell abfällt, ist er leer; wenn der Preis unter dem Moving Average fällt, ist er leer.
Der größte Vorteil dieser Strategie besteht darin, die Entwicklung des Trends rechtzeitig zu erfassen. Die herkömmliche Methode, die sich nur auf die ADX-Werte konzentriert, besteht darin, zu warten, bis der ADX 20 oder 25 steigt, um den Trend zu bestätigen, was den besten Zeitpunkt für den Einstieg verpasst hat.
Die Strategie wird außerdem unterstützt durch die Einführung von Moving Averages, die die Fehldiagnosen in Teilen der Strategie filtern und die Stabilität der Strategie verbessern.
Das größte Risiko dieser Strategie liegt in der Verzögerung der ADX-Indikatoren selbst. Obwohl die Verzögerung durch die Verfolgung des schnellen Aufstiegs verkürzt werden kann, gibt es immer noch eine gewisse Verzögerung. Dies führt dazu, dass einige der schnell umkehrenden Märkte nicht erfasst werden können.
Außerdem ist der ADX-Indikator nicht hundertprozentig genau in der Trendbestimmung, und es ist unvermeidlich, dass es zu einer bestimmten Fehldiagnosen kommt. Die Einführung eines Moving Averages filtert zwar einige Geräusche, muss jedoch weiter optimiert werden.
Die Optimierungsmöglichkeiten für diese Strategie sind groß, und es ist wichtig, die Erfassungsgenauigkeit der ADX-Indikatoren weiter zu verbessern. Man kann Methoden wie Maschinelles Lernen einführen und Modelle trainieren, um die Wahrscheinlichkeitsverteilung nach den ADX-Veränderungen zu beurteilen.
Diese dynamische ADX-Trend-Tracking-Strategie ermöglicht die zeitnahe Verfolgung von Trends durch die Erfassung von Marktveränderungen, bei denen der ADX schnell ansteigt. Der größte Vorteil besteht darin, dass der Trend zeitnah und effektiv frühzeitig erfasst werden kann.
/*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)