Estratégia de ruptura de Bollinger

Autora:ChaoZhang, Data: 2023-11-13 10:19:43
Tags:

img

Resumo

Esta é uma estratégia de breakout baseada no indicador Bollinger Bands. Utiliza as bandas superior e inferior de Bollinger Bands para gerar sinais de breakout para entrada e saída. Esta estratégia também incorpora trailing stop loss e mecanismo de pirâmide para alcançar maior retorno em mercados de tendência.

Estratégia lógica

A estratégia calcula primeiro a faixa média, a faixa superior e a faixa inferior das Bandas de Bollinger. A faixa média é a média móvel do preço, enquanto as bandas superior e inferior são a faixa média +/- um desvio padrão.

Quando o preço quebra acima da faixa inferior, um sinal longo é gerado. Quando o preço quebra abaixo da faixa superior, um sinal curto é gerado. Isso indica que o preço está saindo da faixa de Bollinger Bands e pode entrar em um movimento de tendência.

Além disso, a estratégia verifica o rompimento do corpo. Se o fechamento for maior do que o aberto e o corpo penetrar na faixa média por uma certa porcentagem, ele irá nivelar a posição. Se o fechamento for menor do que o aberto e o corpo penetrar na faixa média por uma certa porcentagem, ele também irá nivelar a posição. Isso evita perdas por falsos rompimentos.

Após entrar em posições, a estratégia pode seguir o stop loss e a pirâmide.

Análise das vantagens

As vantagens desta estratégia são as seguintes:

  1. Utilize Bandas de Bollinger para determinar a direção da tendência e capturar breakouts.

  2. Verifique o corpo e a faixa média para determinar a validade da fuga, evitando perdas por falsas fugas.

  3. Use o stop loss para bloquear os lucros e controlar o risco.

  4. Use a pirâmide para obter maiores retornos em movimentos de tendência.

  5. Uma lógica clara e fácil de entender.

Análise de riscos

Os riscos desta estratégia incluem:

  1. Os breakouts de Bollinger Bands não podem evitar completamente os falsos breakouts, podem ocorrer algumas perdas.

  2. A colocação incorreta de um stop loss pode causar um stop out prematuro ou não limitar as perdas.

  3. Tempos e tamanhos de pirâmide excessivos podem levar a perdas amplificadas.

  4. A falha em parar a tempo quando a tendência se inverte pode levar a grandes quedas.

  5. A otimização insuficiente dos parâmetros pode conduzir a um baixo desempenho.

  6. Requer validação em diferentes mercados.

Orientações de otimização

A estratégia pode ser melhorada pelos seguintes aspectos:

  1. Teste e otimize os parâmetros das Bandas de Bollinger para encontrar melhores combinações.

  2. Teste diferentes estratégias de stop loss e otimize a colocação de stop loss.

  3. Teste e encontre os tempos e tamanhos ideais de pirâmide.

  4. Adicione o filtro de tendência para evitar pirâmides contra a tendência.

  5. Otimize a lógica de fuga do corpo para reduzir as falsas fugas.

  6. Adicionar ordens condicionais para utilizar diferentes conjuntos de parâmetros com base nas condições do mercado.

  7. Realizar mais backtests em diferentes produtos e prazos para melhorar a robustez.

  8. Utilize o aprendizado de máquina para otimizar automaticamente os parâmetros.

Conclusão

Em resumo, esta estratégia utiliza Bandas de Bollinger para determinar a direção da tendência e capturar breakouts, com stop loss adicionais, piramidagem e outras funções para alcançar bons resultados.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bollinger Strategy v1.1", shorttitle = "Bollinger str 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(2.0, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

showbands = input(true, defval = true, title = "Show Bollinger Bands")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body
body = abs(close - open)
abody = ema(body, 30)

//Signals
up = close <= lower
dn = close >= upper
exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open) and body > abody / 2

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
    
if time > timestamp(toyear, tomonth, today, 00, 00) or exit
    strategy.close_all()

Mais.