Doppel gleitender Durchschnittskanal mit Trendverfolgungsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-06 15:41:23
Tags:

img

Übersicht

Diese Strategie verwendet schnelle und langsame gleitende Durchschnitte, um ein Dual-Rail-System aufzubauen, kombiniert mit dem Trendindex ADX für die Trendbeurteilung und dem DMI-Richtungsindex, um die Trendrichtung zu bestimmen, um den Trend nach seiner Festlegung zu verfolgen und rechtzeitig auszusteigen, wenn der Trend umkehrt, wobei es vermieden wird, Spitzen zu jagen und Bänder zu verkaufen.

Handelslogik

  1. Die schnellen und langsamen gleitenden Durchschnitte bilden ein Dual-Rail-Kanal-System. Wenn der schnelle MA über den langsamen MA überquert, ist es ein goldenes Kreuz-Eingangssignal für lange Zeit. Wenn der schnelle MA unter dem langsamen MA überquert, ist es ein Todeskreuz-Ausgangssignal.

  2. Der ADX beurteilt das Vorhandensein und die Stärke eines Trends. Wenn der ADX über dem Schlüsselniveau liegt, zeigt er an, dass ein Trend existiert und stark ist. Handelssignale werden nur generiert, wenn der Trend stark ist.

  3. Der DI+ des DMI bestimmt die Richtung des Trends. Wenn der DI+ positiv ist, zeigt er einen Aufwärtstrend an. Wenn der DI+ negativ ist, zeigt er einen Abwärtstrend an. Handelssignale werden nur erzeugt, wenn die Trendrichtung übereinstimmt.

  4. Zeitbereichstests überprüfen die Wirksamkeit der Strategie über verschiedene Zeiträume hinweg.

Analyse der Vorteile

  1. Das Doppelschienensystem filtert Ausbrüche, um falsche Signale zu vermeiden.

  2. Der ADX verhindert einen übermäßigen Handel während der Konsolidierung, indem er einen Trend verlangt.

  3. Der DMI sorgt dafür, dass die Trades mit der Trendrichtung übereinstimmen und Trades gegen den Trend verhindern.

  4. Zeitbereichstests überprüfen Parameter und optimieren Einstellungen.

Risikoanalyse

  1. Die Kanäle können Fallen bilden, die zum Vermeiden von Schlagsauen anhalten müssen.

  2. ADX-Verzögerungen können frühe Gelegenheiten verpassen und eine niedrigere Schlüsselstufe erfordern.

  3. DMI-Richtungsverzögerungen können auch frühe Trends verpassen und kürzere Perioden benötigen.

  4. Die Parameter müssen möglicherweise in verschiedenen Zeiträumen angepasst werden.

Optimierung

  1. Versuche Parameterkombinationen, um optimale Einstellungen zu finden.

  2. Fügen Sie Filter wie Bollinger Bands für die Signalqualität hinzu.

  3. Einbeziehung von Stop Loss zur Begrenzung von Verlusten.

  4. Parameter automatisch mit maschinellem Lernen optimieren.

  5. Fügen Sie mehr Faktoren wie Stimmung und Nachrichten ein.

Schlussfolgerung

Diese Strategie kombiniert die Stärken von gleitenden Durchschnitten, Trendindizes und Richtungsindizes, um Trends zu identifizieren und zu verfolgen. Bei der Überprüfung der Parametergültigkeit ist eine kontinuierliche Optimierung erforderlich, um sich an mehr Marktbedingungen anzupassen, indem Parameter angepasst, Stops hinzugefügt, mehr Faktoren synthetisiert und so weiter, um die Robustheit und Rentabilität zu verbessern. Insgesamt bietet sie einen zuverlässigen Trend nach der Methodik für den quantitativen Handel.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// author: codachang0726
strategy(title = "(S)MA+ADX+DI+time", shorttitle = "(S)MA+ADX+DI+time", overlay = true)

// === INPUT MA LENGTHS ===
fastMA    = input(defval = 7,   title = "FastMA",          minval = 1, step = 1)
slowMA    = input(defval = 14,   title = "SlowMA",          minval = 1, step = 1)

// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 9,    title = "From Month",      minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        minval = 1, maxval = 31)
thruYear  = input(defval = 2022, title = "Thru Year",       minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

// === MA LOGIC ===
crossOv   =  sma(close, fastMA) > sma(close, slowMA)     // true when fastMA over slowMA
crossUn   =  sma(close, fastMA) < sma(close, slowMA)     // true when fastMA under slowMA

// DI+ADX
adxlen      = input(14, title="ADX Smoothing")
dilen       = input(14, title="DI Period")
keyLevel    = input(20, title="Keylevel for ADX")
[diplus, diminus, adx] = dmi(dilen, adxlen)
di = (diplus - diminus)

buy = di > 0 and crossOv and adx > keyLevel
sell = di < 0 and crossUn and adx > keyLevel

buy_time = buy and not buy[1]
sell_time = sell and not sell[1]

// === EXECUTION ===
strategy.entry("L", strategy.long, when = window() and buy_time)    // enter long when "within window of time" AND crossover
strategy.close("L", when = window() and sell_time)                   // exit long when "within window of time" AND crossunder         

// === PLOTTING ===
bgcolor(color = showDate and window() ? color.gray : na, transp = 90)                                     // plot "within window of time"
plot(sma(close, fastMA), title = 'FastMA', color = color.yellow, linewidth = 2, style = plot.style_line)  // plot FastMA
plot(sma(close, slowMA), title = 'SlowMA', color = color.aqua,   linewidth = 2, style = plot.style_line)  // plot SlowMA


Mehr