Strategie für die Bewegung des gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2023-09-19 21:33:48
Tags:

Übersicht

Diese Strategie erzeugt Kaufsignale, wenn die schnelle EMA-Kauflinie über die langsame SMA-Kauflinie geht, und verwendet den ATR-dynamischen Trailing-Stop zur Risikokontrolle.

Strategie Logik

  1. Berechnen Sie schnelle EMA und langsame SMA Kauflinien, erzeugen Sie ein Kaufsignal, wenn die schnelle Linie über die langsame Linie mit einer bestimmten Kaufstärke kreuzt.

  2. Berechnen Sie schnelle EMA- und langsame SMA-Verkaufslinien, generieren Sie ein Verkaufssignal, wenn die schnelle Linie unter die langsame Linie geht.

  3. Bei der Risikobewältigung wird der N-Tage-ATR-Durchschnitt multipliziert mit dem Koeffizienten als dynamischer Rückhalt verwendet.

  4. Beginn der Strategie in der Backtest-Periode für die Kauf- und Verkaufsausführung.

  5. Optimieren Sie die Parameter für jeden Bestand, um die besten Werte zu finden.

Die Strategie kombiniert die Vorteile von MA-Kreuzung für Signale und ATR-Trailing-Stop für die Risikokontrolle.

Analyse der Vorteile

  1. Schnelle EMA- und langsame SMA-Crossovers erkennen Trends und erzeugen Signale.

  2. ATR-Stoppanpassungen basierend auf der Marktvolatilität, um Risiken wirksam zu kontrollieren.

  3. Die Optimierung für jede Aktie verbessert die Rentabilität.

  4. Einfache Logik und Regeln, einfach umzusetzen und zu überprüfen.

  5. Vollständige Backtest-Funktionalität zur Validierung der Strategie.

  6. Sucht nach einer stetigen Überleistung gegenüber Buy and Hold.

Risikoanalyse

  1. Optimierte Parameter funktionieren möglicherweise nicht für die Zukunft, es kann eine regelmäßige Re-Optimierung erforderlich sein.

  2. EMA- und SMA-Kreuzungen können falsche oder verzögerte Signale erzeugen.

  3. ATR-Stopp kann zu aggressiv sein, kann den Stoppverlustbereich lockern.

  4. Eine geringe Handelsfrequenz kann gute Chancen verpassen.

  5. Die Auswirkungen der Handelskosten müssen berücksichtigt werden.

Optimierungsrichtlinien

  1. Versuchen Sie weiterhin verschiedene Parameterkombinationen für optimale Werte.

  2. Versuchen Sie, andere Indikatoren für die Signalfilterung einzuführen.

  3. Optimierung der ATR-Periode, um die Stoppverlustempfindlichkeit auszugleichen.

  4. Bewertung der Wirkung des entspannten Stop-Loss-Bereichs.

  5. Betrachten Sie maschinelles Lernen für die automatisierte Optimierung von Parametern.

  6. Studieneffekt der zunehmenden Handelsfrequenz.

Zusammenfassung

Diese gleitende Durchschnitts-Trailing-Stop-Strategie kombiniert die Stärken von MA-Crossovers für Signale und ATR-Stops für die Risikokontrolle. Die Parameteroptimierung passt sie an die Eigenschaften jeder Aktie an. Obwohl optimierte Parameter keine Garantie haben, ist die allgemeine Logik einfach und praktisch, um Buy und Hold zu übertreffen. Weitere Verbesserungen und Verifizierungen sind lohnenswert, da die Strategie einen guten inspirierenden Wert hat.


/*backtest
start: 2023-01-01 00:00:00
end: 2023-09-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//created by XPloRR 04-03-2018

strategy("XPloRR MA-Trailing-Stop Strategy",overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity,default_qty_value=100)

testStartYear = input(2005, "Start Year")
testStartMonth = input(1, "Start Month")
testStartDay = input(1, "Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2050, "Stop Year")
testStopMonth = input(12, "Stop Month")
testStopDay = input(31, "Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriodBackground = input(title="Background", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

ema1Period = input(12, "Fast EMA Buy")
sma1Period = input(54, "Slow SMA Buy")
strength1 = input(52, "Minimum Buy Strength")

ema2Period = input(18, "Fast EMA Sell")
sma2Period = input(55, "Slow SMA Sell")
strength2 = input(100, "Minimum Sell Strength")

delta = input(8, "Trailing Stop (#ATR)")

testPeriod() => true

ema1val=ema(close,ema1Period)
sma1val=sma(close,sma1Period)
ema1strength=10000*(ema1val-ema1val[1])/ema1val[1]

ema2val=ema(close,ema2Period)
sma2val=sma(close,sma2Period)
ema2strength=10000*(ema2val-ema2val[1])/ema2val[1]

plot(ema1val,color=blue,linewidth=1)
plot(sma1val,color=orange,linewidth=1)
plot(ema2val,color=navy,linewidth=1)
plot(sma2val,color=red,linewidth=1)

long=crossover(ema1val,sma1val) and (ema1strength > strength1) 
short=crossunder(ema2val,sma2val) and (ema2strength < -strength2)

stopval=ema(close,6)
atr=sma((high-low),15)

inlong=0
buy=0
stop=0
if testPeriod()
    if (inlong[1])
        inlong:=inlong[1]
        buy:=close
        stop:=iff((stopval>(stop[1]+delta*atr)),stopval-delta*atr,stop[1])
    if (long) and (not inlong[1])
        strategy.entry("buy",strategy.long)
        inlong:=close
        buy:=close
        stop:=stopval-delta*atr
plot(buy,color=iff(close<inlong,red,lime),style=columns,transp=90,linewidth=1)
plot(stop,color=iff((short or (stopval<stop)) and (close<inlong),red,lime),style=columns,transp=60,linewidth=1)
if testPeriod()
    if (short or (stopval<stop)) and (inlong[1])
        strategy.close("buy")
        inlong:=0
        stop:=0
        buy:=0



Mehr