No começo deste ano a BM&FBovespa publicou o tweet abaixo:

https://twitter.com/BMFBOVESPA/status/818518068439711744

Bem, eu achei R$ 46 bi muita grana e decidi utilizar o pacote rbmfbovespa para realizar um exercício de validação desta informação. Para quem não conhece, ETF significa Exchanged Traded Funds e são fundos de ações que são negociados em bolsa, diferentes dos fundos de ações de cotas os quais montam uma carteira de ativos e vendem cotas.

A BM&FBovespa divulga arquivos de cotações históricas, os famigerados arquivos de comprimento fixo (FWF) COTAHIST. Estes arquivos são encontrados no site da empresa na seção de séries históricas do mercado a vista. Os dados históricos podem ser baixados em:

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

Em particular os arquivos anuais são interessantes, apesar de grandes, por estarem disponíveis desde 1986. Poucas séries no Brasil são disponíveis com históricos tão longos. Para este exercício eu baixei o arquivo anual de 2016: COTAHIST_A2016.TXT. Antes de começar vamos carregar os pacotes utilizados: dplyr e rbmfbovespa.

library(dplyr)
library(rbmfbovespa)

Para ler o arquivo de cotações históricas utilizo o template COTAHIST na função read_marketdata.

ch_2016 <- read_marketdata('datasets/COTAHIST_A2016.TXT', 'COTAHIST')
ch_2016
## Part  1: Header [1 obs. of 5 variables] 
## Part  2: Cotações históricas por papel-mercado [466734 obs. of 26 variables] 
## Part  3: Trailer [1 obs. of 6 variables]

Como é possível observar acima, este dataset possui 3 partes: Header, Trailer e Cotações históricas por papel-mercado, e está última contém toda a informação de interesse com aproximadamente 500K linhas e 26 variáveis.

Tipos retornados pela função read_marketdata

A função read_marketdata retorna 2 estruturas de dados:

  • data.frame com as variáveis do dataset
  • list contendo data.frame em cada elemento para arquivos que possuam tratamentos distintos em partes diferentes dos arquivos

Vou utilizar ch_2016[[2]] na análise pois a Part 2 contém as informações de interesse. Na Part 2 encontro informações para todos os ativos negociado no segmento de ações da BM&FBovespa no ano de 2016. O exercício é para validar as informações apenas das ETFs, portanto é necessário filtrar o dataset ch_2016[[2]] para obter apenas as informações sobre ETFs. No site da bolsa eu encontrei uma listagem com todas as ETFs

http://www.bmfbovespa.com.br/pt_br/produtos/listados-a-vista-e-derivativos/renda-variavel/etf/renda-variavel/etfs-listados/

São 15 ETFs negociadas na bolsa.

O dataset ch_2016 possui 26 variáveis e para filtrar as inforações sobre ETFs eu vou utilizar os 3 filtros abaixo:

  • especificacao == 'CI' porque CI identifica todos os ativos que são fundos de investimento, como as ETFs
  • tipo_mercado == 10 que identifica o mercado à vista (ainda há o mercado fracionário, de opções, de termo, futuros e outros)
  • nome_empresa ~ ^(BB ETF|CAIXAETF|ISHARE|IT NOW) o nome da empresa representa o nome do fundo e como se observa na tabela acima estes padrões cobrem todos as possibilidades.
etfs <- ch_2016[[2]] %>% filter(especificacao == 'CI',
                                tipo_mercado == 10,
                                stringr::str_detect(nome_empresa, "^(BB ETF|CAIXAETF|ISHARE|IT NOW)"))

Para verificar se eu obtive todas as ETFs que me interessam eu vou fazer um agrupamento pelas variáveis cod_negociacao e nome_empresa e aproveitando eu vou realizar uma contagem para saber quantos dias no ano de 2016 as ETFs apresentaram informações de negociação.

etfs %>%
  group_by(cod_negociacao, nome_empresa) %>%
  summarise(Count = n()) %>%
  arrange(nome_empresa) %>%
  formattable::formattable()
cod_negociacao nome_empresa Count
BBSD11 BB ETF SP DV 238
XBOV11 CAIXAETFXBOV 239
IVVB11 ISHARE SP500 249
BOVA11 ISHARES BOVA 249
BRAX11 ISHARES BRAX 225
ECOO11 ISHARES ECOO 228
SMAL11 ISHARES SMAL 248
BOVV11 IT NOW IBOV 64
DIVO11 IT NOW IDIV 249
FIND11 IT NOW IFNC 223
GOVE11 IT NOW IGCT 242
MATB11 IT NOW IMAT 153
ISUS11 IT NOW ISE 246
PIBB11 IT NOW PIBB 249
SPXI11 IT NOW SPXI 245

O dataset etfs possui todas as ETFs negociadas na bolsa, agora vou fazer uma agregação em todo o dataset somando as variáveis volume_titulos_negociados e qtd_negocios para verificar os dados publicados no tweet.

etfs %>%
  summarise(Volume = sum(volume_titulos_negociados), Negocios = sum(qtd_negocios)) %>%
  formattable::formattable(list(Volume = formattable::accounting, Negocios = formattable::accounting))
Volume Negocios
46,458,279,244.30 2,864,856.00

Como é possível observar, preciso até a última casa! Podemos ainda fazer o mesmo cálculo agregando novamente pelas variáveis cod_negociacao e nome_empresa para descobrir os volumes negociados em cada ativo.

etfs %>%
  group_by(cod_negociacao, nome_empresa) %>%
  summarise(Volume = sum(volume_titulos_negociados), Negocios = sum(qtd_negocios)) %>%
  arrange(desc(Volume)) %>%
  formattable::formattable(list(Volume = formattable::accounting, Negocios = formattable::accounting))
cod_negociacao nome_empresa Volume Negocios
BOVA11 ISHARES BOVA 40,960,623,887.70 2,750,747.00
PIBB11 IT NOW PIBB 3,334,920,436.20 59,653.00
IVVB11 ISHARE SP500 865,491,458.00 15,002.00
BOVV11 IT NOW IBOV 381,199,179.40 452.00
XBOV11 CAIXAETFXBOV 350,015,104.90 8,540.00
SPXI11 IT NOW SPXI 266,412,365.00 13,447.00
SMAL11 ISHARES SMAL 131,108,309.40 4,428.00
ECOO11 ISHARES ECOO 50,070,769.00 1,147.00
DIVO11 IT NOW IDIV 35,010,537.50 4,588.00
FIND11 IT NOW IFNC 28,748,255.70 1,682.00
ISUS11 IT NOW ISE 16,991,882.90 2,149.00
BRAX11 ISHARES BRAX 13,296,683.40 824.00
MATB11 IT NOW IMAT 8,606,861.20 524.00
GOVE11 IT NOW IGCT 8,202,764.30 868.00
BBSD11 BB ETF SP DV 7,580,749.70 805.00

O BOVA11 disparado na frente com o maior volume e quantidade de negócios. Até o sexto ETF, todos representam índices de ações conhecidos. Os ETFs BOVA11, BOVV11, XBOV11 tem o IBOVESPA como índice de referência, já os IVVB11 e SPXI11 tem o SP500 e o PIBB11 o IBrX-50. Os demais não estão diretamente relacionados a nenhum índice e apresentam motivações distintas formando carteiras com ações que pagam dividendos, ações de empresas sustentáveis, empresas do governo e por aí vai.