A CVM disponibiliza diversas bases de dados de fundos de investimento no ‘Portal Dados Abertos’ que pode ser acessado clicando aqui. O objetivo das funções do pacote dadosCVM é possibilitar o acesso intuitivo e direto aos dados lá contidos através do R (R Core Team (2020)), os quais muitas vezes estão distribuídos em dezenas de arquivos distintos.
O portal de dados da CVM é muito bem organizado e para cada base de dados há um arquivo ‘meta’ descrevendo as variáveis, como você pode conferir nesse caso.
O pacote atualmente está em desenvolvimento e pode ser acessado no GitHub através do site https://github.com/lucasan93/dadosCVM. Nesse link você poderá acompanhar quais funções já foram desenvolvidas, quais estão em desenvolvimento, verificar exemplos e protocolar issues.
Você também pode entrar em contato comigo para sugestões, comentários e dúvidas através do e-mail lucas.avelleda@gmail.com.
O Portal de Dados da CVM está em constante evolução como resultado do Plano de Dados Abertos (PDA) iniciado em 2016, o qual ‘visa, entre outros objetivos, aprimorar a cultura de transparência pública, franqueado ao cidadão o acesso, de forma aberta, aos dados produzidos ou acumulados pela Administração Pública.’ O cronograma de elaboração e sustentação do PDA é extenso e envolve principalmente a abertura de novas bases de dados, o que implicará em atualizações nesse pacote para acompanhar a evolução da abertura de dados.
Ademais, as bases de dados disponíveis também passam por mudanças de nomeclaturas, pastas e formatos de arquivos. Felizmente, a CVM registra aqui as alterações futuras e passadas, facilitando o trabalho de ajustes no pacote sempre que necessário.
Lembre-se que os dados contidos no portal da CVM não estão isentos de erros. Como você pode verificar nessa notícia, é possível se deparar com ‘inconsistências, ausência de informações e divergências contábeis.’
A versão em desenvolvimento do pacote dadosCVM pode ser instalada via GitHub através das seguintes linhas de código (caso não possua o pacote devtools instalado, execute a primeira linha).
# install.packages("devtools")
devtools::install_github("lucasan93/dadosCVM")
A função cad_fi() obtem o arquivo mais recente dos dados cadastrais dos fundos registrados na CVM. A página em que os dados estão armazenados pode ser acessada clicando aqui. A base de dados possui dezenas de informações de todos os fundos (estejam eles em funcionamento ou não). Atualmente há mais de 60.000 observações no arquivo que é frequentemente (quase que diariamente) atualizado pela CVM.
No exemplo abaixo são filtrados apenas os fundos que estão em funcionamento, selecionados os 10 maiores fundos de acordo com o patrimônio líquido e gera-se uma tabela com algumas das mais de 35 colunas disponíveis na base de dados. Nesse exemplo são utilizados os pacotes dadosCVM (Avelleda (2022)), dplyr (Wickham et al. (2021)) e kableExtra (Zhu (2021)).
library(dadosCVM)
library(dplyr)
library(kableExtra)
cad_fi() %>%
filter(situacao == 'EM FUNCIONAMENTO NORMAL') %>%
select(cnpj,
classe,
tipo,
inicio_atv,
pl_data,
pl) %>%
arrange(desc(pl)) %>%
slice_head(n = 10) %>%
mutate(pl = format(pl, big.mark = ',')) %>%
kable(align = c(rep('l', 5), 'r')) %>%
kable_styling(latex_options = 'striped')
| cnpj | classe | tipo | inicio_atv | pl_data | pl |
|---|---|---|---|---|---|
| 01.608.573/0001-65 | Fundo de Renda Fixa | FI | 1997-01-02 | 2022-03-24 | 157,940,967,444 |
| 27.146.328/0001-77 | Fundo de Renda Fixa | FI | 2017-05-03 | 2022-03-24 | 137,073,313,624 |
| 07.593.972/0001-86 | Fundo de Renda Fixa | FI | 2005-09-21 | 2022-03-24 | 122,342,877,809 |
| 22.985.157/0001-56 | FIP Multi | FIP | 2015-09-01 | 2021-12-31 | 107,568,311,434 |
| 01.597.187/0001-15 | Fundo de Renda Fixa | FI | 1996-12-30 | 2022-03-24 | 95,992,293,229 |
| 00.822.055/0001-87 | Fundo de Renda Fixa | FI | 1995-10-02 | 2022-03-24 | 95,034,051,888 |
| 42.592.302/0001-46 | Fundo de Renda Fixa | FI | 2021-09-30 | 2022-03-24 | 72,408,926,082 |
| 42.592.315/0001-15 | Fundo de Renda Fixa | FI | 2021-09-30 | 2022-03-24 | 72,403,897,072 |
| 04.288.966/0001-27 | Fundo de Renda Fixa | FI | 2002-07-15 | 2022-03-24 | 57,365,529,639 |
| 03.737.219/0001-66 | Fundo de Renda Fixa | FI | 2005-08-24 | 2022-03-24 | 55,216,849,867 |
Já na tabela abaixo podemos conferir os gestores e administradores dos fundos apresentados acima:
cad_fi() %>%
filter(situacao == 'EM FUNCIONAMENTO NORMAL') %>%
arrange(desc(pl)) %>%
select(cnpj,
gestor,
adm) %>%
slice_head(n = 10) %>%
kable(align = c(rep('l', 3))) %>%
kable_styling(latex_options = 'striped', font_size = 9)
| cnpj | gestor | adm |
|---|---|---|
| 01.608.573/0001-65 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 27.146.328/0001-77 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 07.593.972/0001-86 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 22.985.157/0001-56 | BRL TRUST INVESTIMENTOS LTDA. | BRL TRUST INVESTIMENTOS LTDA. |
| 01.597.187/0001-15 | ITAU UNIBANCO ASSET MANAGEMENT LTDA. | ITAU UNIBANCO S.A. |
| 00.822.055/0001-87 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 42.592.302/0001-46 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 42.592.315/0001-15 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 04.288.966/0001-27 | BB GESTAO DE RECURSOS DTVM S.A | BB GESTAO DE RECURSOS DTVM S.A |
| 03.737.219/0001-66 | CAIXA DISTRIBUIDORA DE TÍTULOS E VALORES MOBILIÁRIOS S.A. | CAIXA ECONOMICA FEDERAL |
A CVM disponibiliza (aqui) bases de dados contendo informações diárias dos fundos de investimento. Para datas a partir de 01/01/2021 os dados diários estão condidos em arquivos .csv para cada mês, enquanto no período entre 01/01/2005 e 31/12/2016 são por sua vez organizados em bases .csv mensais dentro de arquivos .zip para cada ano. Os arquivos são deveras volumosos uma vez que possuem as informações diárias de todos os fundos, portanto pesquisas que envolvam grandes períodos temporais podem ser custosas em termos de tempo. Caso você necessite frequentemente dos dados sugere-se que armazene uma única vez todos os arquivos históricos, transformando-os em uma única base de dados que pode ser atualizada com novas observações de acordo com sua necessidade. Contudo, note que até mesmo os arquivos mais antigos são atualizados com frequência pela CVM, portanto seja cuidadoso ao implementar essa sugestão.
A função dados_diarios() que executa a obtenção dos dados dários requer três argumentos: um vetor de CNPJs (cnpj) dos fundos que se deseja analisar, a data de início (start) e a data de fim (end) do período de interesse.
No exemplo abaixo são extraídos os CNPJs dos fundos abordados no período anterior, obtidos os dados históricos desde 2005 (ano mais antigo disponibilizado) e elaborado um gráfico do patrimônio líquido, em BRL, dos fundos.
Além do PL, as informações de número de cotistas, valor da cota, resgates, captações e valor total da carteira também estão na base obtida através da função dados_diarios(). Nesse exemplo são utilizados os pacotes dadosCVM (Avelleda (2022)), dplyr (Wickham et al. (2021)), ggplot2 (Wickham (2016)) e scales (Wickham and Seidel (2020)).
library(dadosCVM)
library(dplyr)
library(ggplot2)
library(scales)
cnpjs <- cad_fi() %>%
filter(situacao == 'EM FUNCIONAMENTO NORMAL') %>%
arrange(desc(pl)) %>%
slice_head(n = 10) %>%
pull(cnpj)
dados_diarios(cnpj = cnpjs,
start = as.Date('2005-01-01'),
end = as.Date('2022-03-22')) %>%
select(data, cnpj, pl) %>%
ggplot() +
aes(x = data, y = pl, color = cnpj) +
geom_line() +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Equity (BRL)') +
theme_minimal()
## [1] "Obtaining data between 2021-01-01 and 2022-03-22"
## [1] "Obtaining data between 2005-01-01 and 2022-03-22"
Atenção: Você notará que há apenas 9 fundos plotados no gráfico: ocorre que a base de dados diários da CVM disponibiliza informações apenas de fundos do tipo ‘FI.’
Ademais, caso você saiba o nome de um fundo, mas não seu CNPJ, pesquise-o na base de dados obtida via a função cad_fi() ou através do portal de consulta a fundos da CVM clicando aqui. O mesmo procedimento pode ser realizado para consultar a data de início do fundo (argumento start da função).
Para os scripts dos exemplos de FIDCs serão utilizados os pacotes dadosCVM (Avelleda (2022)), kableExtra, (Zhu (2021)), dplyr (Wickham et al. (2021)), janitor (Firke (2021)), scales (Wickham and Seidel (2020)), stringr (Wickham (2019)) e ggplot2 (Wickham (2016)).
A CVM disponibiliza 16 bases mensais de dados de FIDCS nessa página. O pacote dadosCVM possui uma base de dados (tabs_fidc) que informa o conteúdo de cada uma dessas bases, conforme demonstra o script abaixo:
tabs_fidcs %>%
kable(align = c('l', 'l')) %>%
kable_styling(latex_options = 'striped')
| tabela | conteudo |
|---|---|
| I_TODOS | informacoes cadastrais dos fundos e ativos |
| II | classificacoes da carteira |
| III | passivos |
| IV | patrimonio liquido |
| V | direitos creditorios com aquisicao substancial dos riscos e beneficios classificados por prazo de vencimento inadimplencia e pagamentos antecipados |
| VI | direitos creditorios sem aquisicao substancial dos riscos e beneficios classificados por prazo de vencimento inadimplencia e pagamentos antecipados |
| VII | aquisicoes alienacoes substituicoes e recompras |
| IX | taxas de desconto e de juros das compras e vendas |
| X_1 | informacoes sobre cotistas por classe e serie |
| X_1_1 | classificacoes dos cotistas |
| X_2 | informacoes sobre as cotas |
| X_3 | rentabilidade |
| X_4 | transacoes de cotas do fundo |
| X_5 | ativos classificados pela liquidez |
| X_6 | taxas de desempenho real e esperada |
| X_7 | garantias |
Suponhamos que temos interesse em analisar a composição da carteira histórica dos 10 maiores FIDCs em funcionamento. Sabemos pela tabela acima que a base de dados que contém essas informações é a ‘II.’ Vamos então selecionar os CNPJs e as datas de início dos 10 maiores FIDCs através dos dados disponíveis nas informações cadastrais, acessados via a função cad_fi().
fidcs <- cad_fi() %>%
filter(situacao == 'EM FUNCIONAMENTO NORMAL',
tipo == 'FIDC') %>%
arrange(desc(pl)) %>%
slice_head(n = 10) %>%
select(cnpj,
inicio_atv)
Agora, vamos obter a série histórica dos segmentos das carteiras de cada um desses 10 fundos e plotar os gráficos separadamente. Note que a função dados_fidc() transforma as bases de dados do formato original wide para long, facilitando a elaboração de gráficos e demais análises. Ao realizar essa transformação, a função também insere as classificações de segmento e item, as quais serão doravante apresentadas.
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-01'),
table = 'II') %>%
replace(is.na(.), 0) %>%
filter(value > 0) %>%
group_by(cnpj, data, segment) %>%
summarise(value = sum(value)) %>%
ggplot() +
aes(x = data, y = value, fill = segment) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Data') +
ylab('Valor (BRL)') +
theme_minimal() +
facet_wrap(~cnpj) +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-01"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
Pode-se ademais explorar os itens que compõem cada segmento das carteiras do fundo. Antes de prosseguir com a elaboração dos gráficos, vamos explorar a base de dados disponível no pacote dadosCVM, defs_fidcs, a qual apresenta as variáveis de todas os 16 conjuntos de dados de FIDCs disponíveis na CVM. Vamos filtrar essa tabela para verificarmos apenas as definições do conjunto II de dados. É importante ressaltar que a função dados_fidcs() exclui as observações em que o item é ‘total’ para evitar contagens duplas de valores.
defs_fidcs %>%
filter(str_detect(category, '^TAB_II_')) %>%
kable(align = c('l', 'l')) %>%
kable_styling(latex_options = 'striped')
| category | table | id | base | segment | class | item |
|---|---|---|---|---|---|---|
| TAB_II_VL_CARTEIRA | II | II | carteira | carteira | total | total |
| TAB_II_A_VL_INDUST | II | II.A | carteira | industrial | industrial | industrial |
| TAB_II_B_VL_IMOBIL | II | II.B | carteira | imobiliario | imobiliario | imobiliario |
| TAB_II_C_VL_COMERC | II | II.C | carteira | comercial | total | total |
| TAB_II_C1_VL_COMERC | II | II.C.1 | carteira | comercial | comercial | comercial |
| TAB_II_C2_VL_VAREJO | II | II.C.2 | carteira | comercial | varejo | varejo |
| TAB_II_C3_VL_ARREND | II | II.C.3 | carteira | comercial | arrendamento mercantil | arrendamento mercantil |
| TAB_II_D_VL_SERV | II | II.D | carteira | servicos | total | total |
| TAB_II_D1_VL_SERV | II | II.D.1 | carteira | servicos | servicos | servicos |
| TAB_II_D2_VL_SERV_PUBLICO | II | II.D.2 | carteira | servicos | servicos publicos | servicos publicos |
| TAB_II_D3_VL_SERV_EDUC | II | II.D.3 | carteira | servicos | servicos educacionais | servicos educacionais |
| TAB_II_D4_VL_ENTRET | II | II.D.4 | carteira | servicos | servicos entretenimento | servicos entretenimento |
| TAB_II_E_VL_AGRONEG | II | II.E | carteira | agronegocio | agronegocio | agronegocio |
| TAB_II_F_VL_FINANC | II | II.F | carteira | financeiro | total | total |
| TAB_II_F1_VL_CRED_PESSOA | II | II.F.1 | carteira | financeiro | credito pessoal | credito pessoal |
| TAB_II_F2_VL_CRED_PESSOA_CONSIG | II | II.F.2 | carteira | financeiro | credito pessoal consignado | credito pessoal consignado |
| TAB_II_F3_VL_CRED_CORP | II | II.F.3 | carteira | financeiro | credito corporativo | credito corporativo |
| TAB_II_F4_VL_MIDMARKET | II | II.F.4 | carteira | financeiro | middle market | middle market |
| TAB_II_F5_VL_VEICULO | II | II.F.5 | carteira | financeiro | veiculos | veiculos |
| TAB_II_F6_VL_IMOBIL_EMPRESA | II | II.F.6 | carteira | financeiro | carteira imobiliaria empresarial | carteira imobiliaria empresarial |
| TAB_II_F7_VL_IMOBIL_RESID | II | II.F.7 | carteira | financeiro | carteira imobiliaria residencial | carteira imobiliaria residencial |
| TAB_II_F8_VL_OUTRO | II | II.F.8 | carteira | financeiro | outros | outros |
| TAB_II_G_VL_CREDITO | II | II.G | carteira | cartao de credito | cartao de credito | cartao de credito |
| TAB_II_H_VL_FACTOR | II | II.H | carteira | factoring | total | total |
| TAB_II_H1_VL_PESSOA | II | II.H.1 | carteira | factoring | pessoal | pessoal |
| TAB_II_H2_VL_CORP | II | II.H.2 | carteira | factoring | corporativo | corporativo |
| TAB_II_I_VL_SETOR_PUBLICO | II | II.I | carteira | setor publico | total | total |
| TAB_II_I1_VL_PRECAT | II | II.I.1 | carteira | setor publico | precatorios | precatorios |
| TAB_II_I2_VL_TRIBUT | II | II.I.2 | carteira | setor publico | creditos tributarios | creditos tributarios |
| TAB_II_I3_VL_ROYALTIES | II | II.I.3 | carteira | setor publico | royalties | royalties |
| TAB_II_I4_VL_OUTRO | II | II.I.4 | carteira | setor publico | outros | outros |
| TAB_II_J_VL_JUDICIAL | II | II.J | carteira | acoes judiciais | acoes judiciais | acoes judiciais |
| TAB_II_K_VL_MARCA | II | II.K | carteira | prop intelectual | prop intelectual | prop intelectual |
Vamos então avaliar de forma agregada as composições das carteiras dos fundos em maior detalhe:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-01'),
table = 'II') %>%
replace(is.na(.), 0) %>%
filter(value > 0) %>%
group_by(data, segment, item) %>%
summarise(value = sum(value)) %>%
ggplot() +
aes(x = data, y = value, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Data') +
ylab('Valor (BRL)') +
theme_minimal() +
facet_wrap(~segment) +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-01"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
Vamos começar a explorar o balanço patrimonial dos fundos. Através da tabela apresentada no exemplo 3 (tabs_fidcs) sabe-se que a base de dados que contém os ativos do balanço patrimonial do fundo é a ‘I.’ Vamos baixar os dados históricos mensais dos ativos do maior FIDC em funcionamento e plotar o gráfico de seus segmentos. Note que a função dados_fidc() transforma os dados originais da CVM de wide para long e também insere as classificações e sub-classificações em cada item. É importante mencionar que nessa base de dados, em alguns casos, os fundos inserem o CNPJ ou CPF dos cedentes dos FIDCS como parte dos ativos. Esses dados são classificados como ‘identificacao’ na coluna ‘base,’ enquanto os demais dados de ativos são classificados como ‘ativos.’ Note também que para esse conjunto de dados há três níveis de classificação: base, segment, class e item. A função também transforma os valores do item ‘provisao para reducao no valor de recuperacao’ (TAB_I2A11_VL_REDUCAO_RECUP) em negativos.
dados_fidc(cnpj = fidcs$cnpj[1],
start = fidcs$inicio_atv[1],
end = as.Date('2022-03-31'),
table = 'I') %>%
filter(base == 'ativo',
value != 0) %>%
group_by(data, segment) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = segment) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal() +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank())
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2016-04-20 and 2018-12-31"
Podemos também explorar os itens que compõem cada um dos segmentos acima:
dados_fidc(cnpj = fidcs$cnpj[1],
start = fidcs$inicio_atv[1],
end = as.Date('2022-03-31'),
table = 'I') %>%
filter(base == 'ativo', value != 0) %>%
group_by(data, segment, item) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal() +
facet_wrap(~segment, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2016-04-20 and 2018-12-31"
E por fim fazer uma tabela dos ativos no mês mais recente:
dados_fidc(cnpj = fidcs$cnpj[1],
start = as.Date('2022-02-28'),
end = as.Date('2022-02-28'),
table = 'I') %>%
filter(base == 'ativo',
value != 0) %>%
select(segment, item, value) %>%
adorn_totals('row') %>%
mutate(value = format(value, big.mark = ',')) %>%
kable(align = c('l', 'l', 'r')) %>%
kable_styling(latex_options = 'striped')
## [1] "Obtaining data between 2022-02-28 and 2022-02-28"
| segment | item | value |
|---|---|---|
| disponibilidades | disponibilidades | 1,328,115 |
| direitos creditorios com aquisicao substancial dos riscos e beneficios | creditos existentes a vencer e adimplentes | 2,019,452,767 |
| valores mobiliarios | debentures | 3,316,318,260 |
| valores mobiliarios | cotas de fundos da ICVM 555 | 33,731,070 |
| valores mobiliarios | outros | 11,947,411 |
| outros ativos | realizacao ate 12 meses | 10,110,399 |
| outros ativos | realizacao apos 12 meses | 9,388,784 |
| Total |
|
5,402,276,805 |
Os passivos do balanço patrimonial dos fundos podem ser obtidos através da Tabela III:
dados_fidc(cnpj = fidcs$cnpj[1],
start = fidcs$inicio_atv[1],
end = as.Date('2022-03-31'),
table = 'III') %>%
group_by(data, segment) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = segment) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "MM", scale = 1e-6)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal() +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2016-04-20 and 2018-12-31"
E assim como nos ativos, podemos explorar os itens que compõem os segmentos do passivo do fundo:
dados_fidc(cnpj = fidcs$cnpj[1],
start = fidcs$inicio_atv[1],
end = as.Date('2022-03-31'),
table = 'III') %>%
group_by(data, segment, item) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal() +
facet_wrap(~segment, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2016-04-20 and 2018-12-31"
E elaborar a tabela dos passivos do mês mais recente:
dados_fidc(cnpj = fidcs$cnpj[1],
start = as.Date('2022-02-28'),
end = as.Date('2022-02-28'),
table = 'III') %>%
select(segment, item, value) %>%
adorn_totals('row') %>%
mutate(value = format(value, big.mark = ',')) %>%
kable(align = c('l', 'l', 'r')) %>%
kable_styling(latex_options = 'striped')
## [1] "Obtaining data between 2022-02-28 and 2022-02-28"
| segment | item | value |
|---|---|---|
| valores a pagar | curto prazo | 30,392,967 |
| valores a pagar | longo prazo | 7,683,088 |
| posicoes em derivativos | mercado a termo posicoes vendidas | 0 |
| posicoes em derivativos | mercado de opcoes posicoes lancadas | 0 |
| posicoes em derivativos | mercado futuro ajustes negativos | 0 |
| posicoes em derivativos | diferencial de swap a pagar | 0 |
| Total |
|
38,076,055 |
E após explorar os ativos e passivos, vamos ao patrimônio líquido, cujas únicas variáveis disponíveis na base são o PL e o PL médio dos últimos 3 meses:
dados_fidc(cnpj = fidcs$cnpj[1],
start = fidcs$inicio_atv[1],
end = as.Date('2022-02-28'),
table = 'IV') %>%
ggplot() +
aes(x = data, y = value, color = item) +
geom_line() +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal()
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2016-04-20 and 2018-12-31"
A Tabela V disponibiliza os volumes financeiros direitos creditórios com aquisição substancial dos riscos e benefícios classificados por prazo de vencimento, por período de inadimplência e pelo período de pagamentos antecipados. Vamos analisar as séries históricas desses dados para os 10 maiores FIDCS:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'V') %>%
filter(value > 0) %>%
group_by(data, segment, item) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal() +
facet_wrap(~segment, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
E podemos elaborar os mesmos gráficos para os direitos creditórios sem aquisição substancial dos riscos e benefícios, cujos dados estão disponíveis na Tabela VI:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'VI') %>%
filter(value > 0) %>%
group_by(data, segment, item) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Value (BRL)') +
theme_minimal() +
facet_wrap(~segment, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
A base de dados VII possui as operações de aquisições, alienações, recompras e substituições de direitos creditórios (classificados por com e sem aquisição substancial de riscos e benefícios). Vamos primeiro explorar as quantidades históricas de aquisições, alienações, recompras e substituições dos dez maiores FIDCs:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'VII') %>%
filter(item == 'quantidade',
value != 0) %>%
group_by(data, segment, class) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = class) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = comma) +
xlab('Date') +
ylab('Quantidade') +
theme_minimal() +
facet_wrap(~segment, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
E abaixo analisamos os valores históricos de aquisições, alienações, recompras e substituições dos dez maiores FIDCs::
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'VII') %>%
filter(item == 'valor',
value != 0) %>%
group_by(data, segment, class) %>%
summarise(valor = sum(value)) %>%
ggplot() +
aes(x = data, y = valor, fill = class) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = comma) +
xlab('Date') +
ylab('Valor (BRL)') +
theme_minimal() +
facet_wrap(~segment, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
A tabela IX apresenta as taxas de juros e de desconto das aquisições de direitos creditórios, CDBs, valores mobiliários e outros ativos financeiros de renda fixa. O exemplo abaixo plota as informações disponibilizadas para os direitos creditórios com e sem aquisição substancial dos riscos e benefícios de um dos maiores FIDCs em funcionamento:
dados_fidc(cnpj = '12.428.086/0001-37',
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'IX') %>%
filter(segment == 'direitos creditorios sem aquisicao substancial dos riscos e beneficios' |
segment == 'direitos creditorios com aquisicao substancial dos riscos e beneficios',
class == 'taxa de juros dos direitos creditorios',
value > 0) %>%
ggplot() +
aes(x = data, y = value, color = item) +
geom_point() +
xlab('Date') +
ylab('Taxa de Juros') +
theme_minimal()
## Warning in dados_fidc(cnpj = "12.428.086/0001-37", start =
## min(fidcs$inicio_atv), : Data unavailable for selected start date. Setting start
## date to 2013-01-01.
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
Através da base X_1 de dados podemos obter o histórico de cotistas por classe/série, conforme demonstra o script abaixo:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'X_1') %>%
filter(value > 0) %>%
ggplot() +
aes(x = data, y = value, fill = serie) +
geom_bar(position = 'stack', stat = 'identity') +
xlab('Date') +
ylab('Quantidade') +
theme_minimal() +
facet_wrap(~cnpj, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
A base X_1_1, (disponível apenas para dados após novembro de 2019) possui as classificações dos cotistas das cotas sênior e subordinada. Abaixo estão as composição históricadas cotas sênior:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'X_1_1') %>%
filter(class == 'classe senior',
value > 0) %>%
group_by(data, cnpj, item) %>%
summarise(value = sum(value)) %>%
ggplot() +
aes(x = data, y = value, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
xlab('Date') +
ylab('Quantidade') +
theme_minimal() +
facet_wrap(~cnpj, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-11-30 and 2022-02-28"
E, a seguir, das cotas subordinadas:
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'X_1_1') %>%
filter(class == 'classe subordinada',
value > 0) %>%
group_by(data, cnpj, item) %>%
summarise(value = sum(value)) %>%
ggplot() +
aes(x = data, y = value, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
xlab('Date') +
ylab('Quantidade') +
theme_minimal() +
facet_wrap(~cnpj, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## Warning in dados_fidc(cnpj = fidcs$cnpj, start = min(fidcs$inicio_atv), : Data
## unavailable for selected start date. Setting start date to 2013-01-01.
## [1] "Obtaining data between 2019-11-30 and 2022-02-28"
Através da tabela X_2 é possível obter o valor das cotas (no exemplo abaixo, por série/classe e CNPJ)
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'X_2') %>%
filter(value > 0,
class == 'valor da cota') %>%
ggplot() +
aes(x = data, y = value, color = serie) +
geom_line() +
xlab('Date') +
ylab('Valor da Cota (BRL)') +
scale_y_continuous(label = comma) +
theme_minimal() +
facet_wrap(~cnpj, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
A tabela X_3 possui uma única variável, apresentada abaixo: a rentabilidade apurada no mês.
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'X_3') %>%
filter(value > 0) %>%
ggplot() +
aes(x = data, y = value, color = serie) +
geom_line() +
xlab('Date') +
ylab('Rentabilidade Apurada no Mês') +
scale_y_continuous(label = comma) +
theme_minimal() +
facet_wrap(~cnpj, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
Através da tabela X_4 podemos visualizar as captações, amortizações e resgates históricos. No exemplo abaixo, obtemos os dados para o maior FIDC, transformamos os valores de amortizações e resgates em negativos e elaboramos o gráfico:
dados_fidc(cnpj = fidcs$cnpj[1],
start = fidcs$inicio_atv[1],
end = as.Date('2022-02-28'),
table = 'X_4') %>%
filter(value > 0) %>%
mutate(value = case_when(operacao == 'Amortizações' |
operacao == 'Resgates no Mês' ~ - value,
TRUE ~ value)) %>%
ggplot() +
aes(x = data, y = value, fill = operacao) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(label = comma) +
xlab('Date') +
ylab('Valor (BRL)') +
theme_minimal() +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2016-04-20 and 2018-12-31"
Já a tabela X_5 disponibiliza informações sobre a liquidez de ativos do fundo. Através do código abaixo visualizam-se os ativos dos dez maiores FIDCs classificados pela liquidez que possuem esses dados.
dados_fidc(cnpj = fidcs$cnpj,
start = min(fidcs$inicio_atv),
end = as.Date('2022-02-28'),
table = 'X_5') %>%
filter(value != 0) %>%
group_by(data, cnpj, item) %>%
summarise(value = sum(value)) %>%
ggplot() +
aes(x = data, y = value, fill = item) +
geom_bar(position = 'stack', stat = 'identity') +
scale_y_continuous(labels = unit_format(unit = "Bi", scale = 1e-9)) +
xlab('Date') +
ylab('Valor (BRL)') +
theme_minimal() +
facet_wrap(~cnpj, scales = 'free_y') +
theme(legend.position = 'bottom', legend.key.size = unit(0.1, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## Warning in dados_fidc(cnpj = fidcs$cnpj, start = min(fidcs$inicio_atv), : Data
## unavailable for selected start date. Setting start date to 2013-01-01.
## [1] "Obtaining data between 2019-01-01 and 2022-02-28"
## [1] "Obtaining data between 2013-01-01 and 2018-12-31"
## `summarise()` has grouped output by 'data', 'cnpj'. You can override using the
## `.groups` argument.
A base de dados X_6 possui as taxas de desempenho real e esperada. No gráfico abaixo visualizamos ambas as taxas para cada classe de cotas de um dos maiores FIDCs em funcionamento:
dados_fidc(cnpj = fidcs$cnpj[2],
start = fidcs$inicio_atv[2],
end = as.Date('2022-02-28'),
table = 'X_6') %>%
ggplot() +
aes(x = data, y = value, color = item) +
geom_line() +
facet_wrap(~serie, scales = 'free_y') +
theme_minimal() +
xlab('Data') +
ylab('Taxa') +
theme(legend.position = 'bottom', legend.key.size = unit(0.8, 'cm'),
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2020-06-22 and 2022-02-28"
A base de dados X_7 possui informações acerca das garantias dos direitos creditórios, porém com dados disponível apenas a partir de novembro de 2019:
dados_fidc(cnpj = '17.250.006/0001-10',
start = as.Date('2019-01-01'),
end = as.Date('2022-02-28'),
table = 'X_7') %>%
ggplot() +
aes(x = data, y = value, color = item) +
geom_line() +
facet_wrap(~item, scales = 'free_y') +
theme_minimal() +
xlab('Data') +
ylab('Taxa') +
scale_y_continuous(label = comma) +
theme(legend.position = 'none',
legend.title = element_blank(), axis.text = element_text(size = 9),
strip.text.x = element_text(size = 9),
axis.title = element_text(size = 9))
## [1] "Obtaining data between 2019-11-30 and 2022-02-28"