Doppelte MA Trendausbruchsstrategie


Erstellungsdatum: 2024-01-08 16:43:38 zuletzt geändert: 2024-01-08 16:43:38
Kopie: 0 Klicks: 653
1
konzentrieren Sie sich auf
1617
Anhänger

Doppelte MA Trendausbruchsstrategie

Überblick

Die Double MA Breakout-Strategie ist eine quantitative Handelsstrategie, bei der die Trendentscheidung und Eintrittsentscheidung anhand von Moving Averages aus zwei unterschiedlichen Zeitabschnitten erfolgt. Die Strategie richtet sich hauptsächlich nach der Gesamttrendrichtung anhand des langsamen MA und filtert die Eintrittsentscheidung anhand des schnellen MA. Bei einer Übereinstimmung der Trendrichtung auf der großen Ebene wird die Umkehrung der K-Linie für die Eintrittsentscheidung gewählt, um eine höhere Gewinn- und Gewinnrate zu erreichen.

Strategieprinzip

Die Strategie besteht hauptsächlich aus folgenden Teilen:

Trends zu beurteilen:Durch die Berechnung eines 21-Zyklus-MA, definiert als ein langsamer MA, der in einer relativ gleichmäßigen Position ist, kann die Richtung der Gesamttrend beurteilt werden. Wenn der Preis steigt, ist er aufwärts, wenn der Preis fällt, ist er aufwärts.

Eintrittsfilter:Es wird ein 5-Zyklus-MA berechnet, der als schneller MA definiert wird. Es wird nur dann ein Handelssignal erzeugt, wenn der Preis den langsamen MA durchbricht und gleichzeitig den schnellen MA durchbricht. Diese Konstruktion ist hauptsächlich darauf ausgerichtet, die Möglichkeit weiterer falscher Durchbrüche zu filtern.

K-Linie-Filter:Die Strategie wird nur dann ausgeführt, wenn die K-Linie negativ ist, oder wenn die K-Linie positiv ist. Dies ist in Anbetracht der höheren Erfolgsrate, die mit der Verwendung einer umgekehrten K-Linie erzielt werden kann. In Kombination mit dem schnellen RSI-Indikator wird ein Überkauf oder Überverkauf in der Zone vermieden.

Der Filter für die Lagerhaltung:Für die Kryptowährungsmärkte wurde die Strategie zusätzlich mit einer Dreifach-Schwankungsbrechungs-Hauflage ergänzt, um die Überschusschancen bei einem großen Absturz zu filtern.

Schadensbegrenzung:Die Strategie unterstützt mobile Stop-Losses. Die Stop-Loss-Position wird in Echtzeit aktualisiert, je nachdem, welcher Stop-Loss-Prozentsatz eingestellt wurde.

Analyse der Stärken

Diese Strategie hat folgende Vorteile:

  1. Die Doppel-MA-Designs sind einfach, praktisch und leicht zu verstehen.
    1. Trends zuverlässig zu beurteilen, indem schnelle MA-Kombinationsfilter verwendet werden;
  2. Die K-Linie wird umgedreht, um die Gewinnquote zu erhöhen.
  3. Die Gesamtmethodik ist robust und für alle Ebenen des Handels geeignet.
  4. Das ist eine gute Idee, aber es ist nicht so einfach.
  5. Es ist wichtig, die Eigenschaften des Krypto-Marktes zu berücksichtigen, um zusätzliche Gewinne zu erzielen.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. In der doppelten MA-Range gibt es bei Schwankungen mehrere kleine Verluste.
  2. Eintritt in die Umkehr-K-Linie kann zu bestimmten Zeiten eine geringe Gewinnrate haben.
  3. Der Markt für Kryptowährungen ist sehr volatil und die Wahrscheinlichkeit, dass ein Stop-Loss ausgelöst wird, ist hoch.
  4. Es gibt nur wenige Möglichkeiten für eine Über- oder Abnahme, und die Rendite ist sehr schwankend.

Diese Risiken können in folgenden Bereichen optimiert werden:

  1. Die Eintrittsbedingungen sollen erhöht werden, um Nichtigkeitsschocks zu vermeiden.
  2. Anpassung der K-Linien-Periode oder Hinzufügen von Filtern für andere Indikatoren;
  3. Optimierung von Stop-Loss-Algorithmen, die Stopps in der Nähe der Mittellachse verfolgen;
  4. Beurteilung der tatsächlichen Wirkung von Über- und Überschussstrategien.

Optimierungsrichtung

Die Strategie kann vor allem in folgenden Bereichen optimiert werden:

  1. Parameteroptimierung: Optimierung der Periodiparameterkombination der schnellen und langsamen MA durch systematischere Rückmeldung und Verbesserung des Gesamtergebnis-Risiko-Verhältnisses

  2. PatternerkennungEs wird auch ein weiterer Indikator wie KDJ, MACD und andere hinzugefügt, um zuverlässigere Umkehrsignale zu erkennen.

  3. Stop-Loss-OptimierungDie Entwicklung von Algorithmen zur Verringerung der Wahrscheinlichkeit, dass ein Stop-Loss ausgelöst wird.

  4. Maschinelles LernenDas Unternehmen hat sich dazu entschieden, mehr historische Daten zu sammeln und zu markieren, um automatisch Handelsregeln zu erzeugen.

  5. Quantifizierte UmstellungDie Strategie zur automatischen Anpassung der Positionsverwaltung an die Marktlage.

Zusammenfassen

Die Double MA Trendbreaking Strategie ist insgesamt eine relativ einfache und praktische Trend-Tracking-Strategie. Die Strategie ist einfacher zu interpretieren und zu beherrschen als komplexe Machine-Learning-Algorithmen und hat eine hohe Zuverlässigkeit. Mit der Einführung von Parameteroptimierung, Funktionserweiterung und Machine-Learning hat die Strategie großes Potenzial für Verbesserungen und ist ein guter Ausgangspunkt für quantitative Transaktionen.

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