Como Calcular as Bandas de Bollinger em Python

Por Helio Quintanilha Jr
Em 12/03/2021

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.

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

Matemáticamente:

Banda do meio=MN\textbf{Banda do meio} = {M_N}

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

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

Onde MNM_N é a média móvel simples de NN períodos, σ\sigma é o desvio padrão dos preços e kk é o fator de deslocamento das bandas.

É importante observar que quando se modifica o número de períodos NN, o fator k também deve ser ajustado. Bollinger recomenda que para N=10N = 10, um fator k=1.9k = 1.9 deve ser utilizado enquanto que para N=50N = 50, um fator k=2.1k = 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-02 118573.0
2020-01-03 117707.0
2020-01-06 116878.0
2020-01-07 116662.0
2020-01-08 116247.0
... ...
2020-12-22 116348.0
2020-12-23 117857.0
2020-12-28 119051.0
2020-12-29 119475.0
2020-12-30 119306.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 (NN).
  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 Close Standard Deviation Middle Band Upper Band Lower Band
Date
2020-01-02 118573.0 NaN NaN NaN NaN
2020-01-03 117707.0 NaN NaN NaN NaN
2020-01-06 116878.0 NaN NaN NaN NaN
2020-01-07 116662.0 NaN NaN NaN NaN
2020-01-08 116247.0 NaN NaN NaN NaN
... ... ... ... ... ...
2020-12-22 116348.0 2771.993034 113853.7 119397.686067 108309.713933
2020-12-23 117857.0 2764.385873 114239.9 119768.671745 108711.128255
2020-12-28 119051.0 2794.213229 114681.1 120269.526458 109092.673542
2020-12-29 119475.0 2814.491109 115126.1 120755.082217 109497.117783
2020-12-30 119306.0 2550.921196 115647.0 120748.842392 110545.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!