---
title: "Fetching Historical Yield Curves from B3"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Fetching Historical Yield Curves from B3}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---
  
```{r setup, include = FALSE}
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  out.width = "100%"
)
```

Data for the yield curve is available in
[B3's website](https://www2.bmf.com.br/pages/portal/bmfbovespa/lumis/lum-taxas-referenciais-bmf-ptBR.asp).
The data is built using interest rate futures.
See this [pdf](https://www.b3.com.br/data/files/8B/F5/11/68/5391F61043E561F6AC094EA8/Manual_de_Curvas.pdf) for more details about the source of the yield curves.

```{r packages}
library(rb3)
library(ggplot2)
library(stringr)
library(dplyr)
```

## DI X Pre Curve

```{r, echo=FALSE, warning=FALSE, message=FALSE}
df_yc <- try(yc_mget(
  first_date = Sys.Date() - 255 * 5,
  last_date = Sys.Date(),
  by = 255
), silent = TRUE)

if (is(df_yc, "try-error")) {
  load("yc_mget.rda")
}
```

```{r, eval=FALSE}
df_yc <- yc_mget(
  first_date = Sys.Date() - 255 * 5,
  last_date = Sys.Date(),
  by = 255
)
```

```{r, fig.width=9, fig.height=6}
p <- ggplot(
  df_yc,
  aes(
    x = forward_date,
    y = r_252,
    group = refdate,
    color = factor(refdate)
  )
) +
  geom_line(linewidth = 1) +
  labs(
    title = "Yield Curves for Brazil",
    subtitle = "Built using interest rates future contracts",
    caption = 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)
```

## DI x IPCA Curve

```{r, echo=FALSE, warning=FALSE, message=FALSE}
df_yc <- try(yc_ipca_mget(
  first_date = Sys.Date() - 255 * 5,
  last_date = Sys.Date(),
  by = 255
), silent = TRUE)

if (is(df_yc, "try-error")) {
  load("yc_ipca_mget.rda")
}
```

```{r, eval=FALSE}
df_yc <- yc_ipca_mget(
  first_date = Sys.Date() - 255 * 5,
  last_date = Sys.Date(),
  by = 255
)
```

```{r, fig.width=9, fig.height=6}
p <- ggplot(
  df_yc |> filter(biz_days > 21, biz_days < 1008),
  aes(
    x = forward_date,
    y = r_252,
    group = refdate,
    color = factor(refdate)
  )
) +
  geom_line(linewidth = 1) +
  labs(
    title = "DIxIPCA Yield Curves for Brazil",
    subtitle = "Built using interest rates future contracts",
    caption = 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)
```

## Cupom Limpo (USD)

```{r, echo=FALSE, warning=FALSE, message=FALSE}
df_yc <- try(yc_usd_mget(
  first_date = Sys.Date() - 255 * 5,
  last_date = Sys.Date(),
  by = 255
), silent = TRUE)

if (is(df_yc, "try-error")) {
  load("yc_usd_mget.rda")
}
```

```{r, eval=FALSE}
df_yc <- yc_usd_mget(
  first_date = Sys.Date() - 255 * 5,
  last_date = Sys.Date(),
  by = 255
)
```

```{r, fig.width=9, fig.height=6}
p <- ggplot(
  df_yc |> filter(biz_days > 21, biz_days < 2520),
  aes(
    x = forward_date,
    y = r_360,
    group = refdate,
    color = factor(refdate)
  )
) +
  geom_line(linewidth = 1) +
  labs(
    title = "Cupom Limpo (USD) Yield Curves for Brazil",
    subtitle = "Built using interest rates future contracts",
    caption = 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)
```
