Handelsstrategie mit doppeltem gleitenden Durchschnitt und Umkehrung


Erstellungsdatum: 2023-12-04 16:39:13 zuletzt geändert: 2023-12-04 16:39:13
Kopie: 0 Klicks: 554
1
konzentrieren Sie sich auf
1619
Anhänger

Handelsstrategie mit doppeltem gleitenden Durchschnitt und Umkehrung

Überblick

Es handelt sich um eine umgekehrte Handelsstrategie, die auf einem doppelten Moving Average-Indikator basiert. Die Strategie berechnet den Moving Average mit zwei verschiedenen Parameter-Sets, um die Preisentwicklung anhand ihrer Richtungsänderung zu beurteilen, und setzt die Sensitivitätsparameter für Richtungsänderungen, um ein Handelssignal zu erzeugen.

Strategieprinzip

Der Kern der Strategie sind die doppelten Moving Averages. Die Strategie erlaubt die Auswahl der Art des Moving Averages (SMA, EMA, etc.), der Länge und der Preisquelle (Endpreis, Typischer Preis, etc.). Nach der Berechnung der beiden Gruppen von Moving Averages wird die Richtung durch die Definition des Parameters Reaction beurteilt.

Darüber hinaus werden die Richtungsänderungen und die Bedingungen für eine anhaltende Auf-/Abwärtsbewegung festgelegt, um falsche Signale zu vermeiden. Die Abwärtsbewegung wird in verschiedenen Farben dargestellt. Die movavg-Linie wird bei anhaltender Aufwärtsbewegung als grün und bei einer Abwärtsbewegung als rot angezeigt.

Analyse der Stärken

Diese Doppel-Movavg-Strategie kombiniert mit einer schnellen und langsamen Linie, die mit verschiedenen Parametern eingestellt ist, um den Lärm des Handelsmarktes effektiv zu filtern und stärkere Trends zu erkennen. Im Vergleich zur Single-Movavg-Strategie reduziert sie die Fehlsignale und kann bei klareren Trends eingegeben werden, was zu einer höheren Gewinnquote führt.

Die Reaction-Sensitivitätsparameter ermöglichen die Flexibilität der Strategie für verschiedene Zyklen und Sorten. Der Strategieprozess ist intuitiv und leicht zu verstehen und zu optimieren.

Risikoanalyse

Die größte Gefahr besteht darin, dass man den Wendepunkt verpasst und dabei verliert oder umgekehrt positioniert. Dies hängt mit der Einstellung des Parameters Reaction zusammen. Wenn die Reaction zu klein ist, kann ein falsches Signal erzeugt werden.

Ein weiteres Risiko besteht darin, dass die Verluste nicht effektiv kontrolliert werden können. Wenn die Preise stark schwanken, können die Verluste nicht schnell gestoppt werden, was zu Verlusten führt. Dies muss mit einer Stop-Loss-Strategie kontrolliert werden.

Optimierungsrichtung

Die Optimierung dieser Strategie konzentriert sich hauptsächlich auf die Auswahl der Parameterreaction, der Art und der Länge des Moving Averages. Die Reaction kann entsprechend erhöht werden, um Fehlsignale zu reduzieren. Die Moving Average-Parameter können nach verschiedenen Perioden und Sorten getestet werden, um die optimale Kombination zu wählen, die das Signal erzeugt.

Zusätzlich kann man die Optimierung von Handelssignalen in Kombination mit anderen Hilfsindikatoren wie RSI, KD usw. bestätigen oder die automatische Optimierung von Parametern mithilfe von maschinellen Lernmethoden.

Zusammenfassen

Diese Strategie ist insgesamt einfach und praktisch und kann eine Trendwende durch eine doppelte Bewegung des Durchschnittsfilters und die Erzeugung von Handelssignalen effektiv erkennen. Sie ist eine typische Trendverfolgungsstrategie. Nach der Optimierung der Parameterkombination werden sowohl die Nach-Markt-Fangfähigkeit als auch die Anti-Markt-Positionsfähigkeit verbessert. Die Kombination mit Stop-Loss- und Positionsmanagementmechanismen ist effektiver.

Strategiequellcode
/*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)