Die Ressourcen sind geladen. Beförderung...

FiboBuLL-Wellenstrategie basierend auf Bollinger-Band-Breakout

Schriftsteller:ChaoZhang, Datum: 2023-12-01 14:11:56
Tags:

img

Übersicht

Die FiboBuLL-Wellenstrategie wurde von der Filterversion der Bollinger Bands-Studie übernommen, die unter meiner Scripts-Seite zu finden ist.

Bollinger Bands ist ein klassischer Indikator, der einen einfachen gleitenden Durchschnitt von 20 Perioden verwendet, zusammen mit Grafiken der oberen und unteren Bands, die 2 Standardabweichungen vom mittleren Band entfernt sind.

Die Strategie berücksichtigt keine anderen Parameter wie Volumen / RSI / Fundamentals usw., so dass der Benutzer Diskretion verwenden muss, die auf Bestätigungen anderer Indikatoren oder Fundamentals basiert.

Es ist definitiv vorteilhaft, diese Strategie oder den Bollinger Bands-Filter zusammen mit anderen Indikatoren zu verwenden, um einen frühen Einblick in den Bruch/Versagen der Bands beim Candle-Schließen während des BB-Squeezes oder basierend auf der Volatilität zu erhalten.

Die Strategie kann auf Heikin-Ashi-Kerzen zur Erkennung von Trends verwendet werden, jedoch werden HA-Kerzen für Handelsbeiträge nicht empfohlen, da sie den wahren Preis des Vermögenswerts nicht widerspiegeln.

Strategie Logik

Die Kernlogik hinter der FiboBuLL-Wellenstrategie besteht darin, auf der Grundlage des Ausbruchs von Bollinger-Bändern zu handeln. Die Bollinger-Bänder bestehen aus einem mittleren Band, einem oberen Band und einem unteren Band. Das mittlere Band ist ein 21-Perioden-einfacher gleitender Durchschnitt des Schlusskurses; Das obere Band wird berechnet, indem 1 Standardabweichung über dem mittleren Band hinzugefügt wird, was den oberen Bereich der Preisschwankung widerspiegelt; Das untere Band wird abgeleitet, indem 1 Standardabweichung unter dem mittleren Band subtrahiert wird, was den unteren Bereich der Preisbewegung widerspiegelt.

Ein langes Signal wird erzeugt, wenn der Schlusskurs über das obere Band bricht; ein kurzes Signal wird ausgelöst, wenn der Schlusskurs unter das untere Band bricht.

Die Strategie verwendet die Barssince-Funktion, um den Preisbruch im Verhältnis zu den oberen und unteren Bands zu verfolgen. Ein langes Signal wird erzeugt, wenn die Anzahl der Bars seit dem Oberbandbruch kleiner ist als die des unteren Bandes. Ein kurzes Signal wird ausgelöst, wenn die Anzahl der Bars seit dem Unterbandbruch kleiner ist als die des oberen Bandes.

Durch die Anpassung der mittleren Bandperiode und der Multiplikatorparameter für die Standardabweichung kann die Breakout-Empfindlichkeit der Bollinger-Bänder geändert werden, wodurch der Zeitpunkt des Einstiegs angepasst wird.

Vorteile

Die FiboBuLL Wave-Strategie hat einige Vorteile:

  1. Einfache Logik basierend auf BB-Break-out, leicht zu verstehen
  2. Die Breakout-Empfindlichkeit kann durch Anpassung der Parameter gesteuert werden.
  3. BB-Bänder visualisieren Preisschwankungen und -trends
  4. Kann mit anderen Indikatoren kombiniert werden, verbessert die Genauigkeit
  5. Anwendbar für mehrere Zeitrahmen

Risiken

Es gibt auch einige Risiken für die FiboBuLL Wave-Strategie:

  1. Anfällig für falsche Signale, die sich ausschließlich auf BB-Ausbruch stützen
  2. Unmöglich, die Dynamik und Dauer nach dem Ausbruch zu bestimmen
  3. Keine Ausstiegsregeln für die Umkehr
  4. Hochrisiko ohne Stop-Loss

Die Optimierungen können in folgenden Aspekten vorgenommen werden:

  1. Fügen Sie Filter mit anderen Indikatoren hinzu, um falsche Signale zu vermeiden
  2. Optimieren von Parametern auf der Grundlage historischer Daten
  3. Setzen Sie Stop-Loss, um den maximalen Verlust zu begrenzen
  4. Überlegen Sie, um die Persistenz zu bestimmen, Umkehrfaktoren hinzuzufügen

Möglichkeiten zur Verbesserung

