Trend nach einer auf einem gleitenden Durchschnitt basierenden Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-23 12:21:40
Tags:

img

Übersicht

Diese Strategie bestimmt die Kursentwicklungsrichtung, indem zwei gleitende Durchschnitte mit unterschiedlichen Parameter-Einstellungen berechnet und ihre Crossover-Situationen verglichen werden, um den Trend nach dem Handel umzusetzen. Wenn der schnelle gleitende Durchschnitt den langsamen gleitenden Durchschnitt von unten durchbricht, wird er als bullisches Signal beurteilt. Wenn der schnelle gleitende Durchschnitt den langsamen gleitenden Durchschnitt von oben durchbricht, wird er als bärisches Signal beurteilt. Diese Strategie kann durch Anpassung von Parametern ein Urteil über Trends verschiedener Zyklen erzielen.

Strategieprinzip

Diese Strategie verwendet zwei Sätze gleitender Durchschnitte mit unterschiedlichen Parameter-Einstellungen zum Vergleich. Der erste gleitende Durchschnittsparameter wird von len1 und type1 und der zweite gleitende Durchschnittsparameter wird von len2 und type2 festgelegt. Wo len1 und len2 die Zykluslänge der beiden gleitenden Durchschnitte darstellen und type1 und type2 den Algorithmustyp des gleitenden Durchschnitts darstellen.

Wenn der schnelle gleitende Durchschnitt über den langsamen gleitenden Durchschnitt überschreitet, um ein goldenes Kreuz zu bilden, wird er als Aufwärtssignal beurteilt.

Je nach Richtung des Crossover-Signals werden Long- oder Short-Positionen ausgeführt. Wenn ein Bullish-Signal ausgelöst wird, wird eine Long-Position mit der Menge default_qty_value oder Prozent_of_equity geöffnet, wenn der Needshort-Parameter wahr ist.

Vorteile

  1. Unterstützung der Kombination von 7 verschiedenen Arten gleitender Durchschnitte zur flexiblen Anpassung an die Marktbedingungen
  2. Anpassung der Parameter von zwei gleitenden Durchschnitten zur Beurteilung langfristiger und mittelfristiger Trends
  3. Einfache und klare Vorschriften für die Beurteilung von Signalsignalen, leicht verständlich und umsetzbar
  4. Unterstützung von Long- und Short-Positionen, kann Trendverfolgungstransaktionen durchführen

Risiken und Lösungen

  1. Gleitende Durchschnitte haben Verzögerungsmerkmale und können Preisumkehrpunkte verpassen
    Lösungsansatz: Zyklen des gleitenden Durchschnitts entsprechend verkürzen oder in Kombination mit anderen Indikatoren verwenden

  2. Nicht geeignet für Märkte mit hoher Volatilität und häufigen Umkehrungen
    Lösung: Hinzufügen von Filterbedingungen, um den Handel auf schwankenden Märkten zu vermeiden

  3. Es besteht ein gewisses Risiko für falsche Signale.
    Lösung: Hinzufügen anderer Filterindikatoren für die Kombination zur Verbesserung der Signalzuverlässigkeit

Optimierungsrichtlinien

  1. Optimierung der Zykluskombination von gleitenden Durchschnitten und Prüfung der Auswirkungen von langen und kurzen Zyklusparametern auf die Strategierendite
  2. Testen Sie die Leistung verschiedener Arten von gleitenden Durchschnitten, um den optimalen gleitenden Durchschnittsalgorithmus zu finden
  3. Hinzufügen von Handelsvolumenvariablen oder Bollinger Bands zur Kombination zur Verbesserung der Signalqualität
  4. Optimierung der Positionsmanagementstrategie zur Verbesserung des Ansatzes "Prozent_von_Eigenkapital" für feste Positionen

Zusammenfassung

Diese Strategie beurteilt den Preistrend, indem sie die Überschneidungen von zwei gleitenden Durchschnitten vergleicht und entsprechende lange und kurze Operationen durchführt, um Trends zu erfassen und von ihnen zu profitieren. Der Vorteil besteht darin, dass die Signalregeln einfach und klar sind, die Parameter anpassbar sind, die Anwendbarkeit stark ist und für verschiedene Marktumgebungen optimiert und angepasst werden kann. Achten Sie darauf, die Verzögerungsrisiken von gleitenden Durchschnitten und unruhigen Märkten zu vermeiden, die durch Hinzufügen anderer Indikatoren zur Filterung zur Verbesserung der Signalqualität reduziert werden können.


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

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

needlong = input(true, "long")
needshort = input(true, "short")

len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length")
type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type")
src2 = input(close, defval = close, title = "Fast MA Source")

len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length")
type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type")
src1 = input(close, defval = close, title = "Slow MA Source")

col = input(false, defval = false, title = "Color of bar")

o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") 

//DEMA 1
dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1)

//TEMA 1
xEMA1 = ema(src1, len1)
xEMA2 = ema(xEMA1, len1)
xEMA3 = ema(xEMA2, len1)
tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3

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

//PriceChannel 1
lasthigh1 = highest(src1, len1)
lastlow1 = lowest(src1, len1)
center1 = (lasthigh1 + lastlow1) / 2

//DEMA 2
dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2)

//TEMA 2
xEMA12 = ema(src2, len2)
xEMA22 = ema(xEMA12, len2)
xEMA32 = ema(xEMA22, len2)
tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32

//KAMA 2
xvnoise2 = abs(src2 - src2[1])
nfastend2 = 0.20
nslowend2 = 0.05
nsignal2 = abs(src2 - src2[len2])
nnoise2 = sum(xvnoise2, len2)
nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0)
nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) 
kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1]))

//PriceChannel 2
lasthigh2 = highest(src2, len2)
lastlow2 = lowest(src2, len2)
center2 = (lasthigh2 + lastlow2) / 2

//MAs
ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0
ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0
plot(ma1, color = blue, linewidth = 3, transp = 0)
plot(ma2, color = red, linewidth = 3, transp = 0)

//Signals
trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1]
up = trend == 1 and ((close < open and close[1] < open[1]) or col == false)
dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

Mehr