ADX Dynamische Durchschnittstrendindikator-Strategie


Erstellungsdatum: 2024-01-15 15:32:45 zuletzt geändert: 2024-01-15 15:32:45
Kopie: 0 Klicks: 584
1
konzentrieren Sie sich auf
1617
Anhänger

ADX Dynamische Durchschnittstrendindikator-Strategie

Überblick

Die ADX-Dynamische-Durchschnitts-Trend-Indikator-Strategie ist eine quantitative Handelsstrategie, die die ADX-Indikatoren verwendet, um die Stärke der Markttrends und die Richtung der Trends zu bestimmen. Die Strategie beurteilt, ob ein Markttrend besteht, indem sie den Durchschnitts-Indikator ((ADX) berechnet, und die Richtung der Trends durch die Berechnung des positiven Indikators ((DI+) und des negativen Indikators ((DI-), wodurch ein Kauf- und Verkaufssignal erzeugt wird.

Strategieprinzip

Die Strategie nutzt zunächst die ADX-Indikatoren, um zu beurteilen, ob ein Trend auf dem Markt vorliegt. Wenn der ADX über dem von den Benutzern gesetzten Schlüsselwert liegt (default 23), bedeutet dies, dass ein starker Markttrend besteht. Wenn der aktuelle Wert des ADX über dem Wert der n Tage vor dem ADX liegt (default 3), bedeutet dies, dass der ADX steigt und sich ein Markttrend bildet.

Die Strategie nutzt dann DI+ und DI- um die Richtung des Markttrends zu bestimmen. Wenn DI+ höher als DI- ist, ist der Markt im Aufwärtstrend; wenn DI+ niedriger als DI- ist, ist der Markt im Abwärtstrend.

Schließlich wird die ADX und die DI durch strategische Analyse beurteilt, um konkrete Kauf- und Verkaufssignale zu erzeugen:

  1. Wenn der ADX steigt und über dem kritischen Wert liegt und DI+ über DI- liegt, erzeugt dies ein Kaufsignal
  2. Wenn der ADX steigt und über dem kritischen Wert liegt und der DI+ unter dem DI-, wird ein Verkaufssignal erzeugt
  3. Wenn der ADX in den Abwärtstrend wechselt, erzeugt er ein Negativsignal.

Die Strategie bietet außerdem Funktionen wie die Filterung von Moving Averages und einen individuellen Rücklaufzeitbereich, der nach Bedarf konfiguriert werden kann.

Analyse der Stärken

Die ADX-Dynamische Durchschnittstrendindikatorstrategie hat folgende Vorteile:

  1. Automatische Beurteilung von Markttrends und Vermeidung von ungültigen Transaktionen
  2. Automatische Beurteilung der Markttrends und Trendverfolgung
  3. Bereitstellung einer klaren Logik zum Kaufen, wenn ein Trend besteht / zum Schließen, wenn ein Trend verschwindet
  4. Konfiguration von Filtern für bewegliche Durchschnitte, um falsche Durchbrüche zu vermeiden
  5. Konfigurierbarer Rücklauf-Zeitrahmen für die Historik-Tests
  6. Indikatoren und Parameter sind anpassbar und können für verschiedene Sorten optimiert werden

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Der ADX-Indikator ist im Rückstand und hat möglicherweise frühe Trendchancen verpasst
  2. Die Mehrraumentscheidung hängt von den DI-Indikatoren ab, die empfindlich sind und möglicherweise falsche Signale erzeugen
  3. Filter für die Moving Averages verpassen möglicherweise eine kurze Linie
  4. Fehlgeleitete Zeiträume können zu Überübung führen
  5. Fehlende Einstellungen der Indikatorparameter können die Effektivität der Strategie beeinträchtigen

Um das Risiko zu verringern, sollten Sie Folgendes beachten:

  1. ADX-Parameter entsprechend verkürzt, um die Verzögerung zu reduzieren
  2. Einstellung oder Entfernung des DI-Filters, um falsche Signale zu verhindern
  3. Der Umlauf der Moving Average wird entsprechend verkürzt
  4. Erweiterung der Rückmesszeit und Tests für die gesamte Stichprobe
  5. Optimierung der Parameter, um die optimale Einstellung zu finden

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Kombinationstests mit mehreren Aktien zur Differenzierung des Risikos einer einzelnen Aktie
  2. Erhöhung der Stop-Loss-Logik, um Einzelschäden zu kontrollieren
  3. Verbesserte Signalgenauigkeit durch Kombinationsprüfung in Verbindung mit anderen Indikatoren
  4. Einführung von Algorithmen zur Beurteilung von Kauf- und Verkaufssignalen
  5. Hinzufügen eines automatischen Parameteroptimierungsmoduls, um dynamische Parameteranpassungen zu ermöglichen

Zusammenfassen

Die ADX-Dynamische Durchschnitts-Trendindikatorstrategie nutzt die ADX-Bestimmung des Trends und die DI-Bestimmung der Trendrichtung, um Handelssignale zu erzeugen, wenn ein Trend vorhanden ist, und die Strategie ist klar. Die Strategie kann automatisch Trends beurteilen, Trends verfolgen und bis zu einem gewissen Grad unwirksame Geschäfte in nicht-trendenden Märkten vermeiden. Mit einer gewissen Optimierung kann die Strategie zu einem leistungsstarken Werkzeug für die Quantifizierung von mittleren und langen Geschäften werden.

Strategiequellcode
/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © millerrh with inspiration from @9e52f12edd034d28bdd5544e7ff92e 
//The intent behind this study is to look at ADX when it has an increasing slope and is above a user-defined key level (23 default). 
//This is to identify when it is trending.
//It then looks at the DMI levels.  If D+ is above D- and the ADX is sloping upwards and above the key level, it triggers a buy condition.  Opposite for short.
//Can use a user-defined moving average to filter long/short if desried.
// NOTE: THIS IS MEANT TO BE USED IN CONJUNCTION WITH MY "ATX TRIGGER" INDICATOR FOR VISUALIZATION. MAKE SURE SETTINGS ARE THE SAME FOR BOTH.

strategy("ADX | DMI Trend", overlay=true, initial_capital=10000, currency='USD', 
   default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.04)

// === BACKTEST RANGE ===
From_Year  = input(defval = 2019, title = "From Year")
From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
From_Day   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
To_Year    = input(defval = 9999, title = "To Year")
To_Month   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
To_Day     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
Start  = timestamp(From_Year, From_Month, From_Day, 00, 00)  // backtest start window
Finish = timestamp(To_Year, To_Month, To_Day, 23, 59)        // backtest finish window

// == INPUTS ==
// ADX Info
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, title="DI Period")
keyLevel = input(23, title="Keylevel for ADX")
adxLookback = input(3, title="Lookback Period for Slope")

// == FILTERING ==
// Inputs
useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true)
maType = input(defval="EMA", options=["EMA", "SMA"], title = "MA Type For Filtering")
maLength   = input(defval = 200, title = "MA Period for Filtering", minval = 1)

// Declare function to be able to swap out EMA/SMA
ma(maType, src, length) =>
    maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc)
