Diese Strategie erzeugt Handelssignale, die auf dem Crossover und Crossunder von schnellen und langsamen EMA-Linien basieren, die zu den Trendfolgestrategien gehören.
Die Kernlogik dieser Strategie umfaßt hauptsächlich folgende Teile:
Berechnen Sie schnelle und langsame EMAs: Verwenden Sie ta.ema() zur Berechnung der schnellen EMA der Länge fastInput und der langsamen EMA der Länge slowInput.
Set backtest Zeitbereich: Verwenden Sie useDateFilter, um festzulegen, ob backtest Zeitbereich gefiltert werden soll, und verwenden Sie backtestStartDate und backtestEndDate, um Start- und Endzeiten festzulegen.
Erstellen von Handelssignalen: Verwenden Sie ta.crossover() und ta.crossunder() um schnelle und langsame EMAs zu vergleichen, indem Sie Kaufsignale erzeugen, wenn die schnelle EMA über die langsame EMA geht, und Verkaufssignale erzeugen, wenn die schnelle EMA unter die langsame EMA geht.
Handling von Aufträgen außerhalb des Zeitrahmens: Stornieren Sie unerfüllte Aufträge außerhalb des Zeitrahmens des Backtests und platzieren Sie alle Positionen.
EMA-Linien zeichnen: Schnelle und langsame EMA-Linien auf dem Diagramm zeichnen.
Dies ist eine sehr einfache Trendstrategie mit folgenden Vorteilen:
Einfache Logik, leicht zu verstehen und umzusetzen.
Die EMA glättet die Preisdaten und reduziert den Lärm des Handels.
Anpassungsfähige EMA-Perioden, die an unterschiedliche Marktumgebungen angepasst werden können.
Flexibler Backtest-Zeitrahmen für bestimmte Zeiträume.
Optimierbare Ein- und Ausstiegsbedingungen können mit anderen Indikatoren kombiniert werden.
Diese Strategie birgt auch einige Risiken:
Die Doppel-EMA-Strategie ist unkonventionell und kann sich nicht flexibel an Marktveränderungen anpassen.
Risiko häufiger und wiederholter Geschäfte.
Unzulässige EMA-Parameter können zu falschen Handelssignalen führen.
Unzumutbarer Backtest-Zeitrahmen kann zu einer Überanpassung führen.
Risiko einer unvermeidlichen Abnahme und Verluste.
Risiken können durch Parameteroptimierung, Filterung von Schwankungen, Stop-Loss usw. verwaltet werden.
Diese Strategie kann in folgenden Aspekten optimiert werden:
Optimieren Sie EMA-Perioden, um die beste Parameterkombination zu finden.
Hinzufügen anderer Indikatoren zur Filterung unnötiger Transaktionen.
Hinzufügen von Stop Loss zur Kontrolle von Einzelverlusten.
Trend- und Volatilitätsfilter, um die Handelsfrequenz zu reduzieren.
Versuche verschiedene Produkte, um die beste Wahl zu finden.
Verwenden Sie Rutsch, Provision für realistischere Backtest.
Zusammenfassend ist dies eine sehr einfache Dual-EMA-Crossover-Strategie mit klarer Logik, indem schnelle und langsame EMAs verglichen werden. Der Vorteil ist die einfache Umsetzung, aber es gibt auch Probleme wie häufiger Handel, Überanpassung. Der nächste Schritt besteht darin, die Parameteroptimierung und das Risikomanagement für eine robustere Strategie zu verbessern.
/*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)