Estratégia de onda FiboBuLL baseada na ruptura das bandas de Bollinger

Autora:ChaoZhang, Data: 2023-12-01 14:11:56
Tags:

img

Resumo

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.

Estratégia lógica

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.

Vantagens

A estratégia FiboBuLL Wave tem algumas vantagens:

  1. Lógica simples baseada na fuga do BB, fácil de entender
  2. A sensibilidade de ruptura pode ser controlada ajustando os parâmetros
  3. As faixas BB visualizam a flutuação e a tendência dos preços
  4. Pode combinar com outros indicadores, melhorar a precisão
  5. Aplicável a múltiplos prazos

Riscos

Há também alguns riscos a notar para a estratégia FiboBuLL Wave:

  1. Propensos a sinais falsos, dependendo exclusivamente da fuga do BB
  2. Incapaz de determinar o impulso e a duração após a fuga
  3. Nenhuma regra de saída para reversão
  4. Risco elevado sem stop loss

As otimizações podem ser feitas nos seguintes aspectos:

  1. Adicionar filtros usando outros indicadores para evitar sinais falsos
  2. Otimizar parâmetros com base em dados históricos
  3. Configurar o stop loss para limitar a perda máxima
  4. Considere adicionar fatores de reversão para determinar a persistência

Oportunidades de melhoria

As principais direcções de otimização para a estratégia FiboBuLL Wave:

  1. Adicionar indicadores de volume, por exemplo, linha A/D para evitar uma quebra fraca
  2. Combinar indicadores de sobrecompra/supervenda, por exemplo, RSI, para melhorar a precisão
  3. Otimizar parâmetros como o multiplicador de período e desvio com base nos resultados do backtest
  4. Configure stop loss e take profit para controlar o risco e bloquear os lucros
  5. Considere filtros de tendência e inversão para determinar a persistência direcional
  6. Ensaiar parâmetros ótimos em diferentes produtos e prazos

Com as melhorias acima referidas, a estabilidade e a rentabilidade da estratégia FiboBuLL Wave podem ser consideravelmente melhoradas.

Resumo

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')




















Mais.