Die Ressourcen sind geladen. Beförderung...

BB-Prozentsatzindex-Strategie zur Abblendung des Trendes

Schriftsteller:ChaoZhang, Datum: 2023-12-06 14:43:39
Tags:

img

Übersicht

Diese Strategie basiert auf dem BB-Prozentindex in Kombination mit RSI- und MFI-Indikatoren. Sie trifft lang- und kurzfristige Entscheidungen, indem sie Preisbrechungen der oberen und unteren Bollinger-Bänder erkennt, zusammen mit RSI-Überverkauf/Überkaufsignalen und MFI-Überverkauf/Überkaufsignalen.

Strategie Logik

  1. Berechnen Sie den Bollinger-Band-Prozentsatz (BB%). BB% stellt die Standardabweichung des Preises in Bezug auf das Bollinger-Mitteband dar, das die Marktrichtung über den Bollinger-Kanal beurteilt.
  2. Vergleichen Sie RSI- und MFI-Indikatoren, um die Bedingungen für Überkauf und Überverkauf zu bestimmen. RSI vergleicht den durchschnittlichen Gewinn und den durchschnittlichen Verlust über einen Zeitraum, um die Überkauf- und Überverkaufswerte zu bestimmen. MFI vergleicht Volumen und Abnahmevolumen, um die Überkauf- und Überverkaufswerte zu bestimmen.
  3. Wenn der Preis durch die Bollinger-Untergleise nach oben bricht, gehen Sie lang; wenn der Preis durch die Bollinger-Obergleise nach unten bricht, gehen Sie kurz.

Vorteile

  1. Der Trendfading-Handel vermeidet Markttrends und verringert Renditefluktuationen.
  2. Die Kombination mehrerer Indikatoren filtert Signale und verbessert die Entscheidungsgenauigkeit.
  3. Parametrierte Einstellungen sind flexibel, um die Risiko-Renditeigenschaften der Strategie anzupassen.
  4. Anwendbar auf hochvolatile Instrumente wie Rohstoffe, Devisen, Kryptowährungen usw.

Risiken und Lösungen

  1. Es besteht eine hohe Wahrscheinlichkeit für falsche Signale von Bollinger-Breakouts, die eine Kombination mehrerer Indikatoren für die Filtration erfordern.
  2. Die Beurteilung von Ausbruchsignalen erfordert angemessen lockere Kriterien, um zu vermeiden, dass gute Gelegenheiten verpasst werden.
  3. Anpassung der Parameter-Einstellungen zur Steuerung von Risiken, z. B. Positionsgröße, Erhöhung der Stop-Loss-Linien usw.

Optimierungsrichtlinien

  1. Einbeziehung von volatilitätsbasierten Stop-Loss-Mechanismen wie dem ATR-Indikator.
  2. Einführung von Modellen des maschinellen Lernens zur Bewertung der Ausbruchsignalqualität.
  3. Optimierung der Instrumentenauswahlmechanismen zur dynamischen Anpassung der teilnehmenden Instrumente.
  4. Einbeziehen Sie mehr Faktoren wie Stimmungsindikatoren, Nachrichten usw., um den Entscheidungsrahmen zu verbessern.

Schlussfolgerung

Diese Strategie wird hauptsächlich auf nicht-trendige Instrumente mit hoher Volatilität angewendet. Sie implementiert den Trendfading-Handel durch Bollinger-Kanal- und Indikatorkombinationen. Die Risiko-Renditeigenschaften können durch Anpassung von Parametern kontrolliert werden. Weitere Verbesserungen können durch die Einführung mehrerer Hilfsindikatoren und Modelle zur Optimierung der Entscheidungsqualität erzielt werden, wodurch eine bessere Strategieleistung erzielt wird.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "BB%/MFI/RSI", shorttitle = "BB%/MFI/RSI", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
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")

source = hlc3
length = input(14, minval=1), mult = input(2.0, minval=0.001, maxval=50), bblength = input(50, minval=1, title="BB Period")
DrawRSI_f=input(true, title="Draw RSI?", type=bool)
DrawMFI_f=input(false, title="Draw MFI?", type=bool)
HighlightBreaches=input(true, title="Highlight Oversold/Overbought?", type=bool)

DrawMFI = (not DrawMFI_f) and (not DrawRSI_f) ? true : DrawMFI_f
DrawRSI = (DrawMFI_f and DrawRSI_f) ? false : DrawRSI_f
// RSI
rsi_s = DrawRSI ? rsi(source, length) : na
plot(DrawRSI ? rsi_s : na, color=maroon, linewidth=2)

// MFI
upper_s = DrawMFI ? sum(volume * (change(source) <= 0 ? 0 : source), length) : na
lower_s = DrawMFI ? sum(volume * (change(source) >= 0 ? 0 : source), length) : na
mf = DrawMFI ? rsi(upper_s, lower_s) : na
plot(DrawMFI ? mf : na, color=green, linewidth=2)

// Draw BB on indices
bb_s = DrawRSI ? rsi_s : DrawMFI ? mf : na
basis = sma(bb_s, length)
dev = mult * stdev(bb_s, bblength)
upper = basis + dev
lower = basis - dev
plot(basis, color=red)
p1 = plot(upper, color=blue)
p2 = plot(lower, color=blue)
fill(p1,p2, blue)

b_color = (bb_s > upper) ? red : (bb_s < lower) ? lime : na
bgcolor(HighlightBreaches ? b_color : na, transp = 0)

//Signals
up = bb_s < lower and close < open
dn = bb_s > upper and close > open
size = strategy.position_size
lp = size > 0 and close > open
sp = size < 0 and close < open
exit = (up == false and dn == false) and (lp or sp)

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, 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