Die Ressourcen sind geladen. Beförderung...

Strategie für das gleitende Durchschnittsband

Schriftsteller:ChaoZhang, Datum: 2023-12-18 12:29:19
Tags:

img

Übersicht

Die Moving Average Ribbon-Strategie ist eine Trend-folgende Strategie, die auf mehreren gleitenden Durchschnitten basiert. Sie überwacht gleichzeitig schnelle und langsame gleitende Durchschnitte und erzeugt Handelssignale, wenn die Preise durch das gleitende Durchschnittsband durchbrechen. Die Strategie kombiniert Trendbestimmung und Überkauf / Überverkaufsindizes, die mittelfristige und langfristige Trends effektiv erfassen können.

Strategie Logik

Die Strategie verwendet 5 schnelle gleitende Durchschnitte (5-, 8-, 13-, 20- und 30-Tage-Linien) und 4 langsame gleitende Durchschnitte (45, 70-, 105 und 150-Tage-Linien). Die schnellen Linien bilden ein inneres gleitendes Durchschnittsband und die langsamen Linien bilden ein äußeres gleitendes Durchschnittsband. Ein Kaufsignal wird erzeugt, wenn die Preise über das innere Band brechen, und ein Verkaufssignal wird erzeugt, wenn die Preise unter das innere Band brechen. Um falsche Brechen auszufiltern, müssen die Preise 3 aufeinanderfolgende Kerzen lang das innere Band durchbrechen, und die meisten schnellen gleitenden Durchschnittswerte brechen auch synchron durch, bevor Handelssignale generiert werden.

Darüber hinaus beurteilt die Strategie auch langfristige Trends. Sie berücksichtigt nur die Erzeugung von Kaufsignalen, wenn die Preise über dem gleitenden Durchschnitt von 200 Tagen liegen. Im Gegenteil, sie berücksichtigt nur die Erzeugung von Verkaufssignalen, wenn die Preise unter den gleitenden Durchschnitt von 200 Tagen fallen. Durch die Bestimmung langfristiger Trends wird verhindert, dass Sie während der Konsolidierung gefangen werden.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Kombination von inneren und äußeren gleitenden Durchschnittsbändern mit schnellen und langsamen Linien funktioniert gut bei der Identifizierung von mittelfristigen bis langfristigen Trends.

  2. Der Mechanismus des aufeinanderfolgenden Breaks kann falsche Breaks effektiv filtern, während die meisten schnellen gleitenden Durchschnitte durchbrechen müssen, um sicherzustellen, dass sich der Trend ändert.

  3. Das Beurteilen langfristiger Trends verhindert, dass Sie während der Konsolidierung gefangen werden.

  4. Die gleitenden Durchschnittswerte selbst haben eine Trend-nachfolgende Fähigkeit, während die Kombination von Überkauf-/Überverkaufsindikatoren zur Festlegung von Stop-Loss-Punkten eine gute Risikokontrolle gewährleistet.

Risikoanalyse

Zu den wichtigsten Risiken dieser Strategie gehören:

  1. Bei falschen Ausbrüchen kann die Strategie Verluste nicht vollständig vermeiden.

  2. Verlustrisiko während von Trendschwankungen: Wenn der Markt für längere Zeiträume schwankt, können häufig Stop-Loss-Punkte erreicht werden, was zu größeren Verlusten führt.

  3. Unzulässige Einstellungen von gleitenden Durchschnittsparametern können auch zu Fehlern in den Handelssignalen führen, was zu größeren Verlusten führt.

