Strategie für eine doppelte Kreuzung von gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2023-09-17 22:35:07
Tags:

Diese Strategie erzeugt Handelssignale, die auf der Überschneidung von zwei gleitenden Durchschnitten mit unterschiedlichen Perioden basieren.

Strategie Logik

Die Strategie ermöglicht es Benutzern, die Art und Länge der gleitenden Durchschnitte zu wählen. Zu den Typen gehören SMA, EMA, VWMA usw. Die Länge bestimmt die Periode der gleitenden Durchschnitte.

Zwei gleitende Durchschnitte werden auf der Grundlage der Auswahl des Benutzers berechnet. Wenn die schnellere Linie über die langsamere Linie kreuzt, wird ein goldenes Kreuz gebildet und ein Kaufsignal erzeugt. Wenn die schnellere Linie unter die langsamere Linie kreuzt, wird ein Todeskreuz gebildet und ein Verkaufssignal erzeugt.

Wenn der kurzfristige Durchschnittspreis über dem langfristigen Durchschnittspreis liegt, gilt er als Aufwärtstrend und sollte lange Positionen einnehmen.

Analyse der Vorteile

  • Die Strategielogik ist einfach und klar, leicht verständlich und umsetzbar.
  • Gleitende Durchschnitte können Marktlärm effektiv filtern und Trends erkennen.
  • Die Genehmigungsart und die Parameter können flexibel gewählt werden, um sich an verschiedene Produkte und Zeitrahmen anzupassen.
  • Einfach zu optimieren, indem verschiedene Indikatoren kombiniert werden.

Risikoanalyse

  • Kann mehrere falsche Signale erzeugen, wenn der Markt schwankt.
  • Eine unangemessene Parameterwahl kann zu einer schlechten Strategieleistung führen.
  • Die Signale liegen zurück und können keine Wendepunkte rechtzeitig erfassen.
  • - Sie sind plötzlichen Preisschocks ausgesetzt.

Risiken können durch Optimierung von Parametern, Kombination anderer Indikatoren zur Signalgenerierung, Implementierung von Stop Loss/Take Profit usw. verwaltet werden.

Optimierungsrichtlinien

  • Versuche verschiedene Arten und Längen von MAs, um optimale Parameter zu finden.
  • Hinzufügen anderer Indikatoren zur Signalfilterung, z. B. Volumen- und Volatilitätsindikatoren.
  • Hinzufügen von Stop-Loss-/Take-Profit-Logik, um den Drawdown zu reduzieren.
  • Einbeziehung einer Trendbewertung, um ungeeignete Marktbedingungen zu vermeiden.
  • Optimierung des Geldmanagements wie Positionsgröße, Risikobudgeting.

Schlussfolgerung

Die Strategie hat eine einfache und klare Logik der Erzeugung von Signalen mit Dual-MA-Crossover. Es ermöglicht eine flexible Parameter-Tuning und Kombinationen mit anderen Strategien zur Optimierung, aber die Risiken von unterschiedlichen Märkten sollten überwacht werden und das Geldmanagement ist entscheidend. Insgesamt ist es eine Strategie, die es wert ist, berücksichtigt zu werden.


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

//@version=2
strategy(title = "Noro's MAs Tests", shorttitle = "MAs tests", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)


len = input(30, defval = 30, minval = 2, maxval = 1000, title = "MA length")
type = input(1, defval = 1, minval = 1, maxval = 7, title = "Type")
src = input(close, defval = close, title = "Source")

//DEMA
dema = 2 * ema(src, len) - ema(ema(close, len), len)

//TEMA
xPrice = close
xEMA1 = ema(src, len)
xEMA2 = ema(xEMA1, len)
xEMA3 = ema(xEMA2, len)
tema = 3 * xEMA1 - 3 * xEMA2 + xEMA3

//KAMA
xvnoise = abs(src - src[1])
nfastend = 0.20
nslowend = 0.05
nsignal = abs(src - src[len])
nnoise = sum(xvnoise, len)
nefratio = iff(nnoise != 0, nsignal / nnoise, 0)
nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) 
kama = nz(kama[1]) + nsmooth * (src - nz(kama[1]))

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

ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0

plot(ma, color = blue, linewidth = 3, transp = 0)

trend = low > ma ? 1 : high < ma ? -1 : trend[1]

longCondition = trend == 1 and trend[1] == -1
if (longCondition)
    strategy.entry("Long", strategy.long)

shortCondition = trend == -1 and trend[1] == 1
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
    
    
    

Mehr