Diese Strategie erzeugt Kaufsignale, wenn die schnelle EMA-Kauflinie über die langsame SMA-Kauflinie geht, und verwendet den ATR-dynamischen Trailing-Stop zur Risikokontrolle.
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.
Berechnen Sie schnelle EMA- und langsame SMA-Verkaufslinien, generieren Sie ein Verkaufssignal, wenn die schnelle Linie unter die langsame Linie geht.
Bei der Risikobewältigung wird der N-Tage-ATR-Durchschnitt multipliziert mit dem Koeffizienten als dynamischer Rückhalt verwendet.
Beginn der Strategie in der Backtest-Periode für die Kauf- und Verkaufsausführung.
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.
Schnelle EMA- und langsame SMA-Crossovers erkennen Trends und erzeugen Signale.
ATR-Stoppanpassungen basierend auf der Marktvolatilität, um Risiken wirksam zu kontrollieren.
Die Optimierung für jede Aktie verbessert die Rentabilität.
Einfache Logik und Regeln, einfach umzusetzen und zu überprüfen.
Vollständige Backtest-Funktionalität zur Validierung der Strategie.
Sucht nach einer stetigen Überleistung gegenüber Buy and Hold.
Optimierte Parameter funktionieren möglicherweise nicht für die Zukunft, es kann eine regelmäßige Re-Optimierung erforderlich sein.
EMA- und SMA-Kreuzungen können falsche oder verzögerte Signale erzeugen.
ATR-Stopp kann zu aggressiv sein, kann den Stoppverlustbereich lockern.
Eine geringe Handelsfrequenz kann gute Chancen verpassen.
Die Auswirkungen der Handelskosten müssen berücksichtigt werden.
Versuchen Sie weiterhin verschiedene Parameterkombinationen für optimale Werte.
Versuchen Sie, andere Indikatoren für die Signalfilterung einzuführen.
Optimierung der ATR-Periode, um die Stoppverlustempfindlichkeit auszugleichen.
Bewertung der Wirkung des entspannten Stop-Loss-Bereichs.
Betrachten Sie maschinelles Lernen für die automatisierte Optimierung von Parametern.
Studieneffekt der zunehmenden Handelsfrequenz.
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