Bollinger-Band-Handelsstrategie mit mehreren Filtern


Erstellungsdatum: 2024-01-17 15:12:57 zuletzt geändert: 2024-01-17 15:12:57
Kopie: 1 Klicks: 592
1
konzentrieren Sie sich auf
1617
Anhänger

Bollinger-Band-Handelsstrategie mit mehreren Filtern

Überblick

Die Multiple-Selection-Bulling-Strategie ist eine quantitative Handelsstrategie, die eine Mehrfach-Konditions-Selektion in Kombination mit dem Bulling-Band-Indikator, dem Mean Line-Indikator, dem RSI-Indikator und der K-Line-Graphik-Charakteristik durchführt und ein Handelssignal auslöst, wenn die Bedingungen erfüllt sind. Dies ist eine typische Trend-Tracking-Strategie, die durch die Erfassung von Preistrendschwankungen in der mittleren und langen Linie profitiert.

Strategieprinzip

Indikatorberechnung

Die Strategie verwendet hauptsächlich drei Indikatoren: den Brin-Band, die Durchschnittslinie und den RSI. Der Brin-Band-Mittelstrahl ist der n-Tage-Simple-Moving-Mean-Line des Preises, der Oberstrahl und der Unterstrahl sind der Mittelstrahl + 2-fache Standardabweichung und der Mittelstrahl-2-fache Standardabweichung. Der RSI-Indikator ist ein Wert zwischen 0 und 100, der auf den Anstieg und Abfall über einen bestimmten Zeitraum basiert.

Handelssignale

Die Strategie erzeugt ein Handelssignal, das durch folgende drei Hauptbedingungen bestimmt wird:

(1) Brin-Band-Abtrieb & K-Linien-Entität-Rückweisung. Mehr zu tun, wenn der Schlusskurs abtrieben ist und die K-Linien-Entität die Farbe der gegenwärtigen Trendrichtung widerspricht.

(2) Brin-Band-Break-On-Track & K-Line-Entity-Backschlag. Wenn ein K-Line-Entity unterhalb des Schlusskurses auf Track geht und die Farbe der K-Line entgegengesetzt der Richtung des aktuellen Trends ist, wird eine Lücke gemacht.

(3) K-Linien-Einheit dreht sich. Wenn die Positionshaltung mit der K-Linien-Einheit-Farbe übereinstimmt, ist die Position platziert.

Zusätzlich werden zusätzliche Bedingungen wie ein einheitlicher Filter, ein K-Linie-Einheit-Filter und ein RSI-Filter eingesetzt, um den Zugang streng zu kontrollieren.

Analyse der Stärken

  • Strenge Kontrolle von Mehrfachverhältnissen verringert das Risiko von False-Breaks
  • Der Trend-Tracking reduziert die Handelsfrequenz
  • RSI-Beihilfen zur Vermeidung der Umkehrfalle

Risikoanalyse

  • Fehlende Einstellung der Brin-Band-Parameter kann zu weniger Signalen führen
  • Ein Fehlschlag könnte zu großen Verlusten führen.
  • Weniger Frequenz und möglicherweise verpasste Handelschancen

Das Risiko kann durch Anpassung der Brin-Band-Parameter und strenge Kontrolle des Stop-Losses verringert werden.

Optimierungsrichtung

  • Strategie-Performance unter verschiedenen Parametern zu testen, um optimale Parameter zu finden
  • Mit Hilfe von Machine Learning-Algorithmen können Strategien automatisch optimiert werden.
  • Mehr Faktoren und Filter können zur Steigerung der Strategie-Stabilität hinzugefügt werden

Zusammenfassen

Diese Strategie ist eine typische Midline-Trend-Tracking-Strategie. Durch die Filterung von mehreren Bedingungen, die strikte Kontrolle der Ein- und Ausgangszeiten und die Verwendung von Trend-Trading-Methoden können unnötige Transaktionen reduziert und die Midline-Trend-Trends des Marktes erfasst werden. Die Strategie hat noch viel Optimierungsraum und kann durch die Anpassung der Parameter und die Hinzufügung von mehr Hilfsmitteln die Stabilität und Profitabilität der Strategie weiter verbessern.

Strategiequellcode
/*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()