
Diese Strategie nutzt hauptsächlich den doppelten Moving Average als Kauf- und Verkaufssignal und profitiert bei Trendumkehren. Eine häufige Tracking-Stop-Strategie ist, wenn Sie einen Long-Moving-Average über dem Short-Moving-Average brechen und einen Long-Moving-Average unter dem Short-Moving-Average brechen.
Die Strategie setzt zunächst zwei Moving Averages ein, einen kurzfristigen 20-Tage-Mittelwert und einen längerfristigen 60-Tage-Mittelwert. Die Eintrittsentscheidung erfolgt dann anhand der Kreuzung zwischen dem kurzfristigen und dem langfristigen Mittelwert.
Konkret, wenn die kurzfristige Durchschnittslinie auf die langfristige Durchschnittslinie überschritten wird, bedeutet dies, dass sie derzeit im Aufwärtstrend ist, und dies ist mehr; wenn die kurzfristige Durchschnittslinie unter der langfristigen Durchschnittslinie überschritten wird, bedeutet dies, dass sie derzeit im Abwärtstrend ist, und dies ist leer.
Der Stop-Loss nach einer Über-Low-Loss-Aktion ist ein Trailing-Stop, bei dem der maximale Gewinn auf der Grundlage des Höchst- und des Tiefstpreises gesetzt wird.
Die Hauptsprache des Codes lautet:
Diese Strategie hat folgende Vorteile:
Die Strategie birgt auch einige Risiken:
Die Optimierung von Risiken kann auf folgende Weise erfolgen:
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Zusätzliche Filter für andere Indikatoren bilden ein Mehrfach-Eintrittsmechanismus, um falsche Durchbrüche zu vermeiden. Zum Beispiel kann der RSI-Indikator beurteilt werden.
Optimieren Sie die Periodenparameter der beweglichen Mittellinie, um die beste Kombination von Parametern zu finden. Verschiedene Periodenparameter können durch eine schrittweise Durchlaufmethode getestet werden.
Optimierung des Stop-Loss-Bereichs. Der optimale Stop-Loss-Bereich kann durch Rückmessdaten berechnet werden. Es kann auch ein dynamischer Stop-Loss-Bereich eingestellt werden.
Einrichtung eines Wiedereintrittsmechanismus. Nach einem Stop-Loss-Exit kann eine vernünftige Wiedereintrittslogik eingerichtet werden, um die Anzahl der Geschäfte zu reduzieren.
In Kombination mit Trendbeurteilungskennzahlen wird der Handel ausgesetzt, wenn der Trend nicht sichtbar ist, um einen ungültigen Handel zu vermeiden.
Eintritt in die Position-Management-Mechanismen, um die Positionen und die Stop-Loss-Bereiche dynamisch an die Marktbedingungen anzupassen.
Die Doppel-Moving-Average-Umkehr-Strategie ist insgesamt relativ einfach und praktisch, und die Trendwendepunkte durch die Doppel-Gleichgewicht-Linie zu beurteilen, ist eine häufige und wirksame Methode. Es besteht jedoch ein gewisses Risiko, die Optimierung der Parameter-Setting und Stop-Loss-Bereich zu testen, und mit anderen Filter-Indikatoren in Kombination verwendet werden, um die maximale Wirksamkeit der Strategie.
/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("Noro's Bands Scalper Strategy v1.4", shorttitle = "Scalper str 1.4", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needbe = input(true, defval = true, title = "Bands Entry")
needct = input(false, defval = false, title = "Counter-trend entry")
needdb = input(true, defval = true, title = "Double Body")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close
//PriceChannel 1
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2
//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2
//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]
//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)
//Body
body = abs(close - open)
smabody = needdb == false ? ema(body, 30) : ema(body, 30) * 2
candle = high - low
//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and bar == -1)) ? 1 : 0
dn7 = trend == 1 and ((bar == 1 and bar[1] == 1) or (close > hd and needbe == true)) and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and ((bar == -1 and bar[1] == -1) or (close < ld2 and needbe == true)) and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and bar == 1)) ? 1 : 0
if up7 == 1 or up8 == 1
strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)
if dn7 == 1 or dn8 == 1
strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)