Die wichtigsten Optimierungsrichtungen für die FiboBuLL Wave-Strategie:

  1. Hinzufügen von Volumenindikatoren z. B. A/D-Linie, um einen schwachen Ausbruch zu vermeiden
  2. Kombination von Überkauf/Überverkauf, z. B. RSI, um die Genauigkeit zu verbessern
  3. Optimieren Sie Parameter wie Periode und Abweichungsmultiplikator basierend auf Backtest-Ergebnissen
  4. Setzen Sie Stop-Loss und Take-Profit, um das Risiko zu kontrollieren und Gewinne zu erzielen
  5. Berücksichtigen Sie Trend- und Umkehrfilter zur Bestimmung der Richtungsbeständigkeit
  6. Versuche optimale Parameter für verschiedene Produkte und Zeitrahmen

Mit den oben genannten Verbesserungen können die Stabilität und Rentabilität der FiboBuLL Wave-Strategie erheblich verbessert werden.

Zusammenfassung

Die FiboBuLL-Wellenstrategie nutzt das Grundprinzip der Bollinger-Bänder bei der Identifizierung von Ausbrüchen und Rückschlägen auf das mittlere Band, um die Preisvolatilität zu verfolgen.

Die Einführung von Stop Loss/Take Profit zur Kontrolle von Risiken, um die Nützlichkeit der Strategie zu maximieren, ist jedoch nicht unbedingt notwendig.

Die FiboBuLL Wave-Strategie bietet einen grundlegenden Rahmen für die Gestaltung von Trades, die auf der Preisbewegung basieren.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//@FiboBuLL

strategy(shorttitle='FB Wave', title='FiboBuLL Wave (A version of Bollinger Bands Breakout Strategy By Trade Chartist)', overlay=true, pyramiding=1, currency=currency.NONE, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

src = input(close, title='Source')
length = input.int(21, minval=1, title='SMA length')  // 20 for classis Bollinger Bands SMA line (basis)


mult = input.float(1., minval=0.236, maxval=2, title='Standard Deviation')  //2 for Classic Bollinger Bands //Maxval = 2 as higher the deviation, higher the risk
basis = ta.sma(src, length)
dev = mult * ta.stdev(src, length)

Show = input.string('Both', options=['Longs Only', 'Shorts Only', 'Both'], title='Trade Type')
CC = input(true, 'Color Bars')

upper = basis + dev
lower = basis - dev

//Conditions for Long and Short - Extra filter condition can be used such as RSI or CCI etc.

short = src < lower  // and rsi(close,14)<40
long = src > upper  // and rsi(close,14)>60

L1 = ta.barssince(long)
S1 = ta.barssince(short)

longSignal = L1 < S1 and not (L1 < S1)[1]
shortSignal = S1 < L1 and not (S1 < L1)[1]

//Plots and Fills


////Long/Short shapes with text
// plotshape(S1<L1 and not (S1<L1)[1]?close:na, text = "sᴇʟʟ", textcolor=#ff0100, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "SELL", editable = true)
// plotshape(L1<S1 and not (L1<S1)[1]?close:na, text = "ʙᴜʏ", textcolor = #008000, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "BUY", editable = true)  

// plotshape(shortSignal?close:na, color=#ff0100, style=shape.triangledown, size=size.small, location=location.abovebar, transp=0, title = "Short Signal", editable = true)
// plotshape(longSignal?close:na, color=#008000, style=shape.triangleup, size=size.small, location=location.belowbar, transp=0, title = "Long Signal", editable = true)  


p1 = plot(upper, color=color.new(#ff0000, 75), display=display.all, title='Upper Band')
p2 = plot(lower, color=color.new(#008000, 75), display=display.all, title='Lower Band')

p = plot(basis, color=L1 < S1 ? #008000 : S1 < L1 ? #ff0000 : na, linewidth=2, editable=false, title='Basis')

fill(p, p1, color=color.new(color.teal, 85), title='Top Fill')  //fill for basis-upper
fill(p, p2, color=color.rgb(217, 161, 161), title='Bottom Fill', transp=85)  //fill for basis-lower

//Barcolor

bcol = src > upper ? color.new(#8ceb07, 0) : src < lower ? color.new(#ff0000, 0) : src > basis ? color.green : src < basis ? color.red : na

barcolor(CC ? bcol : na, editable=false, title='Color Bars')


// === INPUT BACKTEST RANGE ===
FromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
FromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
FromYear = input.int(defval=2018, title='From Year', minval=2015)
ToMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
ToDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
ToYear = input.int(defval=9999, title='To Year', minval=2010)

// === FUNCTION EXAMPLE === 
start = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59)  // backtest finish window
window() =>
    time >= start and time <= finish ? true : false

if window() and (Show == 'Longs Only' or Show == 'Both')
    strategy.entry('AL', direction=strategy.long, when=longSignal)
    strategy.close('LongAL', when=shortSignal, comment='AL KAPA')

if window() and (Show == 'Shorts Only' or Show == 'Both')
    strategy.entry('SAT', direction=strategy.short, when=shortSignal)
    strategy.close('SAT', when=longSignal, comment='SAT KAPA')




















Mehr