Die entsprechenden Lösungen sind:

  1. Erweitern Sie die Stop-Loss-Punkte angemessen, um den Preisen genügend Spielraum zu geben, um sich zu bewegen.

  2. Hinzufügen von Trendbewertungsindikatoren, um zu vermeiden, dass während der Konsolidierung Positionen ohne Richtung errichtet werden, z. B. Filtern mit DMI, MACD und anderen Indikatoren.

  3. Verwenden Sie historische Backtesting- und Parameteroptimierungsmethoden, um die besten Parameterkombinationen auszuwählen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Optimieren Sie gleitende Durchschnittsparameter, um die besten Zykluszahlen auszuwählen.

  2. Hinzufügen von Trendbeurteilungsindikatoren zur Filterung, wie RSI für Überkauf/Überverkauf, Bollinger Bands für Kanal-Breakouts usw. Vermeiden Sie es, Blindpositionen zu erstellen, wenn die Trends unklar sind.

  3. Adaptive gleitende Durchschnitte annehmen. Dynamische Optimierung der gleitenden Durchschnittsparameter entsprechend den sich ändernden Marktbedingungen und der Volatilität, damit sie besser auf den aktuellen Marktzustand abgestimmt sind.

  4. Kombinieren Sie maschinelle Lernmodelle, um die Trendwahrscheinlichkeiten zu beurteilen, und erstellen Sie Wahrscheinlichkeitsmodelle, um die Chancen auf einen erfolgreichen Ausbruch zu bewerten und das Entscheidungssystem bei der Beurteilung des idealen Eintrittszeitpunkts zu unterstützen.

  5. Optimieren Sie Stop-Loss-Strategien für eine bessere Preisverfolgung, z. B. Trailing-Stop-Loss oder dynamische Positionsgrößen-Stop-Loss, um die Stop-Loss-Linie intelligenter zu machen.

Zusammenfassung

Die Moving Average Ribbon-Strategie ist eine der häufigsten Trendfolgestrategien. Sie kombiniert schnelle und langsame Linien, um mittelfristige und langfristige Trends zu beurteilen, und setzt aufeinanderfolgende Breakout-Mechanismen fest, um Eintritte zu entscheiden. Die Strategie balanciert Trendfollowing und Überkauft/Überverkauft-Bedingungen. Mit Parameteroptimierung und Indikatorverbesserung kann ihre Leistung weiter verbessert werden.


//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)



trima(_src, _len) =>
    sma(sma(_src, _len), _len)
hma(_src, _len) =>
    wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
    2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
    3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + 
       ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
    ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)

ma(_src, _len) =>
    hma__1 = hma(_src, _len)
    ema_1 = ema(_src, _len)
    sma_1 = sma(_src, _len)
    wma_1 = wma(_src, _len)
    trima__1 = trima(_src, _len)
    zlema__1 = zlema(_src, _len)
    dema__1 = dema(_src, _len)
    tema__1 = tema(_src, _len)
    matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : 
       matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : 
       matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1

ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)




maColor(ma, maRef) =>
    if change(ma) <= 0 and ma05 < maRef
        color.new(color.red, 20)
    else
        if change(ma) >= 0 and ma05 > maRef
            color.new(color.navy, 20)
        else
            if change(ma) < 0 and ma05 > maRef
                color.new(color.red, 20)
            else
                if change(ma) >= 0 and ma05 < maRef
                    color.new(color.navy, 20)
                else
                    color.gray


aboveConfirmed(x,maRef)=>
    above=true
    for i=1 to x
        if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
            above:=false
    above


aboveMost(x,len)=>
    above=0
    boolean=false
    if close[len]>ma05[len]
        above:=above+1
    if close[len]>ma08[len]
        above:=above+1
    if close[len]>ma13[len]
        above:=above+1
    if close[len]>ma20[len]
        above:=above+1
    if close[len]>ma30[len]
        above:=above+1
    if close[len]>ma45[len]
        above:=above+1
    if close[len]>ma70[len]
        above:=above+1
    if close[len]>ma105[len]
        above:=above+1
    if close[len]>ma150[len]
        above:=above+1
    if close[len]>ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
    
belowMost(x,len)=>
    above=0
    boolean=false
    if close[len]<ma05[len]
        above:=above+1
    if close[len]<ma08[len]
        above:=above+1
    if close[len]<ma13[len]
        above:=above+1
    if close[len]<ma20[len]
        above:=above+1
    if close[len]<ma30[len]
        above:=above+1
    if close[len]<ma45[len]
        above:=above+1
    if close[len]<ma70[len]
        above:=above+1
    if close[len]<ma105[len]
        above:=above+1
    if close[len]<ma150[len]
        above:=above+1
    if close[len]<ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
        
        
belowConfirmed(x,maRef)=>
    below=true
    for i=1 to x
        if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
            below:=false
    below
            
            
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
            
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)


closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)

isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))




strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)



Mehr