Noros Bollinger-Tracking-Strategie

Schriftsteller:ChaoZhang, Datum: 2023-11-28 16:57:28
Tags:

img

Übersicht

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.

Grundsätze

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.

Analyse der Vorteile

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.

Risikoanalyse

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.

Optimierungsrichtlinien

Die wichtigsten Richtungen zur Optimierung dieser Strategie sind:

  1. Die Parameter der Bollinger Bands können je nach Markt angepasst werden, um die optimale Kombination zu finden.
  2. Die Abweichungsgröße und die Berechnung der Mittelwerte können mit anderen Optionen erprobt werden.
  3. Fügen Sie mehr Filter hinzu, um Eingangssignale zu beurteilen und falsche Positive zu reduzieren.
  4. Testen Sie andere Stop-Loss-Methoden wie Trail Stop-Loss.
  5. Die Parameter können für bestimmte Produkte und Zeitrahmen optimiert werden.

Schlussfolgerung

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()

Mehr