Dies ist eine Dynamik-Tracking-Strategie, die auf Bollinger Bands basiert. Sie kombiniert Bollinger Bands, um Markttrends und Umkehrpunkte zu beurteilen, und setzt lange und kurze Positionen, um Marktschwankungen zu verfolgen.
Der Kernindikator dieser Strategie sind Bollinger Bands, die aus Mittelfeld, Oberfeld und Unterfeld bestehen. Das Mittelfeld ist der gleitende Durchschnitt von n Tagen, und die oberen und unteren Bands sind die Offsets des Mittelfelds plus/minus Standardabweichung. Wenn der Preis sich dem oberen/unteren Band nähert, gilt dies als ein Signal von Überkauf/Überverkauf. Die Strategie beinhaltet Trenddeviation als Grundlage für die Eröffnung von Positionen, dh Eröffnungspositionen, wenn der Preis durch das mittlere Band in die entgegengesetzte Richtung bricht. Um Verluste durch falsche Breakouts zu vermeiden, erfordert die Strategie, dass die Breakoutbreite größer ist als der Durchschnitt. Die Schlusskondition ist, dass der Preis nach dem Durchbrechen des mittleren Bands zurückkehrt.
Diese Strategie beinhaltet auch sowohl Trend-folgende Einträge als auch Mittel-Umkehr-Einträge, die verschiedenen Handelsmöglichkeiten entsprechen. Trend-folgende Einträge erfordern, dass das mittlere Band die Unterstützung/Widerstandsreferenz ist und Abweichungsbreakouts bildet. Mittel-Umkehr-Einträge kehren direkt in der Nähe der oberen/unteren Bollinger-Bänder um. Die Strategie kombiniert diese beiden Arten von Signalen und kann sowohl Trendverfolgung als auch Umkehroperationen durchführen.
Diese Strategie kombiniert die überkauften/überverkauften Eigenschaften von Bollinger Bands mit Umkehrpunkt-Urteilen. Dies ermöglicht es, sowohl auf Trending- als auch auf Ranging-Märkten anzuwenden und verschiedene Arten von Handelsmöglichkeiten zu erfassen. Die Stop-Loss-Exit-Einstellung verhindert, dass der Verlust expandiert. Auch die Fähigkeit, sowohl lang als auch kurz zu handeln, verbessert die Anwendbarkeit der Strategie.
Im Vergleich zu einfachen Bollinger-Strategien macht die zusätzliche Trendlogik die Einträge dieser Strategie stabiler und erfasst auch Umkehrmöglichkeiten. Dies verbessert das Signal-Rausch-Verhältnis. Darüber hinaus nutzt der Handel in beide Richtungen die Handelsmöglichkeiten vollständiger in verschiedenen Marktsituationen.
Diese Strategie stützt sich hauptsächlich auf die überkauften/überverkauften Eigenschaften von Bollinger Bands. Wenn es also zu extremen Preisschwankungen kommt, wächst die Breite der Bollinger Bands weiter, was leicht zu mehreren Verlustgeschäften führen kann. Dies ist ein potenzieller Risikopunkt. Darüber hinaus gibt es immer noch einige Unsicherheiten und Fehler bei Umkehrurteilen, die zu fehlgeschlagenen Einträgen und Stops führen.
Gegen den Ausfall von Bollinger Bands können wir den Parameter n verkürzen, um die Bands empfindlicher zu machen, oder die Bandbreite reduzieren, um die Wahrscheinlichkeit von Verlusten zu verringern.
Die wichtigsten Richtungen zur Optimierung dieser Strategie sind:
Diese Strategie ermöglicht effektive Erweiterungen und Optimierungen der Standard-Bollinger-Strategien. Die zusätzliche Trendabweichung verbessert die Stabilität und nutzt Umkehrmöglichkeiten gut. Die Fähigkeit, in beide Richtungen zu handeln und Stop-Losses zu erzielen, macht die Strategie auch robuster. Weitere Verbesserungen können durch Parameteroptimierung und das Hinzufügen von mehr Filtern erzielt werden.
/*backtest start: 2023-11-20 00:00:00 end: 2023-11-27 00:00:00 period: 30m basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.3", shorttitle = "Bollinger str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(2.0, defval = 2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") uset = input(true, defval = true, title = "Use trend entry") usect = input(true, defval = true, title = "Use counter-trend entry") fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body body = abs(close - open) abody = ema(body, 30) //Signals bar = close > open ? 1 : close < open ? -1 : 0 up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset up2 = close <= lower and usect dn2 = close >= upper and usect exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2 //Trading if up1 or up2 strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if dn1 or dn2 strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()