Handelsstrategie mit mehreren Filtern für Bollinger-Bänder

Schriftsteller:ChaoZhang, Datum: 2024-01-17 15:12:57
Tags:

img

Übersicht

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.

Strategieprinzip

Berechnung der Indikatoren

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.

Handelssignale

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.

Analyse der Vorteile

  • Mehrere strenge Bedingungen können das Risiko falscher Ausbrüche verringern
  • Trendverfolgungsmethode verringert die Handelshäufigkeit
  • RSI-Indikator hilft, Umkehrfallen zu vermeiden

Risikoanalyse

  • Fehlende Bollingerparameter-Einstellungen können zu wenigen Signalen führen
  • Versagte Ausbrüche können zu größeren Verlusten führen.
  • Eine geringere Handelsfrequenz kann einige Handelsmöglichkeiten verpassen

Die Risiken können durch die Anpassung der Bollinger-Parameter und die strikte Kontrolle der Stopps verringert werden.

Optimierungsrichtlinien

  • Testen Sie die Leistung der Strategie unter verschiedenen Parametern, um optimale Parameter zu finden
  • Hinzufügen von Algorithmen für maschinelles Lernen zur automatischen Optimierung von Parametern
  • Mehr Faktoren und Filter hinzufügen, um die Stabilität der Strategie zu verbessern

Zusammenfassung

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

Mehr