Strategie für eine dreifache EMA-Impulsentwicklung

Schriftsteller:ChaoZhang, Datum: 2023-09-27 17:19:26
Tags:

Übersicht

Diese Strategie ist modifiziert von SoftKill21s Amazing Scalper für Majors mit Risikomanagement, indem sie dreifache exponentielle gleitende Durchschnitte anstelle einfacher gleitender Durchschnitte verwendet, um die Verzögerung zu reduzieren.

Strategie Logik

Die Strategie verwendet drei EMAs mit unterschiedlichen Perioden: 25-Perioden-schnelle EMA, 50-Perioden-Standard-EMA und 100-Perioden-langsam EMA. Wenn eine schnelle EMA über die Standard-EMA und eine langsame EMA überschreitet, erzeugt sie ein Kaufsignal. Wenn eine schnelle EMA unter die Standard-EMA und eine langsame EMA überschreitet, erzeugt sie ein Verkaufssignal. Um die Verzögerung zu reduzieren, werden die EMAs mithilfe einer doppelten exponentiellen Glättungstechnik berechnet. Die Strategie überprüft auch, ob die Öffnungszeiten der Londoner oder New Yorker Sitzungen den Einstiegsbedingungen entsprechen. Darüber hinaus wird die Positionsgröße jedes Auftrags dynamisch bestimmt, indem ein fester Prozentsatz des Kontokapitals verwendet wird, um das Risiko zu kontrollieren.

Speziell berechnet die Strategie zunächst die drei EMA-Linien und prüft dann, ob eine schnelle EMA mit einer Standard-EMA und einer langsamen EMA ein goldenes Kreuz oder ein Todeskreuz bildet. Wenn die Bedingung auch mit den Open-Market-Zeiten in London oder New York übereinstimmt, werden Kauf- oder Verkaufssignale generiert. Bei der Bestimmung der Positionsgröße berechnet die Strategie einen festen Prozentsatz des Kontokapitals als Risikoposition und wandelt ihn dann in Vertragsgröße und Runde um, um die Position dynamisch für jede Bestellung anzupassen.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die dreifachen EMAs können die Preisdaten effektiv glätten und die Trendrichtung identifizieren. Die schnelle EMA ist empfindlich auf Preisänderungen, die Standard-EMA verfolgt stetig und die langsame EMA filtert Lärm. Zusammen können sie falsche Ausbrüche filtern und die Trendrichtung bestimmen.

  2. Die Verwendung einer doppelten exponentiellen Glättung reduziert die Verzögerung und macht die Signale empfindlicher.

  3. Die Einbeziehung großer Handelssessions verhindert irreführende Signale außerhalb der Stoßzeiten.

  4. Der Ansatz des Risikomanagements regelt die Positionsgröße anhand des Eigenkapitals des Kontos an und vermeidet damit übermäßige Verluste bei einzelnen Geschäften.

  5. Die Logik ist einfach und klar, leicht zu verstehen und umzusetzen, für Anfänger geeignet.

  6. Die Strategie kann für verschiedene Währungspaare und Zeitrahmen optimiert und angepasst werden.

Risikoanalyse

Die Strategie birgt auch einige potenzielle Risiken:

  1. EMAs können kurzfristige falsche Ausbrüche, die durch plötzliche Ereignisse verursacht werden, nicht effektiv filtern, was falsche Signale erzeugen kann.

  2. Eine festgelegte Positionsgröße kann sich nicht dynamisch an die Volatilität des Marktes anpassen, was zu über- oder untergroßen Positionen führt.

  3. Es werden nur zwei wichtige Sitzungen berücksichtigt, die in anderen Sitzungen Handelschancen verpassen können.

  4. Mangelnde Stop-Loss-Mechanismen führen zu einer Unfähigkeit, einseitige Verluste effektiv zu kontrollieren.

  5. EMA-Crossovers haben eine gewisse Verzögerung und können den besten Eintrittszeitpunkt verpassen.

  6. Die Ergebnisse können durch die Transaktionskosten beeinflusst werden.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Verschiedene EMA-Periodenparameter testen, um optimale Kombinationen zu finden. Adaptive EMAs können eingeführt werden, um Perioden dynamisch zu optimieren.

  2. Fügen Sie andere Filterindikatoren wie RSI, Bollinger Bands hinzu, um die Signalqualität zu verbessern.

  3. Einführung einer dynamischen Positionsgröße auf der Grundlage von Marktvolatilität und Rentabilität.

  4. Hinzufügen von Bewegung oder Zeit Stop-Verlust Verluste zu begrenzen. Feine Abstimmung Stop-Verlust Ebenen.

  5. Verschiedene Handelssitzungen testen, um die optimalen Zeiten zu finden.

  6. Optimieren Sie die Gewinn- und Stop-Loss-Level, um die Gewinngröße und die Gewinnrate auszugleichen.

  7. Versuchen Sie, die EMA-Berechnung wie eine linear gewichtete EMA zu ändern, um die Verzögerung zu reduzieren.

  8. Verwenden Sie maschinelles Lernen, um optimale Parameter zu finden.

  9. Modelltransaktionskosten und Anpassungssystem für einen maximalen Nettogewinn.

