Double EMA Golden Cross und Death Cross Tracking Strategie


Erstellungsdatum: 2023-11-13 17:35:14 zuletzt geändert: 2023-11-13 17:35:14
Kopie: 0 Klicks: 681
1
konzentrieren Sie sich auf
1617
Anhänger

Double EMA Golden Cross und Death Cross Tracking Strategie

Überblick

Diese Strategie ist eine Trendverfolgungsstrategie, die durch die Berechnung von Fastline-EMA und Slowline-EMA und die Vergleiche der Größenverhältnisse zwischen den beiden erzielt wird, um ein Gold- und Dead-Fork-Handelssignal für zwei EMAs zu erzielen. Eine einfache Trendverfolgungsstrategie besteht darin, ein Kaufsignal zu erzeugen, wenn die Schnelle die Langleine durchquert, und ein Verkaufssignal zu erzeugen, wenn die Schnelle die Langleine durchquert.

Strategieprinzip

Die Kernlogik der Strategie besteht hauptsächlich aus folgenden Teilen:

  1. Berechnen Sie die EMA für FastInput und EMA für SlowInput: Die EMA für FastInput mit einer Länge von fastInput und EMA für SlowInput mit einer Länge von slowInput werden mit der Funktion ta.ema () berechnet.

  2. Setzen Sie den Zeitbereich für die Rückmeldung: Filtern Sie die Rückmeldung durch die Parameter useDateFilter und setzen Sie die Start- und Endzeit der Rückmeldung auf backtestStartDate und backtestEndDate.

  3. Generieren Sie ein Handelssignal: Vergleichen Sie die Größenverhältnisse zwischen dem schnellen EMA und dem langsamen EMA über die Funktionen ta.crossover () und ta.crossunder (), um ein Kaufsignal zu erzeugen, wenn der Schnellen die langsame Linie durchquert, und ein Verkaufsignal, wenn der Schnellen die langsame Linie durchquert.

  4. Auftrag außerhalb des Zeitrahmens: Auftrag außerhalb des Zeitrahmens wird storniert und alle Positionen werden ausgeglichen.

  5. Entwerfen von Moving Averages: Entwerfen Sie die Moving Averages der Fastline EMA und der Slowline EMA auf der Grafik.

Strategische Vorteile

Dies ist eine sehr einfache Trend-Tracking-Strategie mit den folgenden Vorteilen:

  1. Die Logik der Strategie ist einfach, leicht zu verstehen und umzusetzen.

  2. Die EMA hat die Preisdaten glatter gemacht, um den Handel mit Geräuschen zu reduzieren.

  3. Anpassbare EMA-Zyklusparameter für unterschiedliche Marktbedingungen.

  4. Flexible Einstellung der Rückmeldungszeiträume, um Tests für bestimmte Zeiträume durchzuführen

  5. Optimierbare Ein- und Ausstiegsbedingungen in Kombination mit anderen Indikatoren

Risikoanalyse

Die Strategie birgt auch einige Risiken, die beachtet werden müssen:

  1. Die Doppel-EMA-Strategie ist unflexibel und kann nicht flexibel auf Marktveränderungen reagieren.

  2. Es besteht die Gefahr von häufigen und wiederholten Transaktionen.

  3. Die falsche Einstellung der EMA-Parameter kann zu einem Fehlsignal führen.

  4. Unzumutbare Rücklaufzeiten können zu einer Überübung führen.

  5. Es besteht die Gefahr eines unvermeidlichen Rückzugs und Verlustes.

Risiken können durch Parameteroptimierung, geeignete Filterschwankungen und Stop-Loss-Einstellungen kontrolliert werden.

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung der EMA-Zyklusparameter und Auswahl der optimalen Parameterkombination.

  2. Das Unternehmen hat sich dazu entschieden, die Daten zu filtern, um unnötige Transaktionen zu vermeiden.

  3. Erhöhung der Stop-Loss-Strategie und Kontrolle von Einzelschäden.

  4. Die Anwendung von Trend- und Volatilitätsfiltern reduziert die Handelsfrequenz.

  5. Verschiedene Sorten von Verträgen werden getestet, um die beste Strategie für die Opfer zu finden.

  6. Kostenkontrolle mit Gleitpunkten, Gebühren usw. machen die Rückmeldung realistischer.

Zusammenfassen

Diese Strategie ist insgesamt eine sehr einfache Doppel-EMA Gold-Fork-Dead-Fork-Strategie, die logisch klar und verständlich ist und Handelssignale durch schnelle EMA-Vergleiche erzeugt. Die Strategie hat die Vorteile, dass sie einfach zu realisieren ist, aber es gibt auch einige Probleme wie häufige Geschäfte, die zu einer Überoptimierung führen können. Der nächste Schritt kann verbessert werden, um die Strategie robuster und praktischer zu machen.

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


//@version=5
strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity)

fastInput = input( 10, "Fast EMA")
slowInput = input( 21, "Slow EMA")

// Calculate two moving averages with different lengths.
float fastMA = ta.ema(close, fastInput)
float slowMA = ta.ema(close, slowInput)


// STEP 1. Create inputs that configure the backtest's date range
useDateFilter = input.bool(true, title="Filter Date Range of Backtest",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2018"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " +  
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")
backtestEndDate = input(timestamp("7 Sep 2023"),
     title="End Date", group="Backtest Time Period",
     tooltip="This end date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

// STEP 2. See if current bar falls inside the date range
inTradeWindow = true

// STEP 3. Include the date filter with the entry order conditions

// Enter a long position when `fastMA` crosses over `slowMA`.
if inTradeWindow and ta.crossover(fastMA, slowMA)
    strategy.entry("buy", strategy.long)

// Enter a short position when `fastMA` crosses under `slowMA`.
if inTradeWindow and ta.crossunder(fastMA, slowMA)
    strategy.close_all(comment="sell")

// STEP 4. With the backtest date range over, exit all open
// trades and cancel all unfilled pending orders
if not inTradeWindow and inTradeWindow[1]
    strategy.cancel_all()
    strategy.close_all(comment="Date Range Exit")

// Plot the moving averages.
plot(fastMA, "Fast MA", color.aqua)
plot(slowMA, "Slow MA", color.orange)