Strategie zur Beobachtung der Trendentwicklung von Bollinger-Band-Doppel gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2023-12-22 14:54:20
Tags:

img

Übersicht

Diese Strategie nutzt eine Kombination aus Bollinger Bands und gleitenden Durchschnitten für die Trendenkennung und den Eintritt. Sie nutzt die Trendenerkennungsfähigkeit von Bollinger Bands und den Filtereffekt von gleitenden Durchschnitten, um Markttrendrichtungen für den Eintritt in Trending Markets effektiv zu identifizieren.

Strategie Logik

  1. Berechnung des Bollinger-Kanals zur Bestimmung der Markttrendrichtung

    • Verwenden Sie höchste höchste und niedrigste niedrige, um Kanalbänder zu berechnen
    • Das mittlere Kanalband ist der Durchschnitt der hohen und niedrigen
    • Bestimmung der Trendrichtung auf der Grundlage der Preislage innerhalb des Kanals
  2. Berechnung der bullischen Kerzenkörpergröße für Stop-Loss- und Umkehrsignale

    • Bullish Candle Body ist der absolute Wert von Close minus Open
    • Berechnung des N-Periodendurchschnitts der Kerzenkörper, Vergleich mit dem aktuellen Körper für Stop-Loss und Umkehrung
  3. Eintritt in die Kanalrichtung bei Trendbestätigung

    • Lange Eintritte in der Nähe des unteren Bandes bei Aufwärtstrends
    • Kurze Eintritte in der Nähe des oberen Bandes bei Abwärtstrends
  4. Verwendung gleitender Durchschnitte zur Filtration, um falsche Signale zu vermeiden

    • Berechnung des gleitenden Durchschnitts des Schlusskurses für N-Perioden
    • Erzeugen Sie Signale nur bei gleitenden Durchbrüchen

Vorteile

  1. Systematische Trendenbestimmung unter Kombination von Bands und gleitenden Durchschnitten

    Die Bands identifizieren eindeutig die Preiskanäle und die Trendrichtung. Die gleitenden Durchschnitte filtern das Rauschen.

  2. Wirksame Risikokontrolle durch Stoppverlust des Kerzenkörpers

    Der Vergleich des aktuellen Kerzenkörpers mit dem historischen Durchschnitt ermittelt eine Trendumkehrung für Stop-Loss und Positionsreduktion.

  3. Klarer quantitativer Eintragungs- und Stop-Loss-Regeln

    Strenge Anforderungen an den gleitenden Durchschnitt und die Kanalrichtung für den Einstieg. Kerzenkörpergröße Stop-Loss-Regel.

Risikoanalyse

  1. Potenzielle Verluste auf den Märkten mit Bandbreite

    Die Anpassung der Positionsgröße sollte so reduziert werden, dass die Verlustwirkung begrenzt ist.

  2. Vorzeitige Stop-Loss-Tendenzen bei starken Trends

    Kurzfristige Retracements können bei starken Auf-/Abwärtstrends zu Stopps führen.

  3. Fehlerhafte Signale durch schlechte Parameter-Tuning

    Unteroptimale gleitende Durchschnitts- und Bandparameter können zu falschen Signalen führen.

Möglichkeiten zur Verbesserung

  1. Optimierung der gleitenden Durchschnittsrückblickperiode

    Periode anpassen, um die Glättung zu reduzieren, um eine schnellere Erkennung von Trendänderungen zu ermöglichen.

  2. Prüfung alternativer Stop-Loss-Mechanismen

    Beurteilen Sie die Hinterhaltungen, ATR-Haltungen usw., um ein optimales System zu finden.

  3. Einbeziehung von Modellen für maschinelles Lernen

    Train-Modelle auf umfangreichen historischen Daten, um die Trend- und Signalvorhersage zu verbessern.

Schlussfolgerung

Diese Strategie balanciert Trendidentifikation und Risikokontrolle mit Bollinger-Bändern und gleitenden Durchschnitten. Der systematische quantitative Ansatz mit klaren Ein-/Ausgangsregeln ermöglicht eine effektive Belohnungserfassung mit kontrolliertem Risiko. Weitere Verbesserungen durch Parameter-Tuning und Maschinelles Lernen werden die Robustheit verbessern.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Scalper Strategy v1.3", shorttitle = "Scalper str 1.3", 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, %")
needct = input(false, defval = false, title = "Counter-trend entry")
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
hd1 = center + distsma / 2
ld1 = 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(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

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

//Body
body = abs(close - open)
smabody = ema(body, 30)
candle = high - low

//Engulfing
min = min(open, close)
max = max(open, close)
bar = close > open ? 1 : close < open ? -1 : 0
upeng = bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] ? 1 : 0
dneng = bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] ? 1 : 0

//Signals
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 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 close > open)) ? 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)

Mehr