Diese Strategie kombiniert den exponentiellen gleitenden Durchschnitt (EMA) und den gleitenden Durchschnittskonvergenzdivergenz (MACD) Indikatoren, um Handelssignale zu erzeugen, und setzt zur Kontrolle der Risiken einen Trailing Stop Loss ein. Die Strategie eignet sich für Trendmärkte und zielt darauf ab, mittelfristigen Trends bei langfristigen Beteiligungen zu folgen.
Wenn die schnelle EMA-Linie über die langsame EMA-Linie kreuzt und das MACD-Histogramm sich bärisch dreht, geht die Strategie lang. Wenn eine Long-Position besteht, wird eine nach unten verlaufende Stop-Loss-Linie gesetzt. Wenn der Preis um einen bestimmten Prozentsatz unter die Stop-Loss-Linie fällt, wird die Long-Position gestoppt.
Speziell verwendet die Strategie die 7-Tage-EMA und die 14-Tage-EMA, um die schnellen und langsamen EMAs zu konstruieren. Der MACD-Wert wird durch Subtrahieren der 26-Tage-EMA von der 12-Tage-EMA erhalten, und die Signallinie wird mit einer 9-Tage-EMA des MACD erhalten. Wenn die 7-Tage-EMA über die 14-Tage-EMA und der MACD-Wert über die Signallinie überschreitet, wird eine Long-Position eröffnet. Dann wird eine nach unten verlaufende Stop-Loss-Linie gesetzt.
Diese Strategie kombiniert die EMA- und MACD-Indikatoren, die falsche Ausbrüche effektiv filtern können. Die EMA beurteilt die Trendrichtung und die MACD bestimmt die Einstiegspunkte. Die Kombination der beiden kann die Handelsfrequenz reduzieren und gleichzeitig die Signalqualität verbessern.
Die EMA-Periodenparameter können angepasst werden, um den Trend-Trend anzupassen.
Die Strategie stützt sich hauptsächlich auf Indikatoren, wobei die Gefahr besteht, verwirrt zu werden. Während der Bandbreitkonsolidierungen können die EMA und der MACD übermäßige falsche Signale erzeugen, was zu Überhandel und Verlusten führt.
Eine angemessene Erweiterung der EMA-Perioden könnte falsche Signale reduzieren. Andere Indikatoren könnten auch kombiniert werden, um Signale wie Volumen- oder Volatilitätsindikatoren zu filtern. Darüber hinaus kann der Stop-Loss-Prozentsatz anhand der Marktbedingungen angepasst werden, um Stop-Loss- und Whipsaw-Risiken auszugleichen.
Verschiedene Kombinationen von EMA-Perioden könnten getestet werden, um geeignete Parameter zu finden.
Für die Signalfilterung und Qualitätsverbesserung könnten weitere Indikatoren wie RSI, KD hinzugefügt werden.
Die Stop-Loss-Prozentsätze können je nach Produkt mit dynamischen Trailing-Stops angepasst werden.
Breakout, Mustererkennung und andere Techniken können für individuellere Ein- und Ausstiegsregeln eingesetzt werden.
Maschinelles Lernen könnte helfen, die allgemeine Trendrichtung zu prognostizieren, um der EMA zu helfen.
Insgesamt ist die Strategie ziemlich robust und generiert sogar in Bärenmärkten anständige Renditen. Es gibt jedoch bestimmte Whipsaw-Risiken, die Parameter-Tuning und Signalfilterung erfordern. Weitere Optimierungen mit anderen technischen Indikatoren und maschinellem Lernen könnten sie erheblich verbessern. Zusammenfassend bietet die Strategie eine zuverlässige Vorlage für den quantitativen Handel.
/*backtest start: 2023-09-12 00:00:00 end: 2023-09-19 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Coinrule //@version=5 strategy('EMA and MACD with Trailing Stop Loss', overlay=true, initial_capital=1000, process_orders_on_close=true, default_qty_type=strategy.percent_of_equity, default_qty_value=30, commission_type=strategy.commission.percent, commission_value=0.1) showDate = input(defval=true, title='Show Date Range') timePeriod = time >= timestamp(syminfo.timezone, 2022, 1, 1, 0, 0) notInTrade = strategy.position_size <= 0 // EMAs fastEMA = ta.ema(close, 7) slowEMA = ta.ema(close, 14) plot(fastEMA, color = color.blue) plot(slowEMA, color = color.green) //buyCondition1 = ta.crossover(fastEMA, slowEMA) buyCondition1 = fastEMA > slowEMA // DMI and MACD inputs and calculations [macd, macd_signal, macd_histogram] = ta.macd(close, 12, 26, 9) buyCondition2 = ta.crossover(macd_signal, macd) // Configure trail stop level with input options longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=3) * 0.01 shortTrailPerc = input.float(title='Trail Short Loss (%)', minval=0.0, step=0.1, defval=1) * 0.01 // Determine trail stop loss prices longStopPrice = 0.0 shortStopPrice = 0.0 longStopPrice := if strategy.position_size > 0 stopValue = close * (1 - longTrailPerc) math.max(stopValue, longStopPrice[1]) else 0 shortStopPrice := if strategy.position_size < 0 stopValue = close * (1 + shortTrailPerc) math.min(stopValue, shortStopPrice[1]) else 999999 if (buyCondition1 and buyCondition2 and notInTrade and timePeriod) strategy.entry(id="Long", direction = strategy.long) strategy.exit(id="Exit", stop = longStopPrice, limit = shortStopPrice) //if (sellCondition1 and sellCondition2 and notInTrade and timePeriod) //strategy.close(id="Close", when = sellCondition1 or sellCondition2)