A estratégia FiboBuLL Wave é adaptada da versão filtrada do estudo Bollinger Bands, que pode ser encontrada na minha página de scripts.
As Bandas de Bollinger são um indicador clássico que usa uma média móvel simples de 20 períodos, juntamente com gráficos de bandas superiores e inferiores que estão a 2 desvios padrão da faixa média.
A estratégia não leva em consideração quaisquer outros parâmetros, como Volume / RSI / Fundamentos etc, portanto, o usuário deve usar discrição baseada em confirmações de outros indicadores ou fundamentais.
Funciona melhor quando há continuação da barra após o preço fechar acima / abaixo das faixas superiores / inferiores. É definitivamente benéfico usar essa estratégia ou o filtro Bollinger Bands junto com outros indicadores para obter um vislumbre precoce da quebra / falha das faixas no fechamento da vela durante o aperto do BB ou com base na volatilidade.
A estratégia pode ser usada em velas Heikin Ashi para detectar tendências, mas as velas HA não são recomendadas para entradas comerciais, pois não refletem o preço real do ativo.
A lógica básica por trás da estratégia FiboBuLL Wave é negociar com base no rompimento das Bandas de Bollinger. As Bandas de Bollinger consistem em uma faixa média, faixa superior e faixa inferior. A faixa média é uma média móvel simples de 21 períodos do preço de fechamento; A faixa superior é calculada adicionando 1 desvio padrão acima da faixa média, refletindo a faixa superior da flutuação de preços; A faixa inferior é derivada subtraindo 1 desvio padrão abaixo da faixa média, refletindo a faixa inferior do movimento de preços.
Um sinal longo é gerado quando o preço de fechamento ultrapassa a faixa superior; um sinal curto é acionado quando o preço de fechamento ultrapassa a faixa inferior.
A estratégia usa a função barssince para rastrear a quebra do preço em relação às bandas superior e inferior. Um sinal longo é gerado quando o número de barras desde a quebra da banda superior é menor que o da banda inferior. Um sinal curto é acionado quando o número de barras desde a quebra da banda inferior é menor que o da banda superior.
A sensibilidade de ruptura das bandas de Bollinger pode ser alterada ajustando o período da faixa média e os parâmetros do multiplicador do desvio padrão, ajustando assim o momento da entrada.
A estratégia FiboBuLL Wave tem algumas vantagens:
Há também alguns riscos a notar para a estratégia FiboBuLL Wave:
As otimizações podem ser feitas nos seguintes aspectos:
As principais direcções de otimização para a estratégia FiboBuLL Wave:
Com as melhorias acima referidas, a estabilidade e a rentabilidade da estratégia FiboBuLL Wave podem ser consideravelmente melhoradas.
A estratégia FiboBuLL Wave utiliza o princípio básico das Bandas de Bollinger na identificação de rupturas e reversões para a faixa média para rastrear a volatilidade dos preços.
No entanto, confiar apenas no breakout tende a gerar sinais falsos e flipsaws. Portanto, confirmações usando volume, tendências, indicadores, etc. devem ser incorporadas para determinar a confiabilidade do breakout, ao mesmo tempo em que implementam stop loss/take profit para controlar riscos, a fim de maximizar a utilidade da estratégia.
A estratégia FiboBuLL Wave fornece uma estrutura básica para projetar negociações baseadas na ação de preços.
/*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')