Strategie des EMA-Oszillationsumkehrsystems

Schriftsteller:ChaoZhang, Datum: 2023-10-18 12:23:13
Tags:

img

Übersicht

Diese Strategie verwendet ein gleitendes Durchschnittssystem, um die Trendrichtung zu bestimmen, und kombiniert den Volatilitätsindex, um schwankende Märkte mit geringer Volatilität zu vermeiden, mit einem Kronleuchter-Ausgang, um Trades zu verwalten.

Grundsätze

Die Strategie beurteilt die Trendrichtung, indem sie schnelle und langsame gleitende Durchschnitte vergleicht. Es geht lang, wenn ein schneller MA über einen langsamen MA überschreitet, und kurz, wenn ein schneller MA unter einen langsamen MA überschreitet. Um oszillierende Märkte zu vermeiden, verwendet die Strategie auch Bollinger-Bänder. Sie erzeugt Handelssignale, wenn die Veränderungsrate der BB-Breite einen Schwellenwert überschreitet. Schließlich verwendet die Strategie Chandelier-Ausgänge als Stop-Loss, um nicht in Bereichsmärkten gefangen zu werden.

Insbesondere ist die Handelslogik wie folgt:

  1. Berechnung des schnellen MA (Standard 20-Tage) und des langsamen MA (Standard 50-Tage).

  2. Berechnen Sie die Veränderungsrate der Breite des Bollinger Bands (Standardsatz 40 Tage, 2 Standardabweichungen).

  3. Bei einer schnellen MA über einer langsamen MA und einer Veränderung der Breite von BB übersteigt der Standardschwellenwert 9% wird die Long-Rate ausgewählt.

  4. Verkürzen, wenn der schnelle MA unter den langsamen MA fällt und die Veränderungsrate der BB-Breite den Standardschwellenwert von 9% überschreitet.

  5. Berechnen Sie Chandelier lange und kurze Haltestellen.

  6. Der lange Stopp ist der höchste Höchst-ATR-Multiplizier, der kurze Stopp ist der niedrigste Niedrig + ATR-Multiplizier.

Vorteile

  1. Das MA-System verfolgt Trends effektiv.

  2. Die Änderung der BB-Breite filtert die Schwingungen aus und reduziert unnötige Trades.

  3. Chandelier verlässt rechtzeitig Stoppverluste, um nicht gefangen zu werden.

  4. Mehrere einstellbare Parameter zur Optimierung.

  5. Klare Logik, leicht zu verstehen und umzusetzen.

Risiken

  1. Eine Verzögerung der MA kann schnelle Umkehrungen verpassen.

  2. Falsche BB-Parameter können gültige Signale filtern.

  3. Übermäßige Lustre-Ausgänge verursachen Überhandelungen.

  4. Eine unzureichende Optimierung der Parameter führt zu Risiken.

  5. Nicht in der Lage, sich an extreme Marktveränderungen durch große Ereignisse anzupassen.

Optimierung

  1. Versuche verschiedene MA-Kombinationen, um optimale Parameter zu finden.

  2. Versuche verschiedene BB-Perioden für den besten Volatilitätsfilter.

  3. Hinzufügen anderer Indikatoren für die Eingangsbestätigung.

  4. Einführung dynamischer Stopps, um die Märkte besser zu verfolgen.

  5. Nutzen Sie maschinelles Lernen, um sich automatisch für sich ändernde Märkte zu optimieren.

Zusammenfassung

Diese Strategie integriert MA-System, BB-Indikator und Kronleuchter-Ausgänge, um ein relativ stabiles Trendfolgensystem zu bilden. Richtige Parameteroptimierung kann gute Ergebnisse erzielen. Aber die Risiken einer Trendumkehr und Schwingung bleiben bestehen. Maschinelles Lernen kann die Robustheit weiter verbessern. Insgesamt eine gute Strategie für das Lernen.


/*backtest
start: 2022-10-11 00:00:00
end: 2023-10-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © juanchez

//@version=4
strategy("CHI", overlay = true, close_entries_rule = "ANY")

n = input(title= "highest high o lowest low period", defval= 22)
f= input(title= "multiplicador", defval= 4)
long = highest(high, n) - atr(n)*f
short= lowest(low, n) + atr(n)*f
plot(long, color= color.red)
plot(short, color= color.green)

//moving averages
period= input(title= "moving averages period", defval= 50)
period2= input(title= "moving averages period2", defval= 20)
type= input(title= "moving averages type", options= ["sma", "ema"], defval= "ema")

//moving average function
mo(p, t) =>
    if t == "sma"
        sma(close[barstate.islast ? 1: 0], p)
    else  if t== "ema"
        ema(close[barstate.islast ? 1: 0], p)

m= mo(period, type)
m2= mo(period2, type)

trend= m2 > m 

plot(m, color = color.maroon, linewidth = 3)
plot(m2, linewidth= 3)


//BOLLINGER BANDS ENTRIES
bb1_period= input(title= "Bollinger bands 1 period", defval=40, minval=1)
bb1_source=input(title="Bollinger band 1 source", defval=close)
bb1_multi=input(title="Bollinger Bands 1 factor", defval=2, minval=1, step=0.1)
show_bb1= input(title="Show Bollinger bands 1", defval=false)
//BOLLINGER BANDS
_bb(src, lenght, multi)=>
    float moving_avg= sma(src[barstate.islast? 1: 0], lenght)
    float deviation= stdev(src[barstate.islast? 1: 0], lenght)
    float lowerband = moving_avg - deviation*multi
    float upperband = moving_avg + deviation*multi
    
    [moving_avg, lowerband, upperband]
    
[bb1, lowerband1, upperband1]= _bb(bb1_source,  bb1_period, bb1_multi)

//FIRST BAND    
plot(show_bb1? bb1 : na, title="BB1 Moving average", linewidth= 3, color= color.fuchsia)
plot(show_bb1? upperband1 : na, title="BB1 Upper Band", linewidth= 3, color= color.green)
plot(show_bb1? lowerband1 : na, title="BB1 Lower Band", linewidth= 3, color= color.red)

//BB's Width threshold 
thresh= input(title= "widen %", defval= 9, minval = 0, step = 1, maxval= 100)

widht= (upperband1 - lowerband1)/bb1
roc= change(widht)/widht[1]*100
cross=crossover(roc, thresh)

// entry
//long
elong= input(true, title= "enable long")
longcondition= m2 > m and cross and elong

//short
eshort= input(true, title= "enable short")
shortcondition= m2 < m and cross and eshort


plotshape(longcondition? true: false , location= location.belowbar, style= shape.labelup, size= size.small, color= color.green, text= "Buy", textcolor= color.white)
plotshape(shortcondition? true: false , location= location.abovebar, style= shape.labeldown, size= size.small, color= color.red, text= "Sell", textcolor= color.white)

out= crossunder(close, long)
outt= crossover(close, short)

strategy.entry("long", strategy.long, when = longcondition)
strategy.close("long", when = out)

strategy.entry("short", strategy.short, when = shortcondition)
strategy.close("short", when = outt)

Mehr