Handelsstrategie mit doppeltem gleitendem Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2023-12-04 16:39:13
Tags:

img

Übersicht

Dies ist eine Umkehrhandelsstrategie, die auf zwei gleitenden Durchschnittsindikatoren basiert. Durch die Berechnung zweier Gruppen gleitender Durchschnittswerte mit unterschiedlichen Parameter-Einstellungen und die Beurteilung der Preisentwicklung entsprechend ihren Richtungsänderungen können Handelssignale generiert werden, indem der Empfindlichkeitsparameter für Richtungsänderungen festgelegt wird.

Grundsätze

Der Kernindikator dieser Strategie ist der doppelte gleitende Durchschnitt. Die Strategie ermöglicht die Auswahl der Art (SMA, EMA usw.), Länge und Preisquelle (Schließpreis, typischer Preis usw.) des gleitenden Durchschnitts. Nach der Berechnung zweier Gruppen von gleitenden Durchschnitten werden ihre Richtungen durch die Definition des Reaktionsparameters bestimmt. Ein Kaufsignal wird erzeugt, wenn die schnelle Linie über die langsame Linie überschreitet, und ein Verkaufssignal wird erzeugt, wenn sie darunter überschreitet. Der Reaktionsparameter wird verwendet, um die Empfindlichkeit anzupassen, um Wendepunkte zu erkennen.

Darüber hinaus legt die Strategie auch die Bedingungen fest, um die Richtungsänderung und den anhaltenden Anstieg / Fall zu bestimmen, um falsche Signale zu vermeiden.

Analyse der Vorteile

Die Dual-Movavg-Strategie kombiniert schnelle und langsame Linien mit verschiedenen Parameter-Einstellungen, die effektiv das Rauschen im Handelsmarkt filtern und stärkere Trends identifizieren können.

Der Reaktionsparameter ermöglicht es, die Strategie flexibel und anpassungsfähig an verschiedene Zyklen und Varietäten zu gestalten.

Risikoanalyse

Das größte Risiko dieser Strategie ist, den Wendepunkt zu verpassen und Geld zu verlieren oder eine umgekehrte Position einzunehmen. Dies bezieht sich auf die Einstellung der Reaktionsparameter. Wenn die Reaktion zu klein ist, treten häufig falsche Signale auf. Wenn die Reaktion zu groß ist, kann sie bessere Einstiegspunkte verpassen.

Ein weiteres Risiko ist die Unfähigkeit, Verluste effektiv zu kontrollieren. Wenn die Preise heftig schwanken, kann es nicht schnell Verluste stoppen, was zu vergrößerten Verlusten führt. Dies erfordert die Verwendung von Stop-Loss-Strategien zur Kontrolle von Risiken.

Optimierungsrichtlinien

Die wichtigsten Optimierungsrichtungen dieser Strategie konzentrieren sich auf die Auswahl von Reaktionsparametern, Arten und Längen von gleitenden Durchschnitten. Eine angemessene Erhöhung der Reaktion kann falsche Signale reduzieren. Gleitende Durchschnittsparameter können nach verschiedenen Zyklen und Sorten getestet werden, um die beste Kombination für die Erzeugung von Signalen auszuwählen.

Darüber hinaus ist die Bestätigung von Handelssignalen mit anderen Hilfsindikatoren wie RSI und KD auch eine Optimierung Idee.

Zusammenfassung

Insgesamt ist diese Strategie relativ einfach und praktisch. Durch das Filtern mit doppelten gleitenden Durchschnitten und die Erzeugung von Handelssignalen kann sie effektiv Trendumkehrungen identifizieren und ist eine typische Trendfolgestrategie. Nach der Optimierung des Parameterportfolios wird ihre Fähigkeit, Trends zu erfassen und Positionen gegen den Markt zu halten, verbessert.


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

//@version=3
strategy(shorttitle="MA_color strategy", title="Moving Average Color", overlay=true)

// === INPUTS

ma_type   = input(defval="HullMA", title="MA Type: ", options=["SMA", "EMA", "WMA", "VWMA", "SMMA", "DEMA", "TEMA", "HullMA", "ZEMA", "TMA", "SSMA"])
ma_len    = input(defval=32, title="MA Lenght", minval=1)
ma_src    = input(close, title="MA Source")
reaction  = input(defval=2, title="MA Reaction", minval=1)

// SuperSmoother filter
// © 2013  John F. Ehlers
variant_supersmoother(src,len) =>
    a1 = exp(-1.414*3.14159 / len)
    b1 = 2*a1*cos(1.414*3.14159 / len)
    c2 = b1
    c3 = (-a1)*a1
    c1 = 1 - c2 - c3
    v9 = 0.0
    v9 := c1*(src + nz(src[1])) / 2 + c2*nz(v9[1]) + c3*nz(v9[2])
    v9
    
variant_smoothed(src,len) =>
    v5 = 0.0
    v5 := na(v5[1]) ? sma(src, len) : (v5[1] * (len - 1) + src) / len
    v5

variant_zerolagema(src,len) =>
    ema1 = ema(src, len)
    ema2 = ema(ema1, len)
    v10 = ema1+(ema1-ema2)
    v10
    
variant_doubleema(src,len) =>
    v2 = ema(src, len)
    v6 = 2 * v2 - ema(v2, len)
    v6

variant_tripleema(src,len) =>
    v2 = ema(src, len)
    v7 = 3 * (v2 - ema(v2, len)) + ema(ema(v2, len), len)              
    v7
    
variant(type, src, len) =>
    type=="EMA"     ? ema(src,len) : 
      type=="WMA"   ? wma(src,len): 
      type=="VWMA"  ? vwma(src,len) : 
      type=="SMMA"  ? variant_smoothed(src,len) : 
      type=="DEMA"  ? variant_doubleema(src,len): 
      type=="TEMA"  ? variant_tripleema(src,len): 
      type=="HullMA"? wma(2 * wma(src, len / 2) - wma(src, len), round(sqrt(len))) :
      type=="SSMA"  ? variant_supersmoother(src,len) : 
      type=="ZEMA"  ? variant_zerolagema(src,len) : 
      type=="TMA"   ? sma(sma(src,len),len) : sma(src,len)


// === Moving Average
ma_series = variant(ma_type,ma_src,ma_len)

direction = 0
direction := rising(ma_series,reaction) ? 1 : falling(ma_series,reaction) ? -1 : nz(direction[1])
change_direction= change(direction,1)
change_direction1= change(direction,1)

pcol = direction>0 ? lime : direction<0 ? red : na
plot(ma_series, color=pcol,style=line,join=true,linewidth=3,transp=10,title="MA PLOT")

/////// Alerts ///////

alertcondition(change_direction,title="Change Direction MA",message="Change Direction MA")


longCondition = direction>0
shortCondition = direction<0
if (longCondition)
    strategy.entry("BUY", strategy.long)
if (shortCondition)
    strategy.entry("SELL", strategy.short)



Mehr