
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.
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.
Diese Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Diese Risiken können in folgenden Bereichen optimiert werden:
Die Strategie kann vor allem in folgenden Bereichen optimiert werden:
Parameteroptimierung: Optimierung der Periodiparameterkombination der schnellen und langsamen MA durch systematischere Rückmeldung und Verbesserung des Gesamtergebnis-Risiko-Verhältnisses
PatternerkennungEs wird auch ein weiterer Indikator wie KDJ, MACD und andere hinzugefügt, um zuverlässigere Umkehrsignale zu erkennen.
Stop-Loss-OptimierungDie Entwicklung von Algorithmen zur Verringerung der Wahrscheinlichkeit, dass ein Stop-Loss ausgelöst wird.
Maschinelles LernenDas Unternehmen hat sich dazu entschieden, mehr historische Daten zu sammeln und zu markieren, um automatisch Handelsregeln zu erzeugen.
Quantifizierte UmstellungDie Strategie zur automatischen Anpassung der Positionsverwaltung an die Marktlage.
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.
/*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)