Doppelte MA Crossover-Trendfolgestrategie


Erstellungsdatum: 2023-12-21 16:10:22 zuletzt geändert: 2023-12-21 16:10:22
Kopie: 1 Klicks: 611
1
konzentrieren Sie sich auf
1623
Anhänger

Doppelte MA Crossover-Trendfolgestrategie

Überblick

Diese Strategie verwendet die typische Trend-Tracking-Methode der doppelten Gleichgewichtskreuzung und kombiniert Risikomanagementmechanismen wie Stop-Loss, Stop-Stop und Tracking-Stop-Loss mit dem Ziel, die Vorteile von Trendbewegungen zu erfassen.

Strategieprinzip

  1. Berechnen Sie den mittleren EMA für eine schnelle Periode von n Tagen als kurzfristigen Mittelwert.
  2. Berechnen Sie den langfristigen Mittelwert der EMA für m Tage im langsamen Tempo.
  3. Wenn die kurzfristige Durchschnittslinie von unten nach oben durchbricht, machen Sie mehr; wenn sie von oben nach unten durchbricht, machen Sie weniger;
  4. Gleichlagebedingungen: Rückschlag (wenn mehrere Durchbrüche gemacht werden, ist der Rückschlag gleich).
  5. Risikomanagement mit Stop Loss, Stop Stop und Tracking Stop Loss

Analyse der Stärken

  1. Die Verwendung einer doppelten EMA-Grenze ermöglicht eine bessere Beurteilung des Preistrend-Wendepunkts und die Erfassung der Trends.
  2. In Kombination mit Stop-Loss, Stop-Stops und Tracking-Stops können Sie einzelne Verluste effektiv kontrollieren, Gewinne sperren und Rücknahmen reduzieren.
  3. Die Parameter sind individuell anpassbar und optimierbar für verschiedene Sorten und Umgebungen.
  4. Die Strategie ist klar und einfach zu verstehen und zu ändern.
  5. Es wird unterstützt, mehrere Aktivierungen durchzuführen, die sich an verschiedene Arten von Situationen anpassen können.

Risikoanalyse

  1. Die Doppel-Einheit-Strategie ist sehr empfindlich gegen falsche Durchbrüche und leicht zu erwischen.
  2. Unkorrekt eingestellte Parameter können zu häufigen Transaktionen, erhöhten Transaktionskosten und Verlusten von Gleitpunkten führen.
  3. Die Strategie allein kann keine Trendwendepunkte bestimmen, sondern muss mit anderen Indikatoren kombiniert werden.
  4. In einem konjunkturellen Umfeld ist es leicht, Handelssignale zu erzeugen, aber die tatsächliche Profitabilität ist schlechter.
  5. Die Parameter müssen für verschiedene Sorten und Umgebungen optimiert werden.

Das Risiko kann durch folgende Maßnahmen verringert werden:

  1. In Kombination mit anderen Indikatoren wird die Filterung von False Breaks durchgeführt.
  2. Optimierung der Parameter-Einstellungen, um die Häufigkeit der Transaktionen zu verringern.
  3. Es ist wichtig, die Trend-Indikatoren zu erhöhen, um einen wackligen Handel zu vermeiden.
  4. Umstellung des Positionsmanagements zur Verringerung des Einzelspielrisikos.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung der Zyklusparameter für schnelle und langsame Durchschnittslinien, um sie an verschiedene Sorten und Umgebungen anzupassen.
  2. Hinzufügen von anderen Indikatoren, um Trends zu beurteilen und falsche Durchbruchsignale zu filtern. Typisch kann MACD, KDJ usw. hinzugefügt werden.
  3. Es kann in Erwägung gezogen werden, die EMA in einen SMA oder einen gewichteten Moving Average (WMA) umzuwandeln.
  4. Stelldistanz basierend auf ATR-Dynamik.
  5. Aufgrund der Positionsverwaltung können die einzelnen Positionen flexibel angepasst werden.
  6. Optimierung der Parameter basierend auf einer Kombination aus Relevanz- und Volatilitätsindikatoren.

Zusammenfassen

Diese Strategie ist insgesamt eine typische Trendverfolgung mit zwei EMA-Gleichlinien. Sie hat die Vorteile, Trends zu erfassen und Risikomanagement-Methoden wie Stop Loss, Stop Stop und Stop Loss zu verfolgen. Allerdings gibt es einige typische Probleme, wie eine hohe Sensitivität für Lärm- und Schokehandel, die leicht eingeschlossen werden können. Die Wirksamkeit der Strategie kann durch die Einführung anderer Hilfsindikatoren, Parameteroptimierung, Dynamik-Anpassung und Kombinationsnutzung weiter verbessert werden.

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

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)