library(dplyr)
library(ggplot2)
library(rbcb)É possível obter as expectativas de mercado para diversos indicadores macroeconômicos da pesquisa Focus de forma totalmente automática utilizando o R.
Vamos utilizar o pacote {rbcb} para obter estes dados. O pacote {rbcb} é uma interface para algumas das diversas APIs do portal de dados abertos do Banco Central (link).
As expectativas de mercado para os indicadores macroeconômicos da pesquisa Focus são consolidadas em estatísticas diárias e divulgadas na API. Estas estatísticas são calculadas com base nas expectativas de mercado de diversos bancos, gestores de recursos e demais instituições do mercado financeiro. Os indicadores macroeconômicos são referentes a índices de preços, crescimento do PIB e da produção industrial, taxa de câmbio, taxa Selic, variáveis fiscais e indicadores do setor externo e são publicadas todo primeiro dia útil da semana.
Carregando os pacotes utilizados.
Função get_market_expectations
A função get_market_expectations implementa a interface para a API de expectativas de mercado da pesquisa Focus. Vejamos os seus argumentos e o que podemos fazer com eles:
get_market_expectations |> args()function (type = c("annual", "quarterly", "monthly", "inflation-12-months",
"top5s-monthly", "top5s-annual", "institutions", "selic",
"top5s-selic"), indic = NULL, start_date = NULL, end_date = NULL,
keep_names = TRUE, ...)
NULL
type: A API de expectativas possui diversos endpoints e o argumentotypedefine qual deve ser utilizado. Se não for informado o valorannualserá utilizado.annual,quarterlyemonthlyretorna, respectivamente, as expectativas anuais, trimestrais e mensais dos indicadores macroeconômicosinflation-12-monthspara expectativas de inflação nos próximos 12 mesestop5s-monthlyetop5s-annualretorna as expectativas mensais e anuais para os indicadores do Top 5institutionsexpectativas informadas pelas instituições credenciadasselicexpectativas de mercado SELICtop5s-selicexpectativas Top 5 para SELIC
indicnome do indicador macroeconômico, é opcional, de forma, quando não for definido, todos os indicadores disponíveis para o endpoint serão retornados. Esse ponto é curioso, pois a documentação não é boa e informa indicadores que não são mais disponibilizados.start_dateeend_datedefinem as datas de início e fim para a consulta, são opcionais e caso não sejam informados, todo o período será retornado, o que não é recomendado pois onera os serviços de dados do BCB que já não são lá os melhores.keep_namesé um argumento utilizado internamente que não faz diferença para o usuário final....aqui são passados argumentos adicionais para a API$selectdefine as colunas retornadas na consulta:Nome, Idade$filterdefine filtros mais elaborados baseado nos valores das colunas:Nome eq 'João'$orderbydefine como as colunas devem ser ordenadas:Nome asc, Idade desc$skipdefine quantidade de linhas no começo que não devem ser retornadas$topdefine a quantidade de linhas que serão retornadas
Descobrindo indicadores disponíveis
Para descobrir os indicadores macroeconômicos disponíveis para um determinado endpoint é necessário realizar duas consultas. A primeira para descobrir a data mais recente com dados, pois a disponibilidade dos indicadores varia com o tempo, de maneira que temos indicadores mais recentes que não estão no histórico antigo. Tendo esta data, realizamos a segunda consulta filtrando por esta data.
Vamos fazer isso para cada um dos endpoints.
annual
Consulta 1
get_market_expectations("annual",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("annual",
`$select` = "Data,Indicador,IndicadorDetalhe",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador, IndicadorDetalhe) |>
arrange(Indicador, IndicadorDetalhe) |>
rmarkdown::paged_table()Indicador <chr> | IndicadorDetalhe <chr> |
|---|---|
| Balança comercial | Exportações |
| Balança comercial | Importações |
| Balança comercial | Saldo |
| Conta corrente | NA |
| Câmbio | NA |
| Dívida bruta do governo geral | NA |
| Dívida líquida do setor público | NA |
| IGP-M | NA |
| IPCA | NA |
| IPCA Administrados | NA |
Este endpoint tem uma coluna IndicadorDetalhe, que é como uma especificação do indicador. No caso, Balança Comercial-Saldo ou Balança Comercial-Exportações, por exemplo.
monthly
Consulta 1
get_market_expectations("monthly",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("monthly",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador) |>
arrange(Indicador) |>
rmarkdown::paged_table()Indicador <chr> | ||||
|---|---|---|---|---|
| Câmbio | ||||
| IGP-M | ||||
| IPCA | ||||
| IPCA Administrados | ||||
| IPCA Alimentação no domicílio | ||||
| IPCA Bens industrializados | ||||
| IPCA Livres | ||||
| IPCA Serviços | ||||
| Taxa de desocupação |
quarterly
Consulta 1
get_market_expectations("quarterly",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("quarterly",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador) |>
arrange(Indicador) |>
rmarkdown::paged_table()Indicador <chr> | ||||
|---|---|---|---|---|
| Câmbio | ||||
| IPCA | ||||
| IPCA Administrados | ||||
| IPCA Alimentação no domicílio | ||||
| IPCA Bens industrializados | ||||
| IPCA Livres | ||||
| IPCA Serviços | ||||
| PIB Total | ||||
| Taxa de desocupação |
inflation-12-months
Consulta 1
get_market_expectations("inflation-12-months",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("inflation-12-months",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador) |>
arrange(Indicador) |>
rmarkdown::paged_table()Indicador <chr> | ||||
|---|---|---|---|---|
| IGP-M | ||||
| IPCA | ||||
| IPCA Administrados | ||||
| IPCA Alimentação no domicílio | ||||
| IPCA Bens industrializados | ||||
| IPCA Livres | ||||
| IPCA Serviços |
top5s-annual
Consulta 1
get_market_expectations("top5s-annual",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("top5s-annual",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador) |>
arrange(Indicador) |>
rmarkdown::paged_table()Indicador <chr> | ||||
|---|---|---|---|---|
| Câmbio | ||||
| IGP-M | ||||
| IPCA | ||||
| IPCA Administrados | ||||
| Selic |
top5s-monthly
Consulta 1
get_market_expectations("top5s-monthly",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("top5s-monthly",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador) |>
arrange(Indicador) |>
rmarkdown::paged_table()Indicador <chr> | ||||
|---|---|---|---|---|
| Câmbio | ||||
| IPCA |
top5s-selic
Consulta 1
get_market_expectations("top5s-selic",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("top5s-selic",
`$select` = "Data,indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(indicador) |>
arrange(indicador) |>
rmarkdown::paged_table()indicador <chr> | ||||
|---|---|---|---|---|
| Selic |
Aqui temos uma pegadinha, a coluna indicador vem com sua inicial minúscula, diferente dos demais endpoints.
selic
Consulta 1
get_market_expectations("selic",
`$top` = 1,
`$select` = "Data",
`$orderby` = "Data desc"
) |>
rmarkdown::paged_table()Data <date> | ||||
|---|---|---|---|---|
| 2023-02-10 |
Consulta 2
get_market_expectations("selic",
`$select` = "Data,Indicador",
`$filter` = "Data eq '2022-04-29'"
) |>
distinct(Indicador) |>
arrange(Indicador) |>
rmarkdown::paged_table()Indicador <chr> | ||||
|---|---|---|---|---|
| Selic |
Conclusão
Observamos que para a maior parte dos endpoints, a última data disponível é a mesma, indicando que as estatísticas são atualizadas conjuntamente.
Uma vez que conhecemos os indicadores disponíveis podemos utilizar o argumento indic para selecionar o indicador desejado na consulta.
get_market_expectations("monthly",
indic = c("IPCA", "IGP-M"),
start_date = "2022-04-29",
`$select` = "Data,Indicador,DataReferencia,Media,baseCalculo"
) |>
rmarkdown::paged_table()Indicador <chr> | Data <date> | DataReferencia <chr> | Media <dbl> | baseCalculo <int> |
|---|---|---|---|---|
| IPCA | 2023-02-10 | 02/2025 | 0.4749 | 0 |
| IPCA | 2023-02-10 | 02/2025 | 0.4749 | 1 |
| IPCA | 2023-02-10 | 01/2025 | 0.4119 | 0 |
| IPCA | 2023-02-10 | 01/2025 | 0.4226 | 1 |
| IPCA | 2023-02-10 | 12/2024 | 0.4964 | 0 |
| IPCA | 2023-02-10 | 12/2024 | 0.5308 | 1 |
| IPCA | 2023-02-10 | 11/2024 | 0.3194 | 0 |
| IPCA | 2023-02-10 | 11/2024 | 0.3239 | 1 |
| IPCA | 2023-02-10 | 10/2024 | 0.3629 | 0 |
| IPCA | 2023-02-10 | 10/2024 | 0.3589 | 1 |