Uma variável fundamental de ser acompanhada por todo investidor do mercado de capitais é a taxa de juro real projetada da economia. A importância de calculá-la reside no fato de o juro real balizar diversas tomadas de decisões econômicas, inclusive decisões de investimentos de empresas e consumidores. Não por acaso, ela tem grande impacto sobre o valor dos ativos, inclusive sobre as ações listadas na bolsa de valores.
Há diversas formas de calculá-la. Uma delas utiliza o contrato swap DI versus a taxa pré-fixada de 360 dias, de um lado, e a expectativa de inflação para os próximos 12 meses, de outro. O contrato de swap nada mais é do que uma “troca de indexador”, por meio de um instrumento derivativo. Neste caso, o investidor “sai” de uma taxa pós-fixada em CDI para determinada taxa pré-fixada pactuada. A taxa do contrato de swap é divulgada pela B3, e a inflação projetada, pelo Banco Central do Brasil. Descontando a inflação do swap de 360 dias, temos uma estimativa da taxa de juro real projetada da economia. Podemos fazer isso por meio da seguinte fórmula:
\[ \begin{aligned} \frac{1 + Swap}{1 + IPCA} - 1 \end{aligned} \]
Nesse post, mostrarei como obter os dados, calcular a taxa e criar o gráfico correspondente.
Primeiramente, prepararemos o ambiente de trabalho do R para o projeto:
# carregar o pacote "pacman" (e instalá-lo, se necessário)
if (!require("pacman")) install.packages("pacman")
# carregar os pacotes que serão utilizados (e instalá-los, se necessário)
p_load(
ipeadatar,
tidyverse,
here,
rbcb,
janitor,
lubridate,
knitr,
kableExtra
)
Em seguida, obteremos os dados. Os dados sobre swaps serão extraídos com o auxílio do pacote ipeadatar. Primeiro consultaremos de que maneira as séries são disponibilizadas pelo pacote.
# consultar séries disponíveis
available_series(language = "br") %>%
head() %>%
kable() %>%
kable_styling("striped", "bordered")
code | name | theme | source | freq | lastupdate | status |
---|---|---|---|---|---|---|
ABIA12_ALIM12 | Produção física - alimentos - índice (média 1989 = 100) | Macroeconômico | Abia | Mensal | 2021-09-17 | Ativa |
ABINEE_VELETAA | Vendas industriais - aspiradores de ambiente - qde. | Macroeconômico | Abinee | Anual | 2003-08-19 | Inativa |
ABINEE_VELETAP | Vendas industriais - aspiradores de pó - qde. | Macroeconômico | Abinee | Anual | 2005-11-22 | Inativa |
ABINEE_VELETAR | Vendas industriais - auto-rádios - qde. | Macroeconômico | Abinee | Anual | 2003-08-19 | Inativa |
ABINEE_VELETBB | Vendas industriais - batedeiras - qde. | Macroeconômico | Abinee | Anual | 2005-11-22 | Inativa |
ABINEE_VELETCA | Vendas industriais - circuladores de ar - qde. | Macroeconômico | Abinee | Anual | 2003-08-19 | Inativa |
Como apresentado na tabela acima, cada série possui um nome e um código. Temos que procurar na coluna “nome” as séries que apresentam a palavra swap:
# obter relação de séries com o termo "swap"
search_series(
terms = "swap",
fields = "name",
language = "br"
) %>%
select(code, name) %>%
head() %>%
kable() %>%
kable_styling("striped", "bordered")
code | name |
---|---|
BMF12_SWAPDI18012 | Taxa referencial - swaps - DI x pré-fixada - 180 dias - média do período |
BMF12_SWAPDI180F12 | Taxa referencial - swaps - DI x pré-fixada - 180 dias - fim de período |
BMF12_SWAPDI36012 | Taxa referencial - swaps - DI x pré-fixada - 360 dias - média do período |
BMF12_SWAPDI360F12 | Taxa referencial - swaps - DI x pré-fixada - 360 dias - fim de período |
Utilizaremos a última série. A fim de obter maior compreensão dela, obteremos os metadados:
# obter metadados da série "swap 360 dias - fim do período"
metadata(code = "BMF12_SWAPDI360F12") %>%
glimpse()
## Rows: 1
## Columns: 14
## $ code <chr> "BMF12_SWAPDI360F12"
## $ name <chr> "Taxa referencial - swaps - DI x pré-fixada - 360 dias - fi…
## $ comment <chr> "Os contratos de swap são aqueles em que as partes trocam u…
## $ lastupdate <date> 2022-07-05
## $ bname <fct> Macroeconomic
## $ source <fct> BM&FBovespa
## $ sourcename <fct> "Bolsa de Valores, Mercadorias e Futuros (BM&FBovespa)"
## $ sourceurl <chr> "www.bmfbovespa.com.br"
## $ freq <fct> Monthly
## $ unity <fct> "(% p.y.)"
## $ mf <fct> NA
## $ status <fct> Active
## $ scode <int> 39
## $ tcode <chr> "BRA"
Ela é disponibilizada pela B3 (antiga BM&FBovespa), tem periodicidade mensal e se trata de série ativa. Para uma explanação mais detalhada sobre do que ela se trata, consultaremos a coluna “comentário”:
# extrair a variável "comentário"
metadata(code = "BMF12_SWAPDI360F12") %>%
pull(comment)
## [1] "Os contratos de swap são aqueles em que as partes trocam um índice de rentabilidade por outro, com o intuito de fazer \"hedge\", casar posições ativas com posições passivas, eqüalizar preços, arbitrar mercados ou até alavancar sua exposição ao risco. Neste caso, a troca de rentabilidade se dá entre a taxa DI e uma taxa pré-fixada entre as partes do contrato. Fim do mês.“Hedge” é a operação realizada no mercado derivativo que visa fixar antecipadamente o preço de uma mercadoria, ou ativo financeiro, de forma a neutralizar o impacto de mudanças no nível de preços. Mais informações: <a href=\"../doc/CVM-Caderno-9.pdf\">Caderno da Comissão de Valores Mobiliários (CVM) - nº09</a> e <a href=\"../doc/Livro-TOPDerivativos.pdf\">Mercado de Derivativos no Brasil: Conceitos, Produtos e Operaçoões</a>."
## attr(,"label")
## comment
## "Comment (PT-BR)"
Feito isso, obteremos os dados propriamente ditos:
# obter dados de swaps
swap <-
ipeadata(
code = "BMF12_SWAPDI360F12",
language = "br"
) %>%
rename(swap = value) %>%
select(date, swap)
# imprimir dados
swap %>%
head() %>%
kable() %>%
kable_styling("striped", "bordered")
date | swap |
---|---|
1999-09-01 | 25.74 |
1999-10-01 | 24.42 |
1999-11-01 | 24.33 |
1999-12-01 | 21.71 |
2000-01-01 | 20.89 |
2000-02-01 | 19.94 |
Agora, obteremos as expectativas para a inflação (IPCA) dos próximos 12 meses. Ela é obtida por meio do pacote rbcb. Primeiramente, vejamos como vêm os dados, a fim de entender que tipo de transformação teremos que fazer:
# apresentar dados de expectativas de inflação
get_market_expectations(
type = "inflation-12-months",
ind = "IPCA"
) %>%
head() %>%
kable() %>%
kable_styling("striped", "bordered")
Indicador | Data | Suavizada | Media | Mediana | DesvioPadrao | Minimo | Maximo | numeroRespondentes | baseCalculo |
---|---|---|---|---|---|---|---|---|---|
IPCA | 2001-11-07 | N | 5.52 | 5.48 | 0.58 | 4.31 | 6.24 | NA | 0 |
IPCA | 2001-11-08 | N | 5.67 | 5.79 | 0.56 | 4.31 | 6.27 | NA | 0 |
IPCA | 2001-11-09 | N | 5.39 | 5.53 | 0.58 | 4.12 | 6.17 | NA | 0 |
IPCA | 2001-11-12 | N | 5.40 | 5.42 | 0.53 | 4.44 | 6.38 | NA | 0 |
IPCA | 2001-11-13 | N | 5.43 | 5.48 | 0.50 | 4.44 | 6.38 | NA | 0 |
IPCA | 2001-11-14 | N | 5.49 | 5.53 | 0.50 | 4.44 | 6.38 | NA | 0 |
Trata-se de expectativas diárias de inflação. Contudo, os dados de swap são mensais. Desta feita, selecionaremos apenas os primeiros dados de cada mês. Ainda, temos a expectativa de inflação mediana e média. Utilizaremos a mediana.
# obter dados de expectativas de inflação
ipca <-
get_market_expectations(
type = "inflation-12-months",
ind = "IPCA") %>%
clean_names() %>%
select(date = data, ipca = mediana) %>%
arrange(date) %>%
group_by(year = year(date), month = month(date)) %>%
filter(date == first(date)) %>%
ungroup() %>%
distinct(date, .keep_all = TRUE) %>%
mutate(date = floor_date(date, unit = "month")) %>%
select(date, ipca)
# imprimir dados
ipca %>%
head() %>%
kable() %>%
kable_styling("striped", "bordered")
date | ipca |
---|---|
2001-11-01 | 5.48 |
2001-12-01 | 5.67 |
2002-01-01 | 4.73 |
2002-02-01 | 4.83 |
2002-03-01 | 4.75 |
2002-04-01 | 4.92 |
Agora que temos as duas séries, combinaremos ambas num único banco de dados, e calcularemos a taxa de juro real projetada, aplicando a fórmula apresentada no início desse post:
# combinar bancos de dados
# calcular a taxa de juro real projetada
data <-
ipca %>%
left_join(swap) %>%
mutate(real = (((1 + (swap / 100)) / (1 + (ipca / 100))) - 1) * 100)
# imprimir banco de dados
data %>%
head() %>%
kable() %>%
kable_styling("striped", "bordered")
date | ipca | swap | real |
---|---|---|---|
2001-11-01 | 5.48 | 22.95 | 16.56238 |
2001-12-01 | 5.67 | 20.23 | 13.77875 |
2002-01-01 | 4.73 | 20.81 | 15.35377 |
2002-02-01 | 4.83 | 18.96 | 13.47897 |
2002-03-01 | 4.75 | 18.53 | 13.15513 |
2002-04-01 | 4.92 | 19.79 | 14.17270 |
Por fim, apresentaremos os dados na forma de gráfico:
# construir gráfico
ggplot(data = data, aes(x = date, y = real)) +
geom_line(aes(color = real > 0, group = 1), size = 1) +
scale_color_manual(values = c("red", "green4")) +
geom_area(aes(fill = real > 0), alpha = .1) +
scale_fill_manual(values = c("red", "grey50")) +
theme_classic() +
labs(
x = "Ano",
y = "Taxa de Juro (%)",
title = "Taxa de juro real projetada (%)",
caption = "Fonte: Banco Central do Brasil; B3"
) +
scale_x_date(
date_breaks = "2 years",
breaks = seq(2001, 2021, 1),
date_labels = "%Y"
) +
scale_y_continuous(breaks = seq(0, 25, 2.5)) +
theme(
legend.position = "none",
plot.caption = element_text(hjust = 0),
plot.title = element_text(face = "bold")
) +
geom_label(data = filter(data, date == last(date)),
aes(label = round(real, 2)))
Obtidos os dados de juros reais projetados, é possível utilizá-lo em análises macroeconômicas, incluindo a precificação de ativos. Se considerarmos o juro neutro atual brasileiro como algo entre 3,5% e 4%, ao fim de 2021 a política monetária ingressou em campo contracionista. Se a política monetária leva entre 12 e 18 meses para atingir plena potência, no primeiro semestre de 2023, é possível que tenhamos arrefecimento da inflação. Isso abre espaço para juros menores no futuro, o que pode beneficar empresas de modo geral, mas especialmente aquelas mais sensíveis ao ciclo econômico, tais como companhias do setor de varejo, construção civil ou de crescimento.
Agradecimentos a Luiz Eduardo S. Gomes e Jessyka A. P. Goltara, pelo pacote ipeadatar, e a Wilson Freitas, pelo pacote rbcb.