Strategie zur Umkehrung des doppelten gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 23.10.2023
Tags:

img

Übersicht

Diese Strategie verwendet hauptsächlich doppelte gleitende Durchschnitte als Kauf- und Verkaufssignale, um von Trendumkehrungen zu profitieren. Sie geht lang, wenn der kurzfristige gleitende Durchschnitt über den langfristigen gleitenden Durchschnitt überschreitet, und geht kurz, wenn der kurzfristige gleitende Durchschnitt unter den langfristigen gleitenden Durchschnitt überschreitet.

Strategie Logik

Die Strategie legt zunächst zwei gleitende Durchschnitte fest, einen kurzfristigen 20-Tage-MA und einen längerfristigen 60-Tage-MA.

Wenn die kurzfristige MA über die langfristige MA geht, signalisiert sie einen Aufwärtstrend, also gehen Sie lang.

Die Stop-Loss-Methode nach dem Long- oder Short-Gehen ist der Trailing-Stop, der auf dem höchsten Preis und dem niedrigsten Preis basiert, um einen maximalen Gewinn zu erzielen.

Die Hauptlogik des Kodex lautet:

  1. Berechnung der 20-Tage- und der 60-Tage-EMA
  2. Beurteilen Sie, ob die 20-Tage-EMA über die 60-Tage-EMA hinausgeht, gehen Sie dann lang
  3. Beurteilen, ob die 20-tägige EMA unter die 60-tägige EMA fällt, wenn ja, kurz gehen
  4. Nach dem Long gehen, Stop-Loss bei 3% unter dem höchsten Preis setzen
  5. Nach dem Short-Gehen einen Stop-Loss auf 3% über dem niedrigsten Preis setzen
  6. Anpassung des Stop-Loss bei Positionen

Analyse der Vorteile

Die Vorteile dieser Strategie sind:

  1. Einfache Logik, einfach umzusetzen.
  2. Dual MA kann falsche Brüche effektiv filtern.
  3. Die Verfolgung von Stopp-Schlössern mit maximalem Gewinn.
  4. Kann Signalen rechtzeitig erfassen, wenn sich der Trend ändert.
  5. Eine ordnungsgemäße Abbaukontrolle, relativ stabil.

Risikoanalyse

Es gibt auch einige Risiken:

  1. Häufige Verknüpfungen zwischen MAs, wenn der Trend unklar ist, was zu übermäßigen Verlusten führt.
  2. Eine unsachgemäße Stop-Loss-Einstellung kann zu locker oder zu aggressiv sein.
  3. Falsche Parametereinstellungen wie Periodenlänge können wichtige Signale verpassen.
  4. Hohe Handelskosten erodieren die Gewinnspanne.

Um den Risiken entgegenzuwirken:

  1. Sie sollten Filter anwenden, wenn der Trend unklar ist, um einen blinden Handel zu vermeiden.
  2. Testen und optimieren Sie den Stoppverlustbereich für die richtige Einstellung.
  3. Finden Sie durch Backtest und Tuning optimale Parameter.
  4. Reduzierung der Positionsgröße zur Senkung der Handelskosten.

Optimierungsideen

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Fügen Sie andere Filter wie RSI für Multi-Condition-Eintrag hinzu, um falsche Bremsen zu vermeiden.

  2. Optimieren Sie MA-Perioden, um die beste Parametermischung zu finden.

  3. Optimieren Sie den Stop-Loss-Bereich durch Backtest-Berechnung, um den optimalen Bereich zu finden.

  4. Die Logik des Wiedereintritts nach dem Stop-Loss-Ausgang setzen, um die Handelsfrequenz zu reduzieren.

  5. Kombination mit dem Trendindikator, um den Handel zu unterbrechen, wenn der Trend unklar ist.

  6. Zusätzliche Positionsgröße und dynamischer Stop-Loss basierend auf den Marktbedingungen.

Zusammenfassung

Zusammenfassend ist die Dual-MA-Umkehrstrategie insgesamt einfach und praktisch und identifiziert Trendwendepunkte durch Dual-MA-Kreuzungen. Aber es gibt Risiken, die Parameter-Tuning, Stop-Loss-Optimierung und das Hinzufügen von Filtern erfordern, um die Strategieneffizienz zu maximieren. Mit sorgfältiger Optimierung und diszipliniertem Risikomanagement kann sie zu einer stabil gewinnbringenden Swing-Trading-Strategie werden.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
needdb = input(true, defval = true, title = "Double Body")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Mehr