knitr::opts_chunk$set( collapse = TRUE, comment = "#>", out.width = "100%" )
O relatório FOCUS divulga semanalmente um conjunto de expectativas de diversas variáveis de
mercado (índices, taxas de juros, moedas, ...).
Uma destas é a taxa SELIC, são informadas expectativas desta taxa para diversas reuniões futuras
do COPOM.
Estas expectativas podem ser obtidas com o pacote rbcb
.
No código abaixo obtemos as expectativas de taxa SELIC para as próximas reuniões do COPOM.
library(tidyverse) library(fixedincome) refdate <- as.Date("2022-04-29") df <- rbcb::get_market_expectations("top5s-selic", start_date = refdate, end_date = refdate ) df <- df |> mutate( Reuniao_ano = str_split(reuniao, "/", simplify = TRUE)[, 2], Reuniao_cod = str_split(reuniao, "/", simplify = TRUE)[, 1], reuniao = str_c(Reuniao_ano, Reuniao_cod) ) |> arrange(reuniao) |> filter(tipoCalculo == "C") |> select(reuniao, mediana) df
As expectativas são relacionadas às reuniões do COPOM, na coluna reuniao
temos um código formado
pelo ano e um contador de reuniões por ano.
Dessa forma, 2022R3
representa a terceira reunião de 2022, e assim por diante.
Na coluna mediana
temos a mediana da amostra de expectativas informadas pelos participantes de
mercado.
No gráfico abaixo observa-se a estrutura a termo das expectativas pelas reuniões futuras.
df |> ggplot(aes(x = reuniao, y = mediana)) + geom_point() + geom_text(aes(label = mediana, hjust = 0.5, vjust = -1.0)) + labs( x = "Meeting", y = "SELIC Rate", title = "SELIC Rates Expectations", caption = "Source: FOCUS Report (rbcb package)" )
Assumindo a estrutura a termo abaixo para a data de referência r format(refdate)
.
terms <- c(1, 23, 44, 65, 88, 109, 129, 149, 171, 193, 211, 234, 252) rates <- c( 0.1165, 0.1247, 0.1265, 0.1281, 0.1294, 0.1298, 0.1301, 0.1304, 0.1303, 0.1305, 0.1306, 0.1302, 0.1300 ) curve <- spotratecurve( rates, terms, "discrete", "business/252", "Brazil/ANBIMA", refdate = refdate )
A idéia é utilizar as expectativas fornecidas no relatório FOCUS com a interpolação FlatForwardCOPOM e avaliar como seria a estrutura a termo interpolada sujeita a estas expectativas.
Para isso vamos considerar as próximas 8 datas futuras de reunião do COPOM. Vamos pegar as 8 expectativas referentes a estas reuniões. É necessário subtrair 0.1% das expectativas, pois essa é a diferença típica (nos dias atuais) entre a taxa SELIC meta e a taxa DI (CDI).
library(copom) copom_dates <- get_copom_dates(refdate, 8) fwd <- (df[["mediana"]][1:8] - 0.1) / 100
Para aplicar a interpolação FlatForwardCOPOM utilizando as expectativas, utilizamos a função
interp_copomscenarios
passando as datas futuras de reuniões e as taxas futuras, atribuindo em
seguida a curva de juros, via o método interpolation
.
Como resultado podemos obter do objeto de interpolação as mudanças na taxa de juros implícitas
nas expectativas.
interpolation(curve) <- interp_copomscenarios(copom_dates, future_rates = fwd) interpolation(curve)@copom_moves * 1e4
Observa-se que as expectativas trazem um mudança de 100 bps na SELIC, seguida por uma mudança de 50 bps, um período sem mudanças e uma mudança de -50 bps na oitava reunião.
Uma vez que definimos a interpolação na curva de juros podemos visualizar o efeito da interpolação com as expectativas do FOCUS conjuntamente com os pontos da curva de juros.
plot(curve, use_interpolation = TRUE)
Podemos ver que os pontos da curva estão próximos a curva interpolada, demostrando alguma conformidade do mercado com as expectativas do FOCUS.
Outra alternativa é fornecer as mudanças nas taxas de juros, ao invés das taxas futuras, na
função interp_copomscenarios
.
No código abaixo vamos considerar o cenário onde teremos uma mudança de 100 bps seguida de 2 mudanças de 25 bps e sem mais mudanças, para as próximas 8 reuniões.
moves <- c(100, 25, 25, 0, 0, 0, 0, 0) / 1e4 interpolation(curve) <- interp_copomscenarios(copom_dates, copom_moves = moves) plot(curve, use_interpolation = TRUE)
Nota-se um leve descolamento entre os pontos da curva e a interpolação, após o terceiro vencimento. Dando a entender que a curva de juros traz um movimento implícito maios próximos das expectativas do FOCUS, com uma mudança de 100 bps seguida por outra de 50 bps, ao invés dos cenários avaliados.
Um ponto importante é que com a função interp_copomscenarios
é possível testar diversos cenários
de movimentos futuros para a taxa SELIC e comparar os resultados com uma curva de mercado.
Eventualmente estes cenários podem trazer novos formatos e níveis para a curva de juros.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.