Diese Strategie erzeugt LANGE oder SHORT Eintrittssignale, wenn sich der schnelle 30-tägige einfache gleitende Durchschnitt und der langsame 33-tägige einfache gleitende Durchschnitt des Aktienkurses kreuzen.
Der Kern dieser Strategie besteht darin, den schnellen 30-Tage-MA und den langsamen 33-Tage-MA zu berechnen. Die schnelle Linie kann schneller auf Preisschwankungen reagieren, während die langsame Linie einen besseren Filtereffekt hat. Wenn die schnelle Linie durch die langsame Linie nach oben bricht, wird ein Kaufsignal generiert. Dies zeigt an, dass der Preis steigen beginnt und die schnelle Linie reagiert hat, während die langsame Linie noch zurückbleibt. Wenn die schnelle Linie durch die langsame Linie nach unten bricht, wird ein Verkaufssignal generiert. Dies zeigt an, dass der Preis sinken beginnt, während die schnelle Linie reagiert hat, aber die langsame Linie noch zurückbleibt.
Durch ein so schnelles und langsames MA-Crossover-Design kann es Handelssignale erzeugen, wenn ein neuer Trend beginnt, und bei entgegengesetzten Signalen ausgeht, um mittelfristige bis langfristige Preistrends effektiv zu erfassen.
Die Strategie weist folgende Vorteile auf:
Diese Strategie birgt auch einige Risiken:
Methoden wie Parameteroptimierung, Einstellung des Stop-Loss-Niveaus, Handel nur, wenn der Trend klar ist usw. können verwendet werden, um diese Risiken zu kontrollieren und zu reduzieren.
Die Strategie kann in folgenden Aspekten optimiert werden:
Durch Tests und Optimierungen können die Strategieregeln kontinuierlich verbessert werden, um zuverlässigere Handelssignale in verschiedenen Marktumgebungen zu erhalten.
Zusammenfassend ist diese doppelte MA-Crossover-Breakout-Strategie ziemlich einfach und praktisch. Durch die Kombination von schnellen MA und langsamen MA kann sie den Beginn mittelfristiger bis langfristiger Trends effektiv identifizieren und relativ zuverlässige Handelssignale generieren. Außerdem ist ihre Stop-Loss-Regel einfach zu implementieren. Mit weiterer Optimierung kann diese Strategie zu einem lohnenden langfristigen quantitativen System werden.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //future strategy //strategy(title = "es1!_1minute_hull", default_qty_type = strategy.fixed, initial_capital=250000, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2, calc_on_order_fills=false, calc_on_every_tick=false,pyramiding=0) //strategy.risk.max_position_size(2) //stock strategy strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital=1000000, overlay = false)//, calc_on_order_fills=true, calc_on_every_tick=true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true,initial_capital=250000, default_qty_type = strategy.percent_of_equity) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.005,default_qty_value=10000) //strategy.risk.allow_entry_in(strategy.direction.long) // There will be no short entries, only exits from long. testStartYear = 2010 testStartMonth = 1 testStartDay = 1 testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = 2039 testEndMonth = 1 testEndDay = 1 testPeriodEnd = timestamp(testEndYear,testEndMonth,testEndDay,0,0) testPeriod() => //true time >= testPeriodStart and time <= testPeriodEnd ? true : false fast_length = 30 slow_length = 33 ema1 = 0.0 ema2 = 0.0 volumeSum1 = sum(volume, fast_length) volumeSum2 = sum(volume, slow_length) //ema1 := (((volumeSum1 - volume) * nz(ema1[1]) + volume * close) / volumeSum1) ema1 := ema(close,fast_length) //ema2 := (((volumeSum2 - volume) * nz(ema2[1]) + volume * close) / volumeSum2) ema2 := ema(close,slow_length) plot(ema1,color=#00ff00, linewidth=3) plot(ema2, color=#ffff00, linewidth=3) go_long = crossover(ema1,ema2) go_short = crossunder(ema1,ema2) if testPeriod() strategy.entry("long_ride", strategy.long, when=go_long) strategy.entry("short_ride", strategy.short,when=go_short) strategy.close("long_ride",when=go_short) strategy.close("short_ride",when=go_long)