
Die Strategie, die die Verwendung eines Bewegungsindex-Durchschnitts (ADX) und eines Aufwärtsbewegungsindex (DI+) als Grundlage für die Beurteilung der Marktrichtung und -trend verwendet, und die Verwendung von schnellen und langsamen Moving Averages zur Bestimmung der Handelsrichtung und -dauer, gehört zu den Trend-Tracking-Trading-Strategien. Die Strategie kann die Wendepunkte der mittleren kurzen Linie effektiv erfassen und funktioniert am besten in Märkten mit geringer Volatilität und deutlichem Trend.
Die Kernlogik der Strategie ist, dass ein Kaufsignal erzeugt wird, wenn die +DI-Linie die ADX von unten durchbricht, und ein Verkaufsignal erzeugt wird, wenn die +DI-Linie die ADX von oben durchbricht. Daher ist die Strategie auf die Kreuzung zwischen den DI- und ADX-Indikatoren angewiesen, um einen Markttrend und einen Wendepunkt zu ermitteln. Die Beziehung der schnellen und mittleren Linie wird zur Ermittlung der Gesamtmarkttrend verwendet und nur dann als Handelssignal betrachtet, wenn die schnelle EMA höher ist als die langsame EMA.
Insbesondere wird ein Kaufsignal ausgesendet, wenn die folgenden Bedingungen erfüllt sind: 1. Die schnelle EMA ist höher als die langsame 2. Die +DI-Leitung durchbricht die ADX-Leitung von unten 3. Eine ADX-Schwelle unter 30
Das Signal “verkauft” wird ausgesendet, wenn folgende Bedingungen erfüllt sind: 1. ADX-Wert über 30 als Schwellenwert 2. Die +DI-Leitung fällt von oben nach unten unter die ADX-Leitung
Die Strategie enthält auch eine Stop-Loss-Logik, bei der alle Positionen ausgeschlossen werden, wenn der Preis unter dem Stop-Loss-Preis liegt.
Die Strategie kombiniert DI, ADX und die Durchschnittslinie, um die Wendepunkte der Markttrends zu ermitteln. Sie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken, die beachtet werden müssen:
Diese Risiken können durch Optimierung der ADX- und Durchschnittsparameter, Anpassung der Stop-Loss-Ebene und in Kombination mit anderen Indikatoren verbessert werden.
Die Strategie kann noch weiter optimiert werden:
Die ADX-Cross-Trend-Strategie ist insgesamt relativ stabil und kann vor der Schwankung den Kehrraum effektiv erfassen, jedoch muss auf die Risikokontrolle geachtet werden. Durch weitere Optimierung der Parameter-Einstellungen und strenge Einstiegs- und Stop-Loss-Regeln kann ein besseres risikobereinigtes Ergebnis erzielt werden. Die Strategie ist für Short-Line-Handelskonten geeignet, die in langen Zeilen gehalten werden.
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
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/
// © mohanee
//@version=4
//ADX strategy
SmoothedTrueRange=0.00
SmoothedDirectionalMovementPlus=0.00
SmoothedDirectionalMovementMinus=0.00
strategy(title="ADX strategy", overlay=false,pyramiding=3, default_qty_type=strategy.fixed, default_qty_value=3, initial_capital=10000, currency=currency.USD)
len = input(11, title="ADX Length", minval=1)
threshold = input(30, title="threshold", minval=5)
fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)
stopLoss =input(8, title="Stop Loss",minval=1) //
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange:= nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus:= nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
plot(DIPlus, color=color.green, title="DI+")
//plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")
hline(threshold, color=color.black, linestyle=hline.style_dashed)
fastEmaVal=ema(close,fastEma)
slowEmaVal=ema(close,slowEma)
//long condition
longCondition= ADX < threshold and crossover(DIPlus,ADX) and fastEmaVal > slowEmaVal
barcolor(longCondition ? color.yellow: na)
strategy.entry(id="ADXLE", long=true, when= longCondition and strategy.position_size<1)
barcolor(strategy.position_size>1 ? color.blue: na)
bgcolor(strategy.position_size>1 ? color.blue: na)
//Add
strategy.entry(id="ADXLE", comment="Add", long=true, when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(DIPlus,ADX) )
//calculate stop Loss
stopLossVal = strategy.position_avg_price - (strategy.position_avg_price*stopLoss*0.01)
strategy.close(id="ADXLE",comment="SL Exit", when=close<stopLossVal) //close all on stop loss
//exit condition
exitCondition= ADX > threshold and crossunder(DIPlus,ADX) // and fastEmaVal > slowEmaVal
strategy.close(id="ADXLE",comment="TPExitAll", qty=strategy.position_size , when= exitCondition) //close all