Estratégia de ruptura da banda de Bollinger

Autora:ChaoZhang, Data: 2023-11-07 15:08:36
Tags:

img

Resumo

Esta estratégia usa Bandas de Bollinger para medir a tendência do mercado e combina sinais de largura de banda para identificar oportunidades de negociação, visando o crescimento constante da carteira de investimentos.

Sinta-se à vontade para ajustar os parâmetros e testar esta estratégia.

Se você está satisfeito com os resultados existentes e gostaria de automatizar esta estratégia, que pode ser feita através de alertas, você precisa convertê-lo para um estudo e adicionar alertas no código.

Estratégia lógica

Esta estratégia utiliza Bandas de Bollinger e largura de banda para determinar entradas e saídas.

As bandas de Bollinger incluem banda superior, banda média e banda inferior. A banda do meio é uma média móvel simples de n períodos, por padrão n = 16. A banda superior é a banda média + k * desvio padrão, a banda inferior é a banda média - k * desvio padrão, por padrão k = 3. Quando o preço se aproxima da banda superior, indica sobreavaliação ou sobrecompra. Quando o preço se aproxima da banda inferior, indica subavaliação ou sobrevenda.

O indicador de largura de banda mostra a volatilidade do preço em relação à faixa média. É calculado por (banda superior - banda inferior) / banda média * 1000. Quando a largura de banda é inferior a 20, indica baixa volatilidade ou consolidação. Quando a largura de banda excede 50, representa volatilidade aumentada.

Esta estratégia procura oportunidades longas quando a largura de banda está entre 20-50 e o preço quebra abaixo da faixa inferior.

Análise das vantagens

As vantagens desta estratégia incluem:

  1. As bandas de Bollinger medem a direcção da tendência, reduzindo os riscos de falsas rupturas

  2. O sinal de largura de banda localiza com precisão a ação limitada ao intervalo, evitando grandes perdas de grandes oscilações

  3. O backtest mostra quase 80% de rentabilidade em 1 ano, uma relação risco/recompensa extremamente elevada

  4. A utilização máxima inferior a 5%, controla eficazmente o risco e mantém um crescimento constante da carteira

  5. Lógica simples e clara, fácil de compreender e implementar, amplamente aplicável a vários ativos

Análise de riscos

Os riscos desta estratégia incluem:

  1. Configurações de parâmetros de Bollinger pobres podem perder boas oportunidades de negociação

  2. Baixa frequência de negociação durante mercados de alta ou baixa persistentes, rendibilidade limitada

  3. Dados insuficientes de backtest, o desempenho real pode diferir do backtest

  4. O stop loss pode ser retirado durante movimentos extremos, levando a grandes perdas

  5. Os altos custos de transacção também reduzem os lucros reais

Soluções:

  1. Otimizar os parâmetros e ajustar o período de Bollinger com base no mercado

  2. Introduzir indicadores adicionais para lidar com condições anormais de mercado

  3. Recolher dados suficientes e realizar backtests em vários mercados para verificar a estabilidade

  4. Ajustar o stop loss adequadamente para evitar grandes perdas de movimentos extremos

  5. Selecionar plataformas de negociação com baixas comissões para reduzir os custos de transação

Orientações de otimização

Esta estratégia pode ser melhorada nos seguintes aspectos:

  1. Adicionar confirmação de volume para evitar falhas

  2. Combinar com indicadores de tendência para identificar a direção da tendência

  3. Usar o aprendizado de máquina para ajustar automaticamente os parâmetros e adaptar-se ao mercado

  4. Adicionar filtro de correlação para evitar a negociação de ativos não correlacionados

  5. Otimizar a tomada de lucro/parada de perda para mais ganhos durante as tendências de alta

  6. Introduzir mais filtros de condição para aumentar a taxa de vitória

  7. Teste combinações de quadros de tempo múltiplos para beneficiar de ciclos múltiplos

  8. Construir uma carteira indexada para expandir a exposição

  9. Use o aprendizado de máquina para gerar e validar automaticamente novas estratégias

Conclusão

No geral, esta estratégia de ruptura de Bollinger Band foi bem testada e pode produzir retornos constantes em mercados de faixa. A lógica central é simples e clara, fácil de entender e aplicar. Mas são necessárias melhorias adicionais na otimização de parâmetros, controle de risco e gerenciamento de carteira para lucros estáveis em mercados complexos. Esta é uma estratégia básica de acompanhamento de tendências e pode ser aprimorada através da introdução de mais indicadores técnicos e mecanismos de gerenciamento de risco, ou combinada com aprendizado de máquina para automação.


/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Bollinger Bands BAT/USDT 30min", overlay=true )

/// Indicators
///Bollinger Bands
source = close
length = input(16, minval=1)
mult = input(3, step=0.1, minval=0.001, maxval=50)
basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

plot(basis, color=color.red)
p1 = plot(upper, color=color.blue)
p2 = plot(lower, color=color.blue)
fill(p1, p2)

//Bollinger bands width
bbw = (upper-lower)/basis*1000
//plot(bbw, color=color.blue)

upper_bbw_input = input(title="BBW Upper Threshold", step=1, minval=0, defval=50)
lower_bbw_input = input(title="BBW Lower Threshold", step=1, minval=0, defval=20)


// Backtesting Period
testStartYear = input(2019, "Backtest Start Year")
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => true

// Take Profit
tp_inp = input(8, title='Take Profit %', step=0.1)/100
take_level = strategy.position_avg_price * (1 + tp_inp)

//Entry Strategy
entry_long = crossover(source, lower) and (bbw < upper_bbw_input) and (bbw > lower_bbw_input)
exit_long = cross(high,upper) or close < lower

if testPeriod()

    strategy.entry(id="LongBB", long=true, comment="LongBB", when=entry_long)
    strategy.exit("Take Profit Long","LongBB",limit=take_level)
    strategy.close(id="LongBB", when=exit_long )



Mais.