Em vários momentos do nosso Curso de Renda Fixa usando o R, usamos a curva de juros PRÉ da B3 no apreçamento de alguns intrumentos de renda fixa. Essa curva é importantíssima para o mercado financeiro brasileiro. Diversos instrumentos financeiros como títulos de dívida e derivativos são apreçados com as taxas de juros dessa curva. Fora a sua importância como fator de risco primário no mercado financeiro.
Neste post vamos ver como salvar um histórico dessa curva com a função `get_curve` utilizada em outros posts.
Vamos começar importando os pacotes necessários e fazendo a configuração do calendário do `bizdays`.
1 2 3 4 5 6 7 | library (glue) library (xml2) library (stringr) library (bizdays) library (tidyverse) bizdays.options$ set (default.calendar= "Brazil/ANBIMA" ) |
Segue a função `get_curve`:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | get_curve <- function (refdate, ticker= "PRE" ) { print (refdate) refdate <- as.Date (refdate) url <- glue ( "{url}?Data={format(refdate, '%d/%m/%Y')}&Data1={format(refdate, '%Y%m%d')}&slcTaxa={ticker}" ) doc <- read_html (url) tbl <- xml_find_all (doc, "//table[contains(@id, 'tb_principal1')]" ) if ( length (tbl) == 0) return ( NULL ) num <- xml_find_all (tbl[[1]], "td" ) %>% xml_text () %>% str_trim () %>% str_replace ( "," , "." ) %>% as.numeric () dc <- num[ c ( TRUE , FALSE , FALSE )] tx_252 <- num[ c ( FALSE , TRUE , FALSE )] terms <- bizdayse (refdate, dc) ix <- (terms %% 21) == 0 terms <- c (terms[1], terms[ix]) rates <- c (tx_252[1], tx_252[ix])/100 log_pu <- log ((1 + rates)^(terms/252)) rate <- function (pu, term) pu^(252/term) - 1 log_price_interpolator <- approxfun (terms, log_pu, method= "linear" ) function (term) { pu <- exp ( log_price_interpolator (term)) rate (pu, term)*100 } } |
É importante notar que essa função retorna outra função, e esta recebe um único argumento que é o prazo para as taxas de juros. Ou seja, a função retornada recebe prazos em dias úteis e retorna as taxas de juros correspondentes a estes prazos.
Vamos fazer o download de diversas curvas para diversas datas, armazenar as funções retornadas por `get_curve` em uma lista e salvar essa lista em um arquivo para que possamos usar posteriormente sem precisar realizar novamente os downloads.
1 2 3 4 | curves <- seq ( as.Date ( "2015-01-01" ), as.Date ( "2021-04-29" ), "day" ) %>% map (get_curve) %>% compact () save (curves, file = "curves.rda" ) |
1 | load ( "curves.rda" ) |
A variável `curves` é uma lista com todas as curvas baixadas. Uma análise interessante a ser realizada com esse histórico de curvas é avaliar o comportamento dos juros longos, por exemplo, juros de 10 anos, equivalente a 2520 dias úteis.
1 2 3 4 5 | rates_10Y <- curves %>% map_dbl (~ .x (2520)) dates <- names (rates_10Y) %>% as.Date () tibble (Dates = dates, Rates = rates_10Y) %>% ggplot ( aes (x = Dates, y = Rates)) + geom_line () |
Como podemos ver, os rentistas já tiveram dias melhores.
____________________________
(*) Conheça nosso Curso de Renda Fixa usando o R.