ADX Momentum Trend Strategie


Erstellungsdatum: 2024-01-16 15:57:17 zuletzt geändert: 2024-01-16 15:57:17
Kopie: 0 Klicks: 762
1
konzentrieren Sie sich auf
1617
Anhänger

ADX Momentum Trend Strategie

Überblick

Die Strategie basiert auf dem ADX-Indikator, um die Markttrends zu bestimmen, kombiniert mit dem DMI-Indikator, um die Hohlraumrichtung zu bestimmen, die Trendstärke mit der ADX-Schräglage zu bestimmen, die ADX-Key-Value-Filterung für nicht-trendige Märkte einzustellen und die Handelssignale mit Hilfe des Moving Averages zu filtern.

Strategieprinzip

  1. Berechnung der ADX, DI+ und DI-Werte.
  2. ADX-Schlange > 0, was auf eine steigende Tendenz hindeutet; der Schlüsselwert wurde auf 23 gesetzt, um nicht-trendende Märkte zu filtern.
  3. DI+ ist höher als DI-, was bedeutet, dass die Mehrkopfkraft größer ist als die Luftkraft.
  4. Wenn die Filterung des Moving Averages aktiviert ist, wird nur dann ein Mehrkopfsignal erzeugt, wenn der Schlusskurs über dem Moving Average liegt.
  5. Wenn die ADX-Schräglage ist, ist eine Ausfalltrend zu erkennen.

Analyse der Stärken

  1. Hilfs-MA-Filter reduzieren den Noise-Trading in nicht-trendigen Märkten.
  2. Die ADX-Schrägpunkte sind ein guter Indikator für die Entwicklung von Trends.
  3. Die DI-Beschlüsse werden mit den ADX-Beschlüssen kombiniert, um ein vollständiges Trend-Trading-Entscheidungssystem zu bilden.
  4. Der Rückzug und die Verlust- und Verlustquote dürften besser sein als die einfache Moving Average-Strategie.

Risikoanalyse

  1. Die ADX-Indikatoren setzen unterschiedliche Parameter, was zu sehr unterschiedlichen Ergebnissen führt.
  2. Das DMI hat noch keine vollständige Feststellung über die Flugrichtung und könnte ein falsches Signal abgeben.
  3. Es gibt eine gewisse Verzögerung, die die Effektivität der Strategie beeinträchtigt.

Optimierungsrichtung

  1. Optimierung der ADX-Parameterkombinationen, um die besten Parameter zu finden.
  2. Es ist wichtig, dass die Strategie der Stop-Loss-Strategie verbessert wird, um zu verhindern, dass sich einzelne Verluste ausweiten.
  3. Versuchen Sie, die Filtersignale mit anderen Indikatoren zu kombinieren.

Zusammenfassen

Die Strategie nutzt die Vorteile der ADX-Trend- und Trendstärke in Kombination mit dem DMI-Indikator zur Entwicklung eines vollständigen Trend-Tracking-Systems. Gleichzeitig hilft der Moving Average dabei, den Geräusch der nicht-trendenden Märkte effektiv zu filtern. Die Optimierung der Parameter und der Kombination der Indikatoren können die Strategie weiter verbessern.

Strategiequellcode
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 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')