Estratégia de consolidação das bandas de Bollinger

Autora:ChaoZhang, Data: 2024-02-22 13:43:14
Tags:

img

Resumo

A estratégia de consolidação das Bandas de Bollinger é uma estratégia inovadora que identifica fases de consolidação de baixa volatilidade usando as Bandas de Bollinger. Quando o mercado entra em um período de variação, as Bandas de Bollinger convergirão, sinalizando uma oportunidade de entrar no mercado.

Estratégia lógica

A estratégia baseia-se principalmente em Bandas de Bollinger para detectar quando os preços entram em uma fase de consolidação de baixa volatilidade. A faixa média das Bandas de Bollinger é uma média móvel dos preços de fechamento. As bandas superior e inferior são compensadas por dois desvios padrão acima e abaixo da faixa média. Quando a volatilidade diminui, a distância entre as bandas superior e inferior diminui visivelmente. Primeiro verificamos se o valor atual do ATR é menor do que o desvio padrão entre as Bandas de Bollinger para confirmar preliminarmente a convergência.

Para provar ainda mais a diminuição da volatilidade, verificamos se a média móvel dos valores ATR tem uma tendência de queda. A diminuição da ATR média também corrobora do lado que a volatilidade está diminuindo. Quando ambas as condições são atendidas simultaneamente, determinamos que as Bandas de Bollinger mostraram uma convergência significativa, o que é uma excelente oportunidade de compra.

Após a compra, habilitamos uma estratégia de stop loss móvel com uma distância de stop loss de duas vezes o valor ATR. Isso controla efetivamente as perdas.

Análise das vantagens

A maior vantagem desta estratégia é que pode determinar com precisão quando o mercado entra em uma fase de consolidação de baixa volatilidade e identificar a melhor oportunidade de compra.

Além disso, a estratégia também usa um stop loss móvel para controlar ativamente os riscos. Isso maximiza a redução de perdas mesmo quando o sentimento do mercado é desfavorável.

Análise de riscos

O principal risco da estratégia é que o indicador Bollinger Bands não pode determinar com precisão as mudanças na volatilidade dos preços 100% do tempo. Quando as Bollinger Bands julgam erroneamente que a volatilidade diminuiu, nosso momento de entrada pode ser desfavorável. Neste ponto, o stop loss em movimento desempenha um papel importante e pode sair do comércio o mais cedo possível.

Além disso, a definição de vários parâmetros na estratégia também afetará os resultados.

Orientações de otimização

Podemos considerar a adição de outros indicadores para confirmar os sinais de mudança nos indicadores de tendência quando as Bandas de Bollinger convergem. Por exemplo, quando as Bandas de Bollinger convergem, também exigimos que a diferença MACD tenha se transformado de positiva para negativa, ou o RSI tenha se retirado da zona de sobrecompra. Isso pode melhorar ainda mais a precisão dos sinais de compra.

Outra direção é testar o impacto de diferentes configurações de parâmetros nos resultados, como os períodos de Bollinger Bands, ATR e o multiplicador do stop loss móvel.

Conclusão

A estratégia de consolidação de Bollinger Bands utiliza Bollinger Bands para determinar o momento da diminuição da volatilidade dos preços e usa um stop loss móvel para controlar efetivamente os riscos. É uma estratégia de ruptura relativamente estável a longo prazo.


/*backtest
start: 2023-02-15 00:00:00
end: 2024-02-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji

//@version=4
strategy("[KL] Bollinger Bands Consolidation Strategy",overlay=true,pyramiding=1)

// Timeframe {
backtest_timeframe_start = input(defval = timestamp("01 Apr 2016 13:30 +0000"), title = "Backtest Start Time", type = input.time)
USE_ENDTIME = input(false,title="Define backtest end-time (If false, will test up to most recent candle)")
backtest_timeframe_end = input(defval = timestamp("19 Apr 2021 19:30 +0000"), title = "Backtest End Time (if checked above)", type = input.time)
within_timeframe = true
// }

// Indicator: BOLL bands {
BOLL_length = 20//input(20,title="Periods to lookback for BOLL and ATR calc. (default 20)")
BOLL_src = close
BOLL_center = sma(BOLL_src, BOLL_length)
BOLL_sDEV_x2 = 2 * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_center + BOLL_sDEV_x2
BOLL_lower = BOLL_center - BOLL_sDEV_x2
plot(BOLL_center, "Basis", color=#872323, offset = 0)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = 0, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = 0, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// ATR and volatility Indicator {
ATR_x2 = atr(BOLL_length) * 2 // multiplier aligns with BOLL
avg_volat = sma(ATR_x2, BOLL_length)
//}

// Trailing stop loss {
var entry_price = float(0)
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
trail_profit_line_color = color.green
UPDATE_ATR_TSL = false
if strategy.position_size == 0 or not within_timeframe // make TSL line less visible
    trail_profit_line_color := color.black
    stop_loss_price := close - trailing_SL_buffer
else if strategy.position_size > 0
    if UPDATE_ATR_TSL and ATR_x2 < trailing_SL_buffer
        trailing_SL_buffer := ATR_x2
    stop_loss_price := max(stop_loss_price, close[1] - trailing_SL_buffer)
plot(stop_loss_price,color=trail_profit_line_color)
// }


IGNORE_BOLL_SHAPE = false//input(false,title="Ignore BOLL (vs ATR) during entry (experimental)")
IGNORE_VOLATILITY = false///input(false,title="Ignore average ATR during entry (experimental)")
// Main:
if within_timeframe
    // ENTRY:
    if (ATR_x2 > BOLL_sDEV_x2 or IGNORE_BOLL_SHAPE) and (avg_volat < avg_volat[1] or IGNORE_VOLATILITY)
        if strategy.position_size == 0
            entry_price := close
            trailing_SL_buffer := ATR_x2
            stop_loss_price := close - ATR_x2
            strategy.entry("Long",strategy.long, comment="enter")
        if strategy.position_size > 0
            strategy.entry("Long",strategy.long, comment="+")

    // EXIT:
    if strategy.position_size > 0
        if low <= stop_loss_price
            if close > entry_price
                strategy.close("Long", comment="take profit")
            else if low <= entry_price
                strategy.close("Long", comment="stop loss")
    
            if strategy.position_size == 0
                entry_price := 0
                

Mais.