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)
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
Selecione um template para visualizar todos as colunas tratadas pelo dataset com informação de tipo e descrição. Veja abaixo o template COTAHIST.
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)
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')
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))
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)
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.