Strategie zur Beobachtung der Trendentwicklung durch zwei gleitende Durchschnittswerte

Schriftsteller:ChaoZhang, Datum: 21.12.2023
Tags:

img

Übersicht

Die Dual Moving Average Trend Tracking Strategie ist eine quantitative Handelsstrategie, die die Kursentwicklung von Aktien verfolgt.

Strategieprinzip

Diese Strategie basiert hauptsächlich auf dem doppelten exponentiellen gleitenden Durchschnittssystem, um die Richtung des Kurstrends zu bestimmen. Die Strategie verwendet zwei schnelle und langsame EMAs mit unterschiedlichen Parametern, die schnelle EMA1 reagiert schneller auf Preisänderungen und die langsame EMA2 reagiert langsamer auf Preisänderungen. Wenn die schnelle Linie über die langsame Linie überschreitet, ist dies ein Kaufsignal, das anzeigt, dass der Preis zu steigen begonnen hat; wenn die schnelle Linie unterhalb der langsamen Linie überschreitet, ist dies ein Verkaufssignal, das anzeigt, dass der Preis zu fallen begonnen hat.

Darüber hinaus führt die Strategie auch den ADX-Indikator ein, um die Stärke des Trends zu beurteilen. ADX berechnet Preisschwankungen, um die Stärke des Trends zu beurteilen. Wenn ADX steigt, bedeutet dies, dass der Trend stärker wird; wenn ADX fällt, bedeutet dies, dass der Trend schwächer wird. Die Strategie legt die Handelsfilterbedingungen durch den ADX-Indikator fest und gibt nur Handelssignale aus, wenn die Trendstärke relativ stark ist.

Insbesondere sind die Regeln für die Erzeugung von Signalen in der Strategie:

  1. Gehen Sie lang, wenn die schnelle Linie über die langsame Linie kreuzt, und gehen Sie kurz, wenn die schnelle Linie unter der langsamen Linie kreuzt
  2. Nur bei ADX>25 lang und kurz zulässig

Dies kann ungültige Signale mit einer schwächeren Trendstärke effektiv filtern und die Stabilität des Handelssystems weiter verbessern.

Vorteile der Strategie

Diese Strategie hat folgende Hauptvorteile:

  1. Erfasst mittel- bis langfristige Preisentwicklungen: Das duale EMA-System kann die mittelfristigen bis langfristigen Preisentwicklungen effektiv bestimmen und die Beeinträchtigung durch kurzfristigen Marktlärm vermeiden.

  2. Falsche Ausbrüche filtern: Durch die Beurteilung der Trendstärke durch den ADX-Indikator werden unnötige Verluste durch falsche Ausbrüche um Trendwendepunkte vermieden.

  3. Großer Parameteroptimierungsraum: Schnelle und langsame Linienparameter, ADX-Parameter und mehr haben Raum für Optimierungen, die durch Parameterkombinationen bessere Handelsergebnisse erzielen können.

  4. Hohe Anpassungsfähigkeit: Diese Strategie ist für die meisten Bestände und Zeitrahmen geeignet und auf verschiedenen Märkten erprobt.

  5. Einfach umzusetzen: Diese Strategie erfordert nur einfache gleitende Durchschnittsindikatoren, verbraucht wenig Ressourcen, ist einfach zu programmieren und hat geringe praktische Anwendungskosten.

Risiken der Strategie

Diese Strategie birgt auch einige Risiken, die sich hauptsächlich auf folgende Bereiche konzentrieren:

  1. Trendumkehrrisiko: Jede Trendstrategie kann die Umkehrpunkte des Trends nicht perfekt bestimmen, und sie ist dazu verpflichtet, größere Verluste zu erleiden, wenn sich der reale Trend tatsächlich umkehrt.

  2. Übermäßiges Optimierungsrisiko: Eine extreme Optimierung der Parameter kann auch dazu führen, dass die Strategie zu sehr auf historische Daten angepasst wird, was die Stabilität und praktische Wirkung der Strategie verringert.

  3. Risiko eines Ereignisses des Schwarzen Schwanen: Große unerwartete Ereignisse werden das ursprüngliche Preistrendmodell durchbrechen, wodurch der gleitende Durchschnittsindikator ausfällt und manuelle Intervention oder Stop-Loss-Einstellungen erforderlich sind, um Verluste zu kontrollieren.

Um den oben genannten Risiken entgegenzuwirken, können wir die folgenden Aspekte optimieren:

  1. Einführung zusätzlicher Indikatoren zur Bestimmung von Preiswendepunkten, z. B. Einführung des Handelsvolumens, das sich bei Erscheinen von Preiswendepunkten verstärkt.

  2. Die ADX-Parameter sollten angemessen gelockert werden, um zu gewährleisten, dass Chancen in den frühen Phasen eines Trends genutzt werden können.

  3. Multi-Gruppen-Schulungen und Tests von Parameterkombinationen durchführen und Kombinationen mit guter Stabilität und praktischer Wirkung auswählen, um Risiken einer Überoptimierung einzelner Parametergruppen zu vermeiden.

Richtungen für die Optimierung der Strategie