Durch die oben genannten Optimierungen kann die Rentabilität des Systems verbessert, die Abzüge kontrolliert und die Anwendbarkeit erweitert werden, um eine leistungsfähigere und robustere Handelsstrategie zu erhalten.

Zusammenfassung

Die allgemeine Logik dieser Strategie ist klar, wobei dreifache EMAs zur Identifizierung von Trends verwendet werden, mit wichtigen Sitzungen für die Ausführung kombiniert und die Positionsgröße basierend auf Kontoprozentsatz übernommen wird. Es gehört zu einem typischen Trendfolgensystem. Es gibt viel Raum für Optimierung durch Parameter-Tuning, Mechanismusverbesserungen, Technologieeinführung usw., um seine Anwendbarkeit auf mehr Märkten weiter auszubauen und die Robustheit zu verbessern. Als Lernmittel für Anfänger bietet es einen guten Ausgangspunkt. Mit Übung und Verbesserungen kann es sich in eine reife und zuverlässige quantitative Strategie verwandeln.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// original author SoftKill21
//@version=4
//@capam 

strategy(title="Triple EMA Scalper low lag strat", shorttitle="3EMA scalper", overlay=true)
strategy.initial_capital = 50000
len1 = input(25, minval=1, title="Length")
len2 = input(50, minval=1, title="Length")
len3 = input(100, minval=1, title="Length")

src = input(close, title="Source")
tmp1 = ema(src, len1)
tmp2 = ema(src, len2)
tmp3 = ema(src, len3)
fastemaOut = 2*tmp1 - ema(tmp1, len1)
standardemaOut = 2*tmp2 - ema(tmp2, len2)
slowemaOut = 2*tmp3 - ema(tmp3, len3)
//fastemaOut = sma(src, len1)
//standardemaOut = sma(src, len2)
//slowemaOut = sma(src, len3)

plot(fastemaOut, color=color.black, title="First EMA")
plot(standardemaOut, color=color.yellow, title="Second EMA")
plot(slowemaOut, color=color.blue, title="Third EMA")


timeinrange(res, sess) => time(res, sess) != 0


londopen = timeinrange(timeframe.period, "0300-1100") 
nyopen = timeinrange(timeframe.period, "0800-1600") 

longCondition = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and londopen //or nyopen)
shortCondition = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and londopen// or nyopen)

longCondition2 = crossover(fastemaOut,standardemaOut) and crossover(fastemaOut,slowemaOut) and nyopen
shortCondition2 = crossunder(fastemaOut,standardemaOut) and crossunder(fastemaOut,slowemaOut) and nyopen
tp = input(50,title="TP")
sl = input(100, title="SL")

tradeLondon =  input(title="Trade london session?", type=input.bool, defval=true)
tradeNewyork = input(title="Trade new york session?", type=input.bool, defval=true)

//MONEY MANAGEMENT--------------------------------------------------------------
balance = strategy.netprofit + strategy.initial_capital //current balance
floating = strategy.openprofit          //floating profit/loss
risk = input(1,type=input.float,title="Risk % of equity ")/100           //risk % per trade
temp01 = balance * risk     //Risk in USD
temp02 = temp01/sl        //Risk in lots
temp03 = temp02*100000      //Convert to contracts
size = temp03 - temp03%1000 //Normalize to 1000s (Trade size)
if(size < 1000)
    size := 1000        

if(tradeLondon==true)
    strategy.entry("long",1,when=longCondition)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

if(tradeNewyork==true)
    strategy.entry("long",1,when=longCondition2)
    strategy.exit("tp/sl","long",profit=tp,loss=sl)
    
    strategy.entry("short",0,when=shortCondition2)
    strategy.exit("tp/sl","short",profit=tp,loss=sl)

// strategy.risk.max_intraday_filled_orders(2) 

Mehr