Strategie zur Verfolgung von Trendüberschreitungen mit doppelter MA

Schriftsteller:ChaoZhang, Datum: 2023-12-21 16:10:22
Tags:

img

Übersicht

Diese Strategie verwendet die typische Trendverfolgungsmethode des doppelten gleitenden Durchschnitts-Crossovers, kombiniert mit Risikomanagementmechanismen wie Stop-Loss, Take-Profit und Trailing-Stop-Loss, um große Gewinne aus den Trendmärkten zu erzielen.

Strategie Logik

  1. Die N-Tage-EMA wird als kurzfristige Schnelllinie berechnet.
  2. Berechnen Sie die M-Tage-EMA als langsame Linie für die langfristige Entwicklung;
  3. Lang gehen, wenn die schnelle Linie durch die langsame Linie nach oben bricht, und kurz gehen, wenn sie nach unten bricht;
  4. Ausfahrtssignal: Rückwärtsübergang (z. B. Ausfahrtslänge bei langem Übergang).
  5. Verwenden Sie Stop Loss, Take Profit, Trailing Stop Loss, um Risiken zu managen.

Analyse der Vorteile

  1. Durch die Einführung von doppelten EMA-Linien können die Umkehrpunkte der Kursentwicklung besser ermittelt und die Trendbewegungen erfasst werden.
  2. Die Kombination von Stop-Loss, Take-Profit und Trailing-Stop trägt dazu bei, Einzelhandelsverluste zu begrenzen, Gewinne zu erzielen und den Drawdown zu reduzieren.
  3. Es gibt viele anpassbare Parameter, die für verschiedene Produkte und Marktumgebungen angepasst und optimiert werden können.
  4. Die Strategielogik ist einfach und klar, leicht zu verstehen und zu ändern.
  5. Unterstützung langfristiger und kurzer Operationen, die sich an unterschiedliche Marktbedingungen anpassen lassen.

Risikoanalyse

  1. Dual-MA-Strategien sind sehr empfindlich gegenüber falschen Ausbrüchen und neigen dazu, gefangen zu werden.
  2. Eine unsachgemäße Einstellung der Parameter kann zu häufigem Handel, zu erhöhten Handelskosten und zu Schlupfverlusten führen.
  3. Die Strategie selbst kann keine Trendumkehrpunkte bestimmen, sie muss mit anderen Indikatoren kombiniert werden.
  4. Es ist leicht, Handelssignale in verschiedenen Märkten zu generieren, aber die tatsächliche Rentabilität ist in der Regel gering.
  5. Die Parameter müssen für verschiedene Produkte und Marktumgebungen optimiert werden.

Die Risiken können verringert werden, indem

  1. Filtern falscher Signale mit anderen Indikatoren.
  2. Optimierung der Parameter zur Verringerung der Handelsfrequenz.
  3. Hinzufügen von Trendbewertungsindikatoren zur Vermeidung von Marktgeschäften mit Bandbreite.
  4. Anpassung der Positionsgröße an die geringeren Einzelhandelsrisiken.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Schnelle und langsame Zulassungszeiten für verschiedene Produkte und Märkte optimieren.
  2. Hinzufügen anderer Indikatoren, um Trends zu bestimmen und falsche Signale zu filtern, z.B. MACD, KDJ usw.
  3. Erwägen Sie die Ersetzung der EMA durch eine SMA oder WMA.
  4. Dynamische Anpassung des Stoppverlustes auf Basis von ATR.
  5. Flexible Anpassung der einzelnen Positionsgrößen anhand der Positionsgrößenmethode.
  6. Parameter-Selbstanpassungsoptimierung auf der Grundlage von Korrelations- und Volatilitätsmetriken.

Zusammenfassung

Zusammenfassend ist dies eine typische doppelte EMA-Crossover-Trend-Tracking-Strategie. Sie hat den Vorteil, Trendbewegungen zu erfassen, die mit Risikomanagementmechanismen wie Stop-Loss, Take-Profit und Trailing-Stop-Loss integriert sind. Sie hat aber auch einige typische Schwächen, wie hohe Empfindlichkeit gegenüber Lärm und Bereichsmärkten, die anfällig für Gefangenschaft sind. Weitere Verbesserungen können durch die Einführung zusätzlicher Indikatoren, Parameteroptimierung, dynamische Anpassungen und Portfoliobereitschaft zur Verbesserung der Strategie erzielt werden. Insgesamt kann diese Strategie mit einer ordnungsgemäßen Parameter-Ausrichtung und einer guten Eignung für Produkt- und Marktbedingungen anständige Ergebnisse erzielen.


/*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)


Mehr