Es gibt auch einige Richtungen, in denen diese Strategie optimiert werden kann:

  1. Einführung von Stop-Loss-Mechanismen: Setzen Sie einen beweglichen Stop-Loss oder einen prozentualen Stop-Loss, der Verluste aktiv stoppen kann, wenn sich Trends umkehren, um übermäßige Verluste zu vermeiden.

  2. Kombination von Handelsvolumenindikatoren: Zum Beispiel Handelsvolumen, das falsche Signale vermeiden kann, wenn sich das Handelsvolumen bei Preiswendepunkten erweitert.

  3. Parameter selbstadaptive Optimierung: Die Anpassung der Indikatorparameter an Echtzeitmarktveränderungen anstelle von festen statischen Parametern, die die Stabilität der Strategien erheblich verbessern können.

  4. Einführung von maschinellem Lernen: Verwenden Sie maschinelle Lernalgorithmen, um große Mengen historischer Daten zu analysieren, um Parameter für gleitende Durchschnitte und ADX zu bestimmen und sogar zukünftige Kursbewegungen vorherzusagen.

  5. Kreuzzyklusoptimierung: Verschiedene Handelszyklusparameter können unterschiedlich festgelegt werden und die optimale Konfiguration für jeden Zyklus kann getestet werden.

Zusammenfassung

Im Allgemeinen ist die Dual Moving Average Trend Tracking Strategie eine reife und stabile Strategieidee. Diese Strategie erfasst mittelfristige bis langfristige Preistrends durch das duale EMA-System und hat den ADX-Indikator, um Signale zu filtern, die Aktienkurstrends effektiv erfassen und Störungen durch kurzfristigen Marktlärm vermeiden können. Gleichzeitig birgt diese Strategie auch bestimmte Risiken, die die Optimierung von Parameterkombinationen und Stop-Loss-Methoden erfordern, und kann sogar mehr Hilfsindikatoren und maschinelle Lernalgorithmen einführen, um die Strategie-Stabilität zu verbessern. Zusammenfassend hat die Dual Moving Average Trend Tracking Strategie ein gutes Gleichgewicht und ist eine quantitative Strategieidee, die für mittelfristige bis langfristige Anleger geeignet ist.


/*backtest
start: 2022-12-14 00:00:00
end: 2023-11-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kitaec Strategy4", shorttitle = "Kitaec str4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(14, defval=14, minval=1, maxval=1000, title="Smoothing")
len2 = input(14, defval=14, minval=1, maxval=1000, title="Smoothing2")
len3=input(550)
src = close
ema1=ema(src, len)
ema2=ema(ema1, len2)
d=ema1-ema2
zlema=ema1+d

ema21=ema(src, (len/3)*2)
ema22=ema(ema21, (len2/3)*2)
d2=ema21-ema22
zlema2=ema21+d2

ema31=ema(src, len3)
ema32=ema(ema21, len3)
d3=ema31-ema32
zlema3=ema31+d2

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
//ma1 = security(tickerid, "60", vwma(src, len)[1])
//ma2 = security(tickerid, "120", vwma(src, len)[1])
//plot(ma1, linewidth = 2, color = blue, title = "MA")
//plot(ma2, linewidth = 2, color = red, title = "MA2")

// ADX
lenadx = 14
lensig = 14
limadx = 18

up = change(high)
down = -change(low)
trur = rma(tr, lenadx)
plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, lenadx) / trur)
minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, lenadx) / trur)
sum = plus + minus 
adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), lensig)
adx2 = ema(adx, 14)
adx2i = ema(adx2,14)
dadx2 = adx2 - adx2i
zladx2 = adx2 + dadx2
plus2 = ema(plus, 14)
plus2i = ema (plus2, 14)
dplus2 = plus2 - plus2i
zlplus2 = plus2 + dplus2

minus2 = ema(minus, 14)
minus2i = ema (minus2, 14)
dminus2 = minus2 - minus2i
zlminus2 = minus2 + dminus2

vwma = vwma(close, 150)
vwma2 = ema(vwma, 9)
vwma2i = ema(vwma2, 9)
dvwma2 = vwma2 - vwma2i
zlvwma2 = vwma2 + dvwma2


rmax=rma(src, len)
rmax2=rma(rmax, len2)
rmd=rmax-rmax2
zlrmax=rmax+rmd
rmaxz=rma(src, (len/3)*2)
rmaxz2=rma(rmaxz, (len2/3)*2)
rmzd=rmaxz-rmaxz2
zlrmaxz=rmaxz+rmzd
rmaxcol2=zlrmaxz[1] > zlema2[1] ? red:lime
rmaxcol= zlrmax[1] > zlema[1] ? red:lime


rmazlema3=rma(zlema3, 100)
plot(rmazlema3, color=gray, linewidth=2)
plot(zlema, color=green)
plot(zlema2, color=yellow)
plot(zlema3, color=teal, linewidth=2)
plot(ema2, color=na)
plot(rmax, color=rmaxcol2, linewidth=3)
plot(zlrmax, color=rmaxcol, linewidth=3)


//Trading
size = strategy.position_size
lot = 0.0 
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if zlrmax[1] < zlema[1]
    strategy.entry("Buy", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if zlrmax[1] > zlema[1]
    strategy.entry("Sell", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))


Mehr