La estrategia FiboBuLL Wave está adaptada de la versión filtrada del estudio de Bollinger Bands, que se puede encontrar en mi página de guiones.
Las bandas de Bollinger son un indicador clásico que utiliza una media móvil simple de 20 períodos, junto con gráficos de bandas superiores e inferiores que están a 2 desviaciones estándar de la banda media.
La estrategia no tiene en cuenta ningún otro parámetro como el volumen / RSI / Fundamentos, etc., por lo que el usuario debe usar discreción basada en confirmaciones de otros indicadores o fundamentos.
Funciona mejor cuando hay continuación de la barra después de que el precio cierra por encima / por debajo de las bandas superiores / inferiores. Definitivamente es beneficioso usar esta estrategia o el filtro de bandas de Bollinger junto con otros indicadores para obtener una visión temprana de la ruptura / falla de las bandas en el cierre de la vela durante el apretón de BB o basado en la volatilidad.
La estrategia se puede utilizar en velas Heikin Ashi para detectar tendencias, pero no se recomiendan velas HA para entradas comerciales, ya que no reflejan el precio real del activo.
La lógica central detrás de la estrategia FiboBuLL Wave es operar basándose en la ruptura de las bandas de Bollinger. Las bandas de Bollinger consisten en una banda media, una banda superior y una banda inferior. La banda media es un promedio móvil simple de 21 períodos del precio de cierre; la banda superior se calcula agregando 1 desviación estándar por encima de la banda media, lo que refleja el rango superior de la fluctuación de precios; la banda inferior se deriva restando 1 desviación estándar por debajo de la banda media, lo que refleja el rango inferior del movimiento de precios.
Una señal larga se genera cuando el precio de cierre se rompe por encima de la banda superior; Una señal corta se activa cuando el precio de cierre se rompe por debajo de la banda inferior. Después de tomar posiciones largas o cortas, las operaciones existentes se cerrarán cuando el precio vuelva a romper la banda opuesta.
La estrategia utiliza la función barssince para rastrear la ruptura del precio en relación con las bandas superior e inferior. Una señal larga se genera cuando el número de barras desde la ruptura de la banda superior es menor que el de la banda inferior. Una señal corta se activa cuando el número de barras desde la ruptura de la banda inferior es menor que el de la banda superior.
Al ajustar el período de banda media y los parámetros del multiplicador de la desviación estándar, se puede cambiar la sensibilidad de ruptura de las bandas de Bollinger, ajustando así el momento de entrada.
La estrategia FiboBuLL Wave tiene algunas ventajas:
También hay algunos riesgos a tener en cuenta para la estrategia FiboBuLL Wave:
Las optimizaciones pueden realizarse en los siguientes aspectos:
Las principales direcciones de optimización para la estrategia FiboBuLL Wave:
Con las mejoras anteriores, la estabilidad y la rentabilidad de la estrategia FiboBuLL Wave pueden mejorarse en gran medida.
La estrategia FiboBuLL Wave utiliza el principio básico de las bandas de Bollinger para identificar las rupturas y las reversiones a la banda media para rastrear la volatilidad de los precios.
Sin embargo, depender únicamente de la ruptura tiende a generar señales falsas y frenos, por lo que se deben incorporar confirmaciones utilizando volumen, tendencias, indicadores, etc. para determinar la confiabilidad de la ruptura, mientras se implementa el stop loss/take profit para controlar los riesgos, con el fin de maximizar la utilidad de la estrategia.
La estrategia FiboBuLL Wave proporciona un marco básico para diseñar operaciones basadas en la acción del precio.
/*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')