A BM&FBovespa disponibiliza arquivos de cotações históricas do mercado de ações, que incluem informações diárias de todos os contratos negociados, que são:

  • ações: mercado à vista e fracionário
  • UNITS: que são carteiras de ações de uma mesma empresa, por exemplo, a UNIT SANB11 é composta por 1 ação PN + 1 ação ON do Santander (veja mais)
  • ETFs e fundos
  • opções de ações, ETFs e índices
  • termo de ações
  • futuros

Estes arquivos podem ser baixados do site da bolsa com informações de

  • séries anuais
  • séries mensais
  • séries diárias (do ano corrente)

veja mais aqui.

O arquivo anual traz informações de diversos contratos para todos os dias do ano fechado, por exemplo, o arquivo COTAHIST_A2016.TXT traz dados de todo o ano de 2016. Eventualmente alguns ativos não apresentam informações para todas as datas, isso acontece quando na data não há negócios no ativo.

Bem, estes arquivos anuais, que contém informação diária para diversos ativos, podem ser utilizados para construir gráficos de histórico de preços, em particular os gráficos candlestick que contem informações de abertura, fechamento, máxima e mínima de ativos negociados, ou simplismente informações OHLC (short for Open, High, Low, Close). Estas informações e também o Volume podem ser obtidas no arquivo de cotações históricas. Estas informações serão extraídas do arquivo para a construção de objetos xts que serão utilizados nas funções de construção de gráficos dos pacotes quantmod e ggplot.

Então o objetivo deste exercício é carregar os dados de 2016 utilizando rbmfbovespa, preparar os dados construindo objetos xts para alguns ativos e montar os gráficos.

Primeiramente os pacotes devem ser carregados e todos os pacotes abaixo são necessários neste exercício.

library(dplyr)
library(rbmfbovespa)
library(xts)
library(quantmod)
library(tidyquant)
library(ggplot2)

O arquivo de cotações históricas para 2016 pode ser baixado daqui e carregado com a função rbmfbovespa::read_marketdata.

ch_2016 <- read_marketdata('datasets/COTAHIST_A2016.TXT', 'COTAHIST')

O arquivo COTAHIST possui múltiplas partes e a função read_marketdata retorna uma lista descrevendo as partes o seu conteúdo, que é um data.frame. A segunda parte contém as informações históricas dos ativos e é a parte que nos interessa, as demais partes em geral ajudam na validação do arquivo.

A segunda parte será filtrada pela coluna cod_negociacao que traz o ticker dos ativos. O filtro será aplicado primeiramente para obter as informações referentes a ETF BOVA11 no dataset BOVA11.x. Em seguida o data.frame BOVA11.df será construído com os nomes das colunas seguindo o padrão de nomes do pacote quantmod para representar as informações OHLC. As variáveis do COTAHIST referentes a OHLC são: preco_abertura, preco_max, preco_min, preco_ult e volume_titulos_negociados. Então o data.frame BOVA11.df é utilizado na função as.xts na criação do objeto xts BOVA11 para uso com as funções do pacote quantmod.

Para conhecer as variáveis dos datasets criados com rbmfbovespa execute o addin do RStudio rbmfbovespa View Template

Addins no RStudio

Selecione um template para visualizar todos as colunas tratadas pelo dataset com informação de tipo e descrição. Veja abaixo o template COTAHIST.

rbmfbovespa View Template

BOVA11.df <- ch_2016[[2]] %>% filter(cod_negociacao == 'BOVA11') %>%
  select(
    Date = data_referencia,
    Open = preco_abertura,
    High = preco_max,
    Low = preco_min,
    Close = preco_ult,
    Volume = volume_titulos_negociados
  )

BOVA11 <- as.xts(select(BOVA11.df, -Date), order.by = BOVA11.df$Date)

Criado o objeto de séries temporais é só passar para função quantmod::candleChart.

candleChart(BOVA11)

plot of chunk graficos_OHLC_com_rbmfbovespa_2-4

Construindo as séries temporais para a VALE5 e aplicando o tema white ao gráfico.

VALE5.df <- ch_2016[[2]] %>% filter(cod_negociacao == 'VALE5') %>%
  select(
    Date = data_referencia,
    Open = preco_abertura,
    High = preco_max,
    Low = preco_min,
    Close = preco_ult,
    Volume = volume_titulos_negociados
  )
VALE5 <- as.xts(select(VALE5.df, -Date), order.by = VALE5.df$Date)
candleChart(VALE5, theme='white')

plot of chunk graficos_OHLC_com_rbmfbovespa_2-5

O data.frame utilizado na construção do objeto de séries temporais da VALE5 pode ser utilizado com funções do pacote tidyquant para a criação de um gráfico de candlesticks utilizando o ggplot.

ggplot(BOVA11.df, aes(x = Date, y = Close)) +
  geom_candlestick(aes(open = Open, close = Close, high = High, low = Low))

plot of chunk graficos_OHLC_com_rbmfbovespa_2-6

O pacote tidyquant estende diversas funções do pacote quantmod, de forma que é possível incluir nos gráficos do ggplot medidas de análise técnica com média móvel, por exemplo.

ggplot(BOVA11.df, aes(x = Date, y = Close)) +
  geom_candlestick(aes(open = Open, close = Close, high = High, low = Low)) +
  geom_ma(ma_fun = SMA, n = 50, color = "red", linetype = 4, size = 1)

plot of chunk graficos_OHLC_com_rbmfbovespa_2-7

Estes gráficos com o ggplot são particularmente interessantes porque o ggplot vem se tornando um padrão na criação de gráficos no mundo R. Por esse motivo iniciativas como o tidyquant tem relevância, além de reforçar a construção de dados em formato tidy, reforçando boas práticas em análise de dados. Entretanto, estes gráficos no ggplot ainda precisam de uma melhora significativa no visual, mas isso é work in progress.

Bem, temos aí os gráficos de candlesticks facilmente criados com o R, gráficos estáticos e dinâmicos. O pacote rbmfbovespa ajudando no carregamento dos dados e o restante é apenas manipulação de dados.