QuantBrasil

Como Calcular as Bandas de Bollinger em Python

Helio Quintanilha Jr.
Por Helio Quintanilha Jr.
12 março, 2021
Compartilhar:

VEJA TAMBÉM NO YOUTUBE:

Hoje vamos dar início a uma nova série onde aprenderemos sobre as Bandas de Bollinger, bastante utiliza por traders e responsável por diversos indicadores famosos.

Criadas por John A. Bollinger nos anos 80, essas chamadas "bandas" compõe uma ferramenta metódica para tomadas de decisão e são muito importantes na análise técnica. Com elas, podemos identificar pontos de sobrecompra ou sobrevenda e portanto possíveis momentos de correção ou repique.

Nesse primeiro post da série, vamos aprender a programar esse indicador e a interpretá-lo de forma mais geral. Nos próximos, focaremos em setups derivados do indicador, como Fechou Fora Fechou Dentro (FFFD) e Saudade de casa.

Entendendo as Bandas de Bollinger

As Bandas de Bollinger podem ser entendidas como bandas de volatilidade que se encontram acima e abaixo de uma média móvel.

Lembre-se que a volatilidade de um ativo pode ser entendida como a intensidade das suas oscilações de preço. De forma mais técnica, entendemos a volatilidade como o desvio padrão dos preços de um ativo, considerando que tais variações pertencem a uma distribuição normal. Quanto maior essas variações, maior a volatilidade.

Essas bandas aumentam ou diminuem de acordo com mudanças na volatilidade do ativo. Quando as bandas aumentam o espaçamento entre si, significa que houve um aumento da volatilidade. Por outro lado, quando a volatilidade diminui, as bandas se estreitam. Embora bandas estreitas sugiram que um aumento de volatidade está próximo, não se pode afirmar se os preços variarão pra cima ou pra baixo.

Em geral, operações baseadas nas Bandas de Bollinger entendem que o mercado vai trabalhar dentro desse determinado range e que, se por acaso o ativo ultrapassar essas bandas, seja a superior ou inferior, existe uma tendência de retorno à média.

Calculando as Bandas de Bollinger

As Bandas de Bollinger consistem em três partes: banda do meio, banda superior e banda inferior. Elas podem ser calculadas em quatro simples passos e são facilmente adaptadas de acordo com a necessidade.

banda do meio corresponde a uma média móvel simples baseada em \(N\) períodos (normalmente, \(N = 20\)). Com isso, a banda superior pode ser definida como a soma da média móvel (banda do meio) com \(k\) vezes o desvio padrão dos preços do ativo (normalmente, \(k = 2\)). Analogamente, a banda inferior é calculada com a subtração desse desvio padrão.

Matemáticamente:

\(\textbf{Banda do meio} = {M_N}\)

\(\textbf{Banda superior} = ({M_N} + k*\sigma)\)

\(\textbf{Banda inferior} = ({M_N} - k*\sigma)\)

Onde \(M_N\) é a média móvel simples de \(N\) períodos, \(\sigma\) é o desvio padrão dos preços e \(k\) é o fator de deslocamento das bandas.

É importante observar que quando se modifica o número de períodos \(N\), o fator \(k\) também deve ser ajustado. Bollinger recomenda que para \(N = 10\), um fator \(k = 1.9\) deve ser utilizado enquanto que para \(N = 50\), um fator \(k = 2.1\) seria a melhor escolha.

Mãos à obra: importando as bilibiotecas

Agora que já entendemos o que são as Bandas de Bollinger, vamos calculá-las utilizando Python. O primeiro passo é importar as bibliotecas de interesse.

# %%capture means we suppress the output
%%capture

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
!pip install yfinance
import yfinance as yf

Download do dataset

As Bandas de Bollinger são bastante utilizadas também em índices. Por isso, vamos basear esse exemplo baixando todos os preços de fechamento do índice Bovespa em 2020.

data = yf.download('^BVSP', start = '2020-01-01', end = '2020-12-31').copy()[["Adj Close"]]
data

[*********************100%***********************] 1 of 1 completed

