Die Multi-Filter-Bollinger-Band-Handelsstrategie ist eine quantitative Handelsstrategie, die den Bollinger-Band-Indikator, den gleitenden Durchschnittsindikator, den RSI-Indikator und die K-Linien-Grafikfunktionen für ein multikonditionales Screening kombiniert, um Handelssignale zu generieren, wenn die Bedingungen erfüllt sind.
Die Strategie verwendet hauptsächlich drei Indikatoren: Bollinger Bands, gleitender Durchschnitt und RSI. Unter ihnen ist die mittlere Schiene der Bollinger Bands der einfache gleitende Durchschnitt des Preises für n Tage, und die oberen und unteren Schienen sind die mittleren Schienen +2 Standardabweichungen und die mittleren Schienen -2 Standardabweichungen. Der RSI-Indikator ist ein Wert zwischen 0 und 100, der auf der Basis des Anstiegs/Fallbereichs über einen bestimmten Zeitraum berechnet wird.
Die Strategie erzeugt Handelssignale unter folgenden drei Hauptbedingungen:
(1) Bollinger-Unterband-Breakout & K-Line-Körper-Widerstreit. Wenn der Schlusskurs durch das untere Band nach oben bricht und die Farbe des K-Line-Körpers der aktuellen Trendrichtung widerspricht, gehen Sie lang.
(2) Bollinger-Oberband-Breakout & K-Line-Körper-Widerstreit Wenn der Schlusskurs durch das obere Band nach unten bricht und die Farbe des K-Line-Körpers der aktuellen Trendrichtung widerspricht, gehen Sie kurz.
(3) K-Linien-Körperumkehrung: Wenn die Positionsrichtung mit der K-Linien-Körperfarbenumkehrung übereinstimmt, schließt man die Position.
Darüber hinaus legt die Strategie auch gleitende Durchschnittsfilter, K-Linien-Körperfilter, RSI-Filter und andere Hilfsbedingungen fest, um den Eintritt streng zu kontrollieren.
Die Risiken können durch die Anpassung der Bollinger-Parameter und die strikte Kontrolle der Stopps verringert werden.
Im Allgemeinen ist diese Strategie eine typische mittelfristige bis langfristige Trendfolgestrategie. Durch multikonditionales Screening und eine strenge Kontrolle der Ein- und Ausstiegszeit mit einem Trend-Trading-Ansatz kann sie unnötigen Handel reduzieren und mittelfristige Markttrends erfassen. Es gibt immer noch viel Raum für die Optimierung dieser Strategie durch Anpassung von Parametern, Hinzufügen mehr Hilfswerkzeuge und so weiter, um die Stabilität und Rentabilität der Strategie weiter zu verbessern.
/*backtest start: 2023-12-17 00:00:00 end: 2024-01-16 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true ) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(false, defval = false, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") usebf = input(true, defval = true, title = "Use body-filter") usecf = input(true, defval = true, title = "Use color-filter") userf = input(true, defval = true, title = "Use RSI-filter") fromyear = input(1900, defval = 1900, 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 filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebf == false //Color filter bar = close > open ? 1 : close < open ? -1 : 0 gb = bar == 1 or usecf == false rb = bar == -1 or usecf == false //RSI Filter fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) ursi = rsi > 70 or userf == false drsi = rsi < 30 or userf == false //Signals up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0) dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0) exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()