Estratégia de ruptura das bandas de Bollinger

Autora:ChaoZhang, Data: 2023-09-19 16:06:56
Tags:

Resumo

Esta estratégia baseia-se no indicador de Bollinger Bands. Ele vai longo quando o preço quebra acima da faixa inferior e fecha a posição quando o preço toca a faixa superior.

Princípio da estratégia

  1. Calcular a banda média SMA como a média móvel simples dos preços de fechamento recentes.

  2. Calcular o desvio-padrão StdDev para refletir o intervalo de flutuação dos preços.

  3. Adicione o deslocamento superior do desvio padrão à banda média SMA para obter a banda superior.

  4. Subtrair o deslocamento inferior do desvio padrão da banda média SMA para obter a banda inferior.

  5. Vá longo quando o preço de fechamento quebra acima da faixa inferior de baixo para cima.

  6. Fechar a posição quando o preço tocar a faixa superior, uma vez que o preço é considerado anormal.

Análise das vantagens

A maior vantagem desta estratégia é a utilização das propriedades estatísticas das Bandas de Bollinger para rastrear efetivamente as flutuações anormais do mercado e capturar tendências.

  1. Bandas de Bollinger As bandas superior e inferior podem adaptar-se automaticamente à volatilidade do mercado.

  2. Os sinais de fuga são mais confiáveis para a entrada.

  3. A reversão para o meio é razoável para obter lucro.

  4. Espaço de ajuste de parâmetros para ajustar a diferentes mercados.

  5. Pode capturar tendências de médio a longo prazo e também ser utilizado a curto prazo.

Análise de riscos

Os riscos potenciais desta estratégia são principalmente:

  1. Mau desempenho das Bandas de Bollinger em mercados de intervalo, evitar entradas erradas.

  2. Os sinais de fuga podem ser falsos, precisam de julgamentos prudentes.

  3. A posição de lucro é muito idealizada, pode ser otimizada para a ação real do preço.

  4. A configuração inadequada dos parâmetros pode conduzir a um excesso de negociação ou a um excesso de conservadorismo.

  5. O período de ensaio posterior deve ser suficientemente longo para evitar a adaptação da curva.

Medidas de gestão de riscos correspondentes:

  1. Adicionar indicadores de volume de negociação aos sinais de filtragem.

  2. Otimizar parâmetros e dados de ensaio de diferentes mercados.

  3. Adicione os níveis de stop loss e de lucro.

  4. Avaliar as divergências de sinal, evitar perseguir altos e vender baixos.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Tente diferentes combinações de parâmetros de Bollinger Bands para encontrar o ideal.

  2. Adicionar MA, MACD etc para filtrar sinais de ruptura.

  3. Aplicar algoritmos de aprendizagem de máquina para otimizar parâmetros de Bollinger.

  4. Avaliar a força das rupturas e ajustar o dimensionamento da posição.

  5. Testes de retorno por períodos mais longos para testar a estabilidade.

  6. Adicionar mecanismos de stop loss para controlar o risco.

Resumo

Em resumo, a estratégia de Bandas de Bollinger é uma estratégia geral confiável de tendência. Ela pode efetivamente capturar flutuações anormais de preços. Mas também devemos notar seu desvio do preço real e otimizar constantemente os parâmetros.


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

//@version=4

strategy(title="BB training No Repainting (OTS Mode)", overlay=true)


// Strategy Rules:
// 1. Enter trade when price crosses above the lower band
// 2. Exit trade when price touches the upper band
// 

// Chart Properties
testStartYear = input(2010, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0)

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

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? #6c6f6c : na
bgcolor(testPeriodBackgroundColor, transp=97)

// User provided values
smaLength = input(title="SMA Length", type=input.integer, defval=20) // Middle band period length (moving average)
stdLength = input(title="StdDev Length", type=input.integer, defval=20) // Range to apply bands to
ubOffset = input(title="Upper Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviations above MA
lbOffset = input(title="Lower Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviation below MA

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false

smaValue = sma(close, smaLength) // Middle band
stdDev = stdev(close, stdLength)
upperBand = smaValue + stdDev * ubOffset // Top band
lowerBand = smaValue - stdDev * lbOffset // Bottom band

// Plot bands to chart
plot(series=smaValue, title="SMA", color=color.green)
plot(series=upperBand, title="UB", color=color.blue, linewidth=2)
plot(series=lowerBand, title="LB", color=color.blue, linewidth=2)

longCondition = (crossover(close, lowerBand))
closeLongCondition = (close >= upperBand)

if (longCondition and testPeriod())
    strategy.entry(id="CALL", long=true)

strategy.close(id="CALL", when=closeLongCondition)


Mais.