Salvando histórico da curva de juros PRÉ

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`.


library(glue)
library(xml2)
library(stringr)
library(bizdays)
library(tidyverse)

bizdays.options$set(default.calendar="Brazil/ANBIMA")

Segue a função `get_curve`:


get_curve <- function (refdate, ticker="PRE") {
print(refdate)
refdate <- as.Date(refdate)
url <- "http://www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-taxas-referenciais-bmf-ptBR.asp"
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.


curves <- seq(as.Date("2015-01-01"), as.Date("2021-04-29"), "day") %>%
map(get_curve) %>%
compact()
save(curves, file = "curves.rda")


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.


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.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise regional do mercado de trabalho com dados do CAGED usando Python

Os microdados dos CAGED fornecem informações detalhadas a nível de cidade, sexo, raça, nível de instrução, idade, salário e outras sobre os trabalhadores formais do Brasil, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

Transfer Learning: mostrando porque o Python está na ponta do desenvolvimento

A aprendizagem por transferência (transfer learning) é o reuso de um modelo pré-treinado em um novo problema. Portanto, sua utilização torna-se um avanço enorme para a previsão de diferentes tipos de variáveis, principalmente para aquelas ordenadas no tempo. Mostramos nesta postagem o uso do Transfer Learning com o Python para o caso de Séries Temporais.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.