Doppelte gleitende Durchschnitts-Ausbruchsstrategie


Erstellungsdatum: 2023-12-11 15:21:58 zuletzt geändert: 2023-12-11 15:21:58
Kopie: 0 Klicks: 637
1
konzentrieren Sie sich auf
1621
Anhänger

Doppelte gleitende Durchschnitts-Ausbruchsstrategie

Überblick

Die Doppel-Gleichgewichts-Breakout-Strategie ist eine Trend-Tracking-Strategie, die auf der Kreuzung von Bewegungs-Mitteln in zwei verschiedenen Perioden als Kauf- und Verkaufssignale basiert. Die Strategie verwendet die Kreuzung von schnellen und langsamen Durchschnittswerten als Einstiegspunkte für den Handel, um nach der Kreuzung die Richtung des Trends zu bestimmen und eine entsprechende Über- oder Leerposition aufzubauen. Sie kann sowohl einen Trend auf mittlerer Ebene erfassen als auch die Probleme mit zu hoher Handelsfrequenz durch unnötige Schwankungen reduzieren.

Strategieprinzip

Die Strategie verwendet zwei Moving Averages: einen schnellen MA und einen langsamen MA. Die schnellen MA-Zyklen sind in der Regel auf eine kürzere Periode (z. B. 15 Perioden) eingestellt, um kurzfristige Preisbewegungen zu erfassen. Die langsamen MA-Zyklen sind in der Regel auf eine längere Periode (z. B. 21 Perioden) eingestellt, um die Richtung der wichtigsten Trends zu bestimmen. Die Handelssignale der Strategie stammen aus der Kreuzung zweier MA: ein Kaufsignal, wenn ein schneller MA über einen schnellen MA geht, und ein Verkaufsignal, wenn ein schneller MA unter einem schnellen MA geht.

Durch die Einrichtung verschiedener MA-Periodenpaare kann die Dauer der Trend-Erfassung der Strategie angepasst werden. Die kürzeren MA-Paare können die Gelegenheit zu kurzfristigen Preiswechseln in kleinen Perioden erfassen. Die längeren MA-Paare können die Schwingungen filtern und nur Trends auf der längeren Linie erfassen.

Die Strategie beinhaltet auch Risikomanagement-Module: Stop Loss, Stop Loss, Move Stop. Dies kann die maximale Verlustquote für einen einzelnen Handel begrenzen und dazu beitragen, die Gesamterträge zu schützen.

Strategische Vorteile

Die Strategie der Gleichgewichtsausrichtung hat folgende Vorteile:

  1. Die Konzepte sind einfach, leicht zu verstehen und umzusetzen.
  2. Trends in unterschiedlichen Zeitabständen können erfasst werden, indem die MA-Zyklen an unterschiedliche Marktumgebungen angepasst werden.
  3. Es ist auch eine gute Möglichkeit, die Kosten für die Nutzung der Webseite zu senken.
  4. In Kombination mit Stop-Loss-Stopps kann das Risiko effektiv kontrolliert werden.
  5. Optimierbarkeit, Anpassung der MA-Zyklen, Risikomanagementparameter usw. zur weiteren Verbesserung der Effektivität.

Risikoanalyse

Die Doppel-Gleichgewichts-Strategie birgt auch Risiken, die sich auf folgende Bereiche konzentrieren:

  1. In der Phase der Erschütterung kann das MA-Kreuzungssignal zu häufig sein, was zu einer zu hohen Handelsfrequenz führt.
  2. Es gibt eine Verzögerung zwischen den beiden Gleichungen, die den Preiswendepunkt verpassen kann und den Verlust nicht rechtzeitig stoppen kann.
  3. Es gibt keine wirksame Filterung von False Breaches, die zu unnötigen Verlusten führen können.
  4. Die MA selbst reagiert nur langsam auf die Preise und kann die Preisentwicklung nicht vollständig verfolgen.

Diese Risiken können durch Anpassung der MA-Parameter, Hinzufügen von Filterbedingungen und Optimierung der Stop-Loss-Logik verbessert und optimiert werden.

Optimierungsrichtung

Die Strategie der Gleichgewichtslinie kann in folgenden Bereichen optimiert werden:

  1. Filter wie Transaktionsvolumen oder Schwankungsindikatoren werden hinzugefügt, um häufige Lagerhaltung bei Erschütterungen und Falschbrüchen zu vermeiden.
  2. MA-Zyklen und -Kombinationen können für verschiedene Zyklen und Sorten angepasst werden.
  3. Verschiedene Arten von MA, wie EMA, LWMA usw., können getestet werden, um die MA-Form auszuwählen, die am empfindlichsten auf die Preisreaktion reagiert.
  4. Ein zusätzlicher Maschinenlern-Algorithmus zur automatischen Optimierung von MA-Parametern und Hyperparametern wie Stop-Loss-Margin.
  5. Verschiedene Verlustlösungen können getestet werden, wie z. B. Sprungverlust, Trackingverlust, Durchschnittsverlust usw.

Durch diese Optimierungen und Verbesserungen können die Erfolgsquote, die Rendite und die Risikobereitschaft der Strategie erheblich gesteigert werden.

Zusammenfassen

Die Binary Breakthrough Strategie ist insgesamt eine leicht zu implementierende und zu optimierende Trend-Tracking-Strategie. Sie verfügt über einfache Bedienung, Flexibilität und Risikokontrolle und eignet sich hervorragend als Einstiegsstrategie für quantitative Transaktionen. Durch ständige Prüfung und Optimierung kann diese Strategie kontinuierlich verbessert werden und hat das Potenzial, eine qualitative Strategie zu werden.

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

//@version=3
strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true)

maFastSource   = input(defval = ohlc4, title = "Fast MA Source")
maFastLength   = input(defval = 15, title = "Fast MA Period", minval = 1)
maSlowSource   = input(defval = ohlc4, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
inpTakeProfit   = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0)
inpStopLoss     = input(defval = 100, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
startYear       = input(defval = 2018, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() =>
    inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    timeOk = time > inputTime ? true : false
    r = (useTimeLimit and timeOk) or not useTimeLimit

maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)

fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50)

aboveBelow = maFast >= maSlow ? true : false
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

if( startTimeOk() )
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    //strategy.close( id = "Long", when = exitLong )
    
    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.exit("Exit Long", from_entry = "Long",  profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)
    strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)