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.
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.
Die FiboBuLL Wave-Strategie hat einige Vorteile:
Es gibt auch einige Risiken für die FiboBuLL Wave-Strategie:
Die Optimierungen können in folgenden Aspekten vorgenommen werden:
Die wichtigsten Optimierungsrichtungen für die FiboBuLL Wave-Strategie:
Mit den oben genannten Verbesserungen können die Stabilität und Rentabilität der FiboBuLL Wave-Strategie erheblich verbessert werden.
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')