Quantitative Handelsstrategie basierend auf doppeltem EMA-Crossover


Erstellungsdatum: 2023-11-21 11:41:40 zuletzt geändert: 2023-11-21 11:41:40
Kopie: 0 Klicks: 344
1
konzentrieren Sie sich auf
1166
Anhänger

Quantitative Handelsstrategie basierend auf doppeltem EMA-Crossover

Überblick

Die Strategie beurteilt die Markttrends durch die Berechnung der Kreuzung der EMA-Mittellinien zweier unterschiedlicher Perioden und erzeugt entsprechend ein Handelssignal. Wenn der Markt in einem Aufwärtstrend ist, wird die Strategie mehr Positionen aufnehmen, wenn der Markt in einem Aufwärtstrend ist. Wenn der Markt in einem Abwärtstrend ist, tritt die Strategie aus.

Strategieprinzip

Die Strategie verwendet hauptsächlich die Gold- und Forks-Theorie der doppelten EMA-Gewinnlinien. Die doppelte EMA-Gewinnlinie ist in eine Long- und eine Short-EMA unterteilt. Die Short-EMA-Parameter sind auf 10 Tage und die Long-EMA-Parameter auf 21 Tage eingestellt.

Wenn die kurze EMA die lange EMA durchbricht, erzeugt sie ein Kaufsignal; wenn die kurze EMA die lange EMA unter der kurzen EMA durchbricht, erzeugt sie ein Verkaufsignal. Die Strategie setzt gleichzeitig eine Wachstumsmarge ein, die nur dann erhöht wird, wenn die Wachstumsrate die Marge überschreitet, und nur dann, wenn der Rückgang die Marge überschreitet.

Konkret ist die Kaufbedingung der kurze EMA höher als die lange EMA, und die Aktienkurswachstumsrate über dem festgelegten positiven Schwellenwert; die Off-Positionbedingung der kurze EMA niedriger als die lange EMA, und die Aktienkurswachstumsrate niedriger als der festgelegten negativen Schwellenwert.

Strategische Vorteile

  • Die Goldfork-Death-Fork-Theorie mit doppelter EMA-Einheitlichkeit ist relativ einfach und zuverlässig
  • Erhöhung der Wachstumsdämpfung und Vermeidung von Fehltransaktionen bei schwachem Wachstum
  • Maximaler Verlust kann streng kontrolliert werden.
  • Flexible Anpassung der EMA-Durchschnittsparameter für unterschiedliche Perioden

Risikoanalyse

  • Die EMA ist nachlässig und könnte einen Kurswechsel verpassen.
  • Durchschnittliche Kreuzungen haben eine gewisse Verzögerung, die dazu führen kann, dass die beste Zeit für die Eröffnung der Position verloren geht.
  • Optimierung von Parametern, die auf Abhängigkeit beruhen und bei falscher Parameter-Einstellung zu häufigen Transaktionen oder mangelhaften Signalen führen können

Optimierungsrichtung

  • Optimierung in Verbindung mit anderen Indikatoren wie MACD, KD usw. zur Verbesserung der Signalgenauigkeit
  • Erhöhung der Stop-Loss-Strategien, wie zum Beispiel die Verfolgung von Stop-Losses, um Gewinnmaximierung zu gewährleisten
  • Optimierung der EMA-Zyklusparameter und Einstellung der optimalen Parameter für verschiedene Sorten
  • Dynamische Parameteranpassung und -optimierung in Kombination mit Echtzeitdaten und Machine-Learning-Methoden

Zusammenfassen

Diese Strategie ist insgesamt relativ einfach und zuverlässig, um die Preisentwicklung durch die doppelte EMA-Kreuzung zu beurteilen und die Wachstumstiefe zu setzen, um ein Handelssignal zu senden. Im Vergleich zu einer einzelnen Durchschnittslinie-Kreuzung kann ein teilweises Falschsignal gefiltert werden. Die EMA-Gleichlinie selbst hat jedoch Probleme mit der Verzögerung, die in Kombination mit anderen Indikatoren oder dynamischen Komponenten die Effektivität der Strategie weiter verbessern können.

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

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)