maFilter = ma(maType, close, maLength)
plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50)

// Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry 
maFilterCheck = if useMaFilter == true
    maFilter
else
    close

// == USE BUILT-IN DMI FUNCTION TO DETERMINE ADX AND BULL/BEAR STRENGTH
[diplus, diminus, adx] = dmi(dilen, adxlen)

buySignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus > diminus  and close >= maFilterCheck
// buySignalValue = valuewhen(buySignal, close, 0)
shortSignal = (adx[0]-adx[adxLookback] > 0) and adx > keyLevel and diplus < diminus  and close <= maFilterCheck
// shortSignalValue = valuewhen(shortSignal, close, 0)
sellCoverSignal = adx[0]-adx[adxLookback] < 0

// == ENTRY & EXIT CRITERIA
// Triggers to be TRUE for it to fire of the BUY Signal : (opposite for the SELL signal).
// (1): Price is over the 200 EMA line. (EMA level configurable by the user)
// (2): "D+" is OVER the "D-" line
// (3): RSI 7 is under 30 (for SELL, RSI 7 is over 70)
// 1* = The ultimate is to have a combination line of 3 EMA values, EMA 14, EMA 50 and EMA 200 - And if price is over this "combo" line, then it's a strong signal

// == STRATEGY ENTRIES/EXITS == 
strategy.entry("Long", strategy.long, when = buySignal)
strategy.close("Long", when = sellCoverSignal)
strategy.entry("Short", strategy.short, when = shortSignal)
strategy.close("Short", when = sellCoverSignal)
    
// == ALERTS == 
// alertcondition(buySignal, title='ADX Trigger Buy', message='ADX Trigger Buy')
// alertcondition(sellSignal, title='ADX Trigger Sell', message='ADX Trigger Sell')