Strategie für den Ausbruch der Trendentwicklung mit doppeltem MA

Schriftsteller:ChaoZhang, Datum: 2024-01-08 16: 43:38
Tags:

img

Übersicht

Die Dual MA Trend Breakout Strategie ist eine quantitative Handelsstrategie, die zwei gleitende Durchschnitte verschiedener Perioden verwendet, um den Trend zu bestimmen und Eintrittssignale zu generieren. Sie beurteilt hauptsächlich die allgemeine Trendrichtung durch den langsamen MA und verwendet den schnellen MA zur Eintrittsfilterung.

Strategie Logik

Die Strategie besteht aus folgenden Hauptteilen:

Trendbeurteilung: Berechnet die 21-Perioden-MA, definiert als die langsame MA. Ihre Position ist relativ stabil und kann verwendet werden, um die allgemeine Trendrichtung zu beurteilen. Wenn die Preise in der Nähe dieser MA steigen, ist es ein Aufwärtstrend. Wenn die Preise in der Nähe dieser MA fallen, ist es ein Abwärtstrend.

Eingabefilterung: Berechnet den 5-Perioden-MA, definiert als den schnellen MA. Nur wenn der Preis sowohl den langsamen als auch den schnellen MA durchbricht, wird das Handelssignal ausgelöst. Dieses Design filtert vor allem die Möglichkeit falscher Ausbrüche weiter.

Filterung der Kerze: Die Strategie geht nur lang, wenn die aktuelle Kerze bärisch ist, oder geht kurz, wenn die aktuelle Kerze bullisch ist. Dies ist der Ansicht, dass die Verwendung von Umkehrbalken für den Einstieg eine höhere Erfolgsrate erzielen kann. Es kombiniert auch den schnellen RSI-Indikator, um zu vermeiden, in überkaufte oder überverkaufte Bereiche zu gelangen.

PyramidenfilterFür den Krypto-Markt beinhaltet die Strategie zusätzlich eine Verdreifachung der Volatilitäts-Breakout-Bedingung, um Überverkaufsmöglichkeiten bei signifikanten Abwärtstrends zu nutzen.

Stop-Loss: Die Strategie unterstützt bewegliche Stop-Loss. Nach Eröffnung der Positionen wird der Stop-Loss in Echtzeit basierend auf dem festgelegten Prozentsatz aktualisiert.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Das Dual-MA-Design ist einfach und praktisch, leicht zu verstehen und zu beherrschen.
  2. Zuverlässige Trendbeurteilung durch Kombination von schnellen und langsamen MAs;
  3. Eintritt in die Umkehrleiste verbessert die Gewinnrate des Handels;
  4. Die Gesamtmethode ist konservativ und stabil und für alle Zeitrahmen geeignet.
  5. Unterstützt die Verlagerung von Stop-Loss zu Risikokontrolle;
  6. Es berücksichtigt insbesondere die Merkmale des Krypto-Marktes, indem überverkaufte Pyramiden-Möglichkeiten hinzugefügt werden, um übermäßige Renditen zu erzielen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. Während der Doppel-MA-Perioden im Bereich werden mehrere kleine Gewinne und Verluste erzielt.
  2. Ein Umkehrbar-Eintrag kann in einigen Zeitrahmen eine geringe Gewinnrate haben.
  3. Der Kryptowährungsmarkt hat eine hohe Volatilität und eine hohe Wahrscheinlichkeit, dass ein Stop-Loss ausgelöst wird.
  4. Überverkaufte Pyramidengeschäfte sind nicht viele, mit hoher Renditevolatilität.

Um diesen Risiken entgegenzuwirken, können Optimierungen in folgenden Bereichen vorgenommen werden:

  1. Mehr Einstiegsbedingungen hinzufügen, um ineffektive Whipsaws zu vermeiden;
  2. Anpassung des Zeitrahmens oder Hinzufügung anderer Filterindikatoren;
  3. Optimierung von Stop-Loss-Algorithmen für die Nachverfolgung in der Nähe der Mittellinie;
  4. Bewertung der tatsächlichen Leistung von überverkauften Pyramidenstrategien.

Optimierungsrichtlinien

Die wichtigsten Aspekte zur Optimierung dieser Strategie sind:

  1. Optimierung der Parameter: Systematische Rückprüfung, um optimale Kombinationen von schnellen und langsamen MA-Perioden zu finden, um die risikobereinigten Renditen zu verbessern.

  2. Mustererkennung: Hinzufügen anderer Indikatoren wie KDJ, MACD, um zuverlässigere Umkehrsignale zu erkennen.

  3. Stop-Loss-Optimierung: Entwickeln Sie schwebende oder zurückliegende Stop-Loss-Algorithmen, um die Wahrscheinlichkeit zu verringern, dass Sie gestoppt werden.

  4. Maschinelles Lernen: Sammeln und kennzeichnen Sie mehr historische Daten, um automatisch Handelsregeln mit Hilfe von ML zu generieren.

  5. Positionsgröße: Dynamische Anpassung der Positionsgröße anhand der Marktbedingungen.

Schlussfolgerung

Die Dual MA Trend Breakout Strategie ist im Allgemeinen eine einfache und praktische Trendfolgestrategie. Im Vergleich zu komplexen Machine-Learning-Algorithmen ist diese Strategie einfacher zu interpretieren und zu meistern, mit höherer Zuverlässigkeit. Mit Parameter-Tuning, Feature-Erweiterung und ML-Augmentierung hat diese Strategie ein großes Verbesserungspotenzial und ist ein guter Ausgangspunkt für quantitativen Handel.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title = "Noro's Trend MAs Strategy v2.0 +CB", shorttitle = "Trend MAs str 2.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)

//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")
needex = input(true, defval = true, title = "Need extreme? (crypto/fiat only!!!)")

src = useohlc4 == true ? ohlc4 : close

//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2

//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2

//Trend
trend = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend[1]

//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0

//Fast RSI
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
len = abs(close - mac)
sma = sma(len, 100)
max = max(open, close)
min = min(open, close)
up3 = close < open and len > sma * 3 and min < min[1] and fastrsi < 10 ? 1 : 0

//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0

up2 = high < center and high < center2 and bar == -1 ? 1 : 0
dn2 = low > center and low > center2 and bar == 1 ? 0 : 0

//Lines
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")

//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)

//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')

//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]

longCondition = up == 1 or (up2 == 1 and needex == true) or up3 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
    strategy.exit("Stop Long", "Long", stop = stoplong)

shortCondition = dn == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    strategy.exit("Stop Short", "Short", stop = stopshort)

Mehr