Adj Close
Date
2020-01-02118573.0
2020-01-03117707.0
2020-01-06116878.0
2020-01-07116662.0
2020-01-08116247.0
......
2020-12-22116348.0
2020-12-23117857.0
2020-12-28119051.0
2020-12-29119475.0
2020-12-30119306.0

247 rows × 1 columns

Calculando as Bandas de Bollinger

Podemos calcular as Bandas de Bollinger através dos seguintes passos:

  1. Primeiramente calculamos o desvio padrão, que será baseado no mesmo período de tempo da média móvel \(N\).
  2. Depois, criamos a banda do meio, que corresponde a uma média móvel simples.
  3. Com essas duas novas colunas calculadas, calculamos a banda superior e inferior aplicando a fórmula descrita acima.
N = 20 # Moving Average periods 
k = 2  # Factor to shift the bands

data['Standard Deviation'] = data['Adj Close'].rolling(N).std()
data['Middle Band'] = data['Adj Close'].rolling(N).mean()
data['Upper Band'] = data['Middle Band'] + data['Standard Deviation'] * k
data['Lower Band'] = data['Middle Band'] - data['Standard Deviation'] * k

data
Adj CloseStandard DeviationMiddle BandUpper BandLower Band
Date
2020-01-02118573.0NaNNaNNaNNaN
2020-01-03117707.0NaNNaNNaNNaN
2020-01-06116878.0NaNNaNNaNNaN
2020-01-07116662.0NaNNaNNaNNaN
2020-01-08116247.0NaNNaNNaNNaN
..................
2020-12-22116348.02771.993034113853.7119397.686067108309.713933
2020-12-23117857.02764.385873114239.9119768.671745108711.128255
2020-12-28119051.02794.213229114681.1120269.526458109092.673542
2020-12-29119475.02814.491109115126.1120755.082217109497.117783
2020-12-30119306.02550.921196115647.0120748.842392110545.157608

247 rows × 5 columns

Plotando as bandas

As quatro novas colunas podem ser facilmente plotadas para melhor visualização das bandas:

plt.title("Ibovespa 2020")

data['Adj Close'].plot(x="Major", y="Ibovespa")
data['Upper Band'].plot(x="Major", y="", linewidth=0.5)
data['Lower Band'].plot(x="Major", y="", linewidth=0.5, color="#033660")
data['Middle Band'].plot(x="Major", y="", linewidth=0.5, color="#033660", linestyle="dashed")
<matplotlib.axes._subplots.AxesSubplot at 0x7fb2fc707090>

Na figura acima, a linha verde corresponde ao IBOV, a linha pontilhada corresponde à banda central, e as linhas azuis são as bandas superior e inferior.

Nesse exemplo, podemos ver claramente que no período escolhido as bandas tanto se estreitaram (diminuiu o espaçamento entre as linhas azuis), quanto se alargaram (aumentou o espaçamento entre as linhas azuis).

Observe como no período onde estourou a pandemia (final de Fevereiro até final de Maio), a bolsa apresentou um momento de grande volatilidade, gerando um significativo alargamento das bandas.

Por outro lado, entre Agosto e Outubro os preços respeitaram uma consolidação, o que significa que variaram dentro de um range pequeno. Esse momento apresentou baixa volatilidade (variações bem comportadas de preço), o que por sua vez gerou bandas estreitas.

De forma geral, repare como os preços tendem a voltar para dentro das bandas. Essa regressão à média vai ser a base da maioria dos setups de volatilidade que exploraremos mais pra frente.

Conclusão

Nesse primeiro post da série sobre as Bandas de Bollinger, aprendemos a sua origem e como calculá-las de uma maneira simples usando Python. Analisamos o comportamento das bandas do IBOV durante o ano de 2020, aumentando ou diminuindo o espaçamento entre elas conforme a volatilidade. Além disso, também observamos uma forte tendência de retorno a banda do meio (média móvel).

Nos próximos posts, vamos analisar individualmente cada um dos mais importantes setups provenientes das Bandas de Bollinger e aprender a realizar seus backtests. Fiquem ligados e não se esqueçam de se increver no grupo do Telegram ou na nossa newsletter para não perder nenhum dos futuros posts da QuantBrasil!

Um abraço e até a próxima!