ADX-Kreuzungstrendhandelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-08
Tags:

img

Übersicht

Diese Strategie kombiniert Richtungsbewegungsindex (ADX), Plus Richtungsindikator (DI +) und schnelle und langsame gleitende Durchschnitte, um die Marktrichtung und die Haltezeit zu bestimmen.

Grundsätze

Die Kernlogik dieser Strategie besteht darin, Kaufsignale zu erzeugen, wenn die +DI-Linie von unten nach oben über die ADX-Linie kreuzt, und Verkaufssignale zu erzeugen, wenn die +DI-Linie von oben nach unten unter die ADX-Linie kreuzt. Daher beruht diese Strategie auf dem Crossover zwischen DI und ADX, um Markttrends und Umkehrpunkte zu bestimmen. Zur gleichen Zeit wird die Beziehung zwischen schnellen und langsamen gleitenden Durchschnitten verwendet, um den Gesamtmarkttrend zu bestimmen. Handelssignale werden nur berücksichtigt, wenn die schnelle EMA über der langsamen EMA liegt.

Insbesondere wird ein Kaufsignal ausgelöst, wenn folgende Bedingungen erfüllt sind:

  1. Schnelle EMA liegt über der langsamen EMA
  2. +DI-Linie kreuzt ADX-Linie nach oben
  3. ADX-Wert unter 30 Schwellenwert

Ein Verkaufssignal wird ausgelöst, wenn die folgenden Bedingungen erfüllt sind:

  1. ADX-Wert überschreitet Schwellenwert 30
  2. +DI-Linie kreuzt ADX-Linie nach unten

Die Strategie beinhaltet auch eine Stop-Loss-Logik, um alle Positionen zu beenden, wenn der Preis unter die Stop-Loss-Level fällt.

Vorteile

Die Strategie kombiniert DI, ADX und gleitende Durchschnittsindikatoren, um Wende in den Markttrends effektiv zu bestimmen.

  1. Nutzen Sie DI- und ADX-Kreuzungen, um Ein- und Ausstiegspunkte genau zu bestimmen
  2. Schnelles und langsames EMA-Filtersystem zur Bestimmung der allgemeinen Marktentwicklung und Vermeidung von schlechten Trades
  3. Verwenden Sie ADX-Werte, um die Trendstärke zu bestimmen, handeln Sie nur, wenn der Trend schwach ist und vermeiden Sie falsche Ausbrüche
  4. Einbeziehung eines Stop-Loss-Mechanismus zur Kontrolle des Abwärtsrisikos
  5. Strenge Eintrittsbedingungen Vermeiden Sie den Kauf von Ober- und Verkauf von Unterseiten
  6. Klarer Ausstiegsregeln ermöglichen rechtzeitige Stop-Loss und Gewinnentnahme

Risiken

Bei dieser Strategie sind einige Risiken zu beachten:

  1. ADX-Indikator hat Verzögerungseffekt, könnte das beste Timing für Preisumkehrungen verpassen
  2. Bei hoher Marktvolatilität können mehr falsche Signale auftreten
  3. Unzulässige Einstellungen für schnelle und langsame EMA könnten zu fehlenden Trades oder zum Filtern gültiger Signale führen
  4. Zu groß eingestellte Stop-Loss-Level können das Risiko nicht wirksam kontrollieren

Diese Risiken können durch Optimierung der ADX- und gleitenden Durchschnittsparameter, Anpassung des Stop-Loss-Niveaus, Hinzufügen von Filtern für die Bestätigung usw. bekämpft werden.

Möglichkeiten zur Verbesserung

Weitere Verbesserungen sind möglich:

  1. Prüfung von ADX mit unterschiedlicher Länge, um optimale Kombinationen zu finden
  2. Hinzufügen anderer Indikatoren wie RSI, Bollinger Bands zur Signalbestätigung
  3. Verwenden von Algorithmen des maschinellen Lernens zur automatischen Optimierung von Parametern und Regeln
  4. Dynamische Anpassung von Stop-Loss-Leveln zur Minderung von Risiken im späten Stadium
  5. Aufbau eines Multifaktor-Scoring-Modells zur Stärkung der Ein- und Ausstiegskriterien

Schlussfolgerung

Im Allgemeinen ist diese ADX-Crossover-Trendstrategie ziemlich stabil, in der Lage, Umkehrungen frühzeitig effektiv zu erfassen, aber die Risikokontrolle ist entscheidend. Eine weitere Optimierung der Parameter, die strikte Eintrittsregelung und der Stop-Loss können zu einer guten risikobereinigten Rendite führen. Die Strategie eignet sich für langfristige Konten, die mittelfristige bis kurzfristige Positionen halten.


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

Mehr