Diese Strategie verwendet hauptsächlich doppelte gleitende Durchschnitte als Kauf- und Verkaufssignale, um von Trendumkehrungen zu profitieren. Sie geht lang, wenn der kurzfristige gleitende Durchschnitt über den langfristigen gleitenden Durchschnitt überschreitet, und geht kurz, wenn der kurzfristige gleitende Durchschnitt unter den langfristigen gleitenden Durchschnitt überschreitet.
Die Strategie legt zunächst zwei gleitende Durchschnitte fest, einen kurzfristigen 20-Tage-MA und einen längerfristigen 60-Tage-MA.
Wenn die kurzfristige MA über die langfristige MA geht, signalisiert sie einen Aufwärtstrend, also gehen Sie lang.
Die Stop-Loss-Methode nach dem Long- oder Short-Gehen ist der Trailing-Stop, der auf dem höchsten Preis und dem niedrigsten Preis basiert, um einen maximalen Gewinn zu erzielen.
Die Hauptlogik des Kodex lautet:
Die Vorteile dieser Strategie sind:
Es gibt auch einige Risiken:
Um den Risiken entgegenzuwirken:
Die Strategie kann in folgenden Bereichen weiter optimiert werden:
Fügen Sie andere Filter wie RSI für Multi-Condition-Eintrag hinzu, um falsche Bremsen zu vermeiden.
Optimieren Sie MA-Perioden, um die beste Parametermischung zu finden.
Optimieren Sie den Stop-Loss-Bereich durch Backtest-Berechnung, um den optimalen Bereich zu finden.
Die Logik des Wiedereintritts nach dem Stop-Loss-Ausgang setzen, um die Handelsfrequenz zu reduzieren.
Kombination mit dem Trendindikator, um den Handel zu unterbrechen, wenn der Trend unklar ist.
Zusätzliche Positionsgröße und dynamischer Stop-Loss basierend auf den Marktbedingungen.
Zusammenfassend ist die Dual-MA-Umkehrstrategie insgesamt einfach und praktisch und identifiziert Trendwendepunkte durch Dual-MA-Kreuzungen. Aber es gibt Risiken, die Parameter-Tuning, Stop-Loss-Optimierung und das Hinzufügen von Filtern erfordern, um die Strategieneffizienz zu maximieren. Mit sorgfältiger Optimierung und diszipliniertem Risikomanagement kann sie zu einer stabil gewinnbringenden Swing-Trading-Strategie werden.
/*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)