Módulos do R para a Análise de Dados Financeiros

PPGE / UFSC

Marcelo S. Perlin

EA-UFRGS

2022-10-07

Objetivos da palestra

  • Apresentar as plataformas R e o RStudio para a pesquisa científica;
  • Apresentar um pequeno conjunto de pacotes voltados ao mercado financeiro local;
  • Apresentar exemplos de importação de dados de diferentes pacotes;

O que é o R

O R é uma linguagem de programação voltada para a resolução de problemas estatísticos e para a visualização gráfica de dados.

Autores: Ross Ihaka e Robert Gentleman (The University of Auckland), criada em 1993

Funcionalidade: R é sinônimo de programação voltada à análise de dados

Custo: O R é totalmente livre e disponível em vários sistemas operacionais.

Por que Escolher o R

  • Plataforma madura, estável, e continuamente suportada.
  • Aprender a linguagem do R é fácil.
  • Os pacotes do R permitem as mais diversas funcionalidades.
  • O R tem compatibilidade com diferentes linguagens e sistemas operacionais.
  • O R é totalmente gratuito!

Módulos do R

  • Renda Variável – ações, FIIs e derivativos
  • Renda Fixa – Títulos públicos, curva de juros
  • Dados Econômicos – BCB-SGS

Renda Variável (1)

  • Preços de ações, FIIs e índices

Renda Variável (2)

Renda Fixa

Dados Econômicos

Exemplos de código

  1. yfR
  2. GetTDData
  3. GetDFPData2
  4. rb3

Módulo yfR

Yahoo finance oferece ampla gama de preços ajustados de ações e íncides de ações negociadas no mundo inteiro

Cuidado com dados do Yahoo Finance

  • Ticker para o Brasil possuem final .SA: PETR4.SA
  • Preços são somente ajustados a splits!
  • Cuidado com uso de preços de ações em pesquisa científica
  • Preços de índices são confiáveis.
library(yfR)

tickers <- c('PETR3.SA', 
             'ITSA3.SA', 
             'GGBR4.SA')

first_date <- '2018-01-01'
last_date <- Sys.Date() # today

df_yf <- yf_get(tickers, 
                first_date,
                last_date)

dplyr::glimpse(df_yf)
Rows: 3,546
Columns: 11
$ ticker                 <chr> "GGBR4.SA", "GGBR4.SA", "GGBR4.SA", "GGBR4.SA",…
$ ref_date               <date> 2018-01-02, 2018-01-03, 2018-01-04, 2018-01-05…
$ price_open             <dbl> 12.55, 12.90, 13.03, 13.65, 13.43, 13.95, 13.85…
$ price_high             <dbl> 12.97, 13.35, 13.78, 13.95, 13.95, 14.27, 14.11…
$ price_low              <dbl> 12.55, 12.84, 13.03, 13.34, 13.26, 13.77, 13.63…
$ price_close            <dbl> 12.97, 12.95, 13.65, 13.48, 13.95, 14.03, 13.84…
$ volume                 <dbl> 8563500, 13132500, 27558900, 17206300, 15352200…
$ price_adjusted         <dbl> 10.30300, 10.28712, 10.84317, 10.70813, 11.0814…
$ ret_adjusted_prices    <dbl> NA, -0.001541977, 0.054053726, -0.012454195, 0.…
$ ret_closing_prices     <dbl> NA, -0.001542020, 0.054054054, -0.012454212, 0.…
$ cumret_adjusted_prices <dbl> 1.000000, 0.998458, 1.052428, 1.039321, 1.07555…
library(ggplot2)

p <- ggplot(
  df_yf,
  aes(x = ref_date,
      y = price_adjusted,
      color = ticker)) + 
  geom_line()

p

Módulo GetTDData

Dados para contratos de dívida soberana do Brasil estão disponíveis no site do Tesouro Direto website como planilhas do Excel.

Dados disponíveis

  • Tesouro Prefixado (LTN)
  • Tesouro Pós-Fixado (NTN-B Principal)
  • Tesouro Pós-Fixado com coupom (NTN-B)
  • Tesouro SELIC (LFT)
library(GetTDData)
library(ggplot2)

asset_code <- 'LTN'   # Name of asset
dl_folder <- "data/TD-files"

# download data
download.TD.data(asset.codes = asset_code,
                 dl.folder = dl_folder)

df_TD <- read.TD.files(dl.folder = dl_folder)

dplyr::glimpse(df_TD)
library(ggplot2)

df_TD <- df_TD |>
  dplyr::filter(ref.date > as.Date("2015-01-15"))

# plot data (prices)
p <- ggplot(data = df_TD, 
            aes(x = ref.date, 
                y = price.bid, 
                color = asset.code)) + 
  geom_line(size = 1) + 
  scale_x_date() + 
  labs(title = 'Preços de LTNs', 
       x = 'Datas', y = 'Preços' ) +
  theme_light()

p

library(ggplot2)

# plot data (yields)
p <- ggplot(data = df_TD, 
            aes(x = ref.date, 
                y = yield.bid, 
                color = asset.code)) + 
  geom_line(size = 1) + 
  scale_x_date() + 
  labs(title = 'Yields de LTNs', 
       x = 'Datas', y = 'Yields' ) + 
  theme_light()

p

Módulo GetDFPData2

Sistema DFP (Demonstrativo Financeiros Padronizados) da B3 oferece dados financeiros de todas empresas negociadas em bolsa

Dados disponíveis

  • DRE - Demonstrativo de Resultado (anual)
  • BP - Balanço Patrimonial (anual)
  • DFC - Demonstrativo de fluxo de caixa (anual)
library(GetDFPData2)

cache_folder <- "data/gdfpd2_cache"

df_info <- get_info_companies(cache_folder)

dplyr::glimpse(df_info)
Rows: 2,553
Columns: 47
$ CNPJ               <chr> "08.773.135/0001-00", "11.396.633/0001-87", "12.091…
$ DENOM_SOCIAL       <chr> "2W ENERGIA S.A.", "3A COMPANHIA SECURITIZADORA", "…
$ DENOM_COMERC       <chr> NA, "TRIPLO A  COMPANHIA SECURITIZADORA", NA, "521 …
$ DT_REG             <date> 2020-10-29, 2010-03-08, 2020-11-09, 1997-07-11, 19…
$ DT_CONST           <date> 2007-03-23, 2009-11-03, 2010-06-08, 1996-07-30, 19…
$ DT_CANCEL          <date> NA, 2015-12-18, NA, NA, NA, 2006-05-30, 1998-06-17…
$ MOTIVO_CANCEL      <chr> NA, "Cancelamento Voluntário - IN CVM 480/09", NA, …
$ SIT_REG            <chr> "ATIVO", "CANCELADA", "ATIVO", "ATIVO", "ATIVO", "C…
$ DT_INI_SIT         <date> 2020-10-29, 2015-12-18, 2020-11-09, 1997-07-11, 19…
$ CD_CVM             <dbl> 25224, 21954, 25291, 16330, 16284, 16349, 35, 16802…
$ SETOR_ATIV         <chr> "Construção Civil, Mat. Constr. e Decoração", "Secu…
$ TP_MERC            <chr> NA, NA, "BOLSA", NA, NA, NA, NA, NA, NA, NA, NA, NA…
$ CATEG_REG          <chr> "Categoria A", "Categoria B", "Categoria A", "Categ…
$ DT_INI_CATEG       <date> 2020-10-29, 2010-03-08, 2020-11-09, 2011-04-28, 20…
$ SIT_EMISSOR        <chr> "FASE OPERACIONAL", "FASE PRÉ-OPERACIONAL", "FASE O…
$ DT_INI_SIT_EMISSOR <date> 2020-07-16, 2010-03-08, 2020-08-31, 2015-04-30, 19…
$ CONTROLE_ACIONARIO <chr> "PRIVADO", "PRIVADO", "PRIVADO", "PRIVADO", "PRIVAD…
$ TP_ENDER           <chr> "SEDE", "SEDE", "SEDE", "SEDE", "SEDE", "SEDE", "SE…
$ LOGRADOURO         <chr> "AV. ROQUE PETRONI JUNIOR", "Avenida Erasmo Braga, …
$ COMPL              <chr> "Nº 1.089, SALA 1.101", "sala 703", "SL 1301, 1401,…
$ BAIRRO             <chr> "JARDIM DAS ACáCIAS", "Centro", "BOTAFOGO", "CENTRO…
$ MUN                <chr> "SÃO PAULO", "RIO DE JANEIRO", "RIO DE JANEIRO", "R…
$ UF                 <chr> "SP", "RJ", "RJ", "RJ", "RJ", "RJ", "RS", "RJ", "SP…
$ PAIS               <chr> NA, "BRASIL", NA, "BRASIL", NA, "BRASIL", "BRASIL",…
$ CEP                <dbl> 4707000, 20020000, 22250145, 20011901, 20020010, 22…
$ DDD_TEL            <chr> "11", "21", "21", "21", "21", "21", "51", "21", "11…
$ TEL                <dbl> 39579400, 22338867, 21455555, 25560809, 38043700, 2…
$ DDD_FAX            <chr> "11", "21", NA, "21", "21", "21", "51", "21", NA, "…
$ FAX                <dbl> 39579499, 22338867, NA, 25560809, 38043480, 2196720…
$ EMAIL              <chr> "ri@2wenergia.com.br", "dri@3asec.com.br", NA, "exi…
$ TP_RESP            <chr> "DIRETOR DE RELAÇÕES COM INVESTIDORES", "DIRETOR DE…
$ RESP               <chr> "EDUARDO URQUIZA FERNANDES PORTELADA", "FELIPE MARQ…
$ DT_INI_RESP        <date> 2022-05-10, 2011-06-16, 2020-08-13, NA, 2022-05-06…
$ LOGRADOURO_RESP    <chr> "AV. DOUTOR CHUCRI ZAIDAN 1.240", "AVENIDA ERASMO B…
$ COMPL_RESP         <chr> "SALA 2.701, 27º AN", "SALA 703", "5, SL 601", NA, …
$ BAIRRO_RESP        <chr> "VILA SÃO FRANCISCO", "CENTRO", "BOTAFOGO", NA, "CE…
$ MUN_RESP           <chr> "SÃO PAULO", "RIO DE JANEIRO", "RIO DE JANEIRO", NA…
$ UF_RESP            <chr> "SP", "RJ", "RJ", NA, "RJ", "RJ", "RS", "MG", "SP",…
$ PAIS_RESP          <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
$ CEP_RESP           <dbl> 4707000, 20020000, 22250180, NA, 20020010, 22290160…
$ DDD_TEL_RESP       <chr> "11", "21", "21", NA, "21", "21", "51", "31", "21",…
$ TEL_RESP           <dbl> 39579400, 22338867, 21455555, NA, 38043700, 2196720…
$ DDD_FAX_RESP       <chr> NA, "21", "0", NA, "0", "21", "0051", "31", "0021",…
$ FAX_RESP           <dbl> NA, 22338867, 0, NA, 0, 21967201, 3743595, 32737218…
$ EMAIL_RESP         <chr> "ri@2wenergia.com.br", "juridico@triploasec.com.br"…
$ CNPJ_AUDITOR       <chr> "61.366.936/0001-25", "60.525.706/0001-07", "57.755…
$ AUDITOR            <chr> "ERNST & YOUNG AUDITORES INDEPENDENTES S/S", "MOORE…
library(GetDFPData2)

# set options
id_company <- 23264 # AMBEV
first_year <- 2015
last_year <- 2017

# download data
df_reports <- get_dfp_data(companies_cvm_codes = id_company,
                           first_year = 2015,
                           last_year = last_year,
                           cache_folder = cache_folder)

names(df_reports)
[1] "DF Consolidado - Balanço Patrimonial Ativo"  
[2] "DF Consolidado - Balanço Patrimonial Passivo"
[3] "DF Consolidado - Demonstração do Resultado"  
[4] "DF Individual - Balanço Patrimonial Ativo"   
[5] "DF Individual - Balanço Patrimonial Passivo" 
[6] "DF Individual - Demonstração do Resultado"   

Módulo rb3

Diversos dados do mercado financeiros estão disponíveis no site da B3, porém com difícil acesso. Pacote rb3 realiza o webscrapping de diversos dados históricos do site.

Dados disponíveis

  • equities/stocks
  • futures
  • FII (Reits)
  • options
  • BDRs
  • historical yield curves (calculated from futures contracts)
  • B3 indexes composition
library(rb3)

df_yc <- yc_mget(
  first_date = Sys.Date() - 255 * 15,
  last_date = Sys.Date(),
  by = 255
) |>
  dplyr::filter(
    forward_date <= as.Date("2025-01-01")
  )

p <- ggplot(
  df_yc,
  aes(
    x = forward_date,
    y = r_252,
    group = refdate,
    color = factor(refdate)
  )
) +
  geom_line(size = 1) +
  labs(
    title = "Yield Curves for Brazil",
    subtitle = "Built using interest rates future contracts",
    caption = stringr::str_glue("Data imported using rb3 at {Sys.Date()}"),
    x = "Forward Date",
    y = "Annual Interest Rate",
    color = "Reference Date"
  ) +
  theme_light() +
  scale_y_continuous(labels = scales::percent)

print(p)

Livros do R

Análise de Dados Financeiros e Econômicos com o R

Visualização de Dados com o R

Referências

Freitas, Wilson. 2022. Rbcb: R Interface to Brazilian Central Bank Web Services. https://github.com/wilsonfreitas/rbcb.
Freitas, Wilson, and Marcelo Perlin. 2022. Rb3: Download and Parse Public Data Released by B3 Exchange. https://CRAN.R-project.org/package=rb3.
Perlin, Marcelo. 2022a. GetBCBData: Imports Datasets from BCB (Central Bank of Brazil) Using Its Official API. https://github.com/msperlin/GetBCBData/.
———. 2022b. GetTDData: Get Data for Brazilian Bonds (Tesouro Direto). https://CRAN.R-project.org/package=GetTDData.
———. 2022c. yfR: Downloads and Organizes Financial Data from Yahoo Finance. https://CRAN.R-project.org/package=yfR.
Perlin, Marcelo S. 2019. GetQuandlData: Fast and Cached Import of Data from Quandl Using the Json API. https://github.com/msperlin/GetQuandlData/.
Perlin, Marcelo, and Guilherme Kirch. 2022a. GetDFPData2: Reading Annual and Quarterly Financial Reports from B3. https://github.com/msperlin/GetDFPData2/.
———. 2022b. GetFREData: Reading FRE Corporate Data of Public Traded Companies from B3. https://github.com/msperlin/GetFREData/.
Raymond McTaggart, Gergely Daroczi, and Clement Leung. 2021. Quandl: API Wrapper for Quandl.com. https://github.com/quandl/quandl-r.