Interface Julia para os serviços de dados abertos do Banco Central do Brasil (BCB): séries temporais (SGS), expectativas de mercado (Focus) e câmbio (PTAX/OLINDA).
Este pacote ainda não está registrado no General Registry. Para usar, ative o ambiente local:
import Pkg
Pkg.activate("caminho/para/pacote_julia")
using BacenBROu, de dentro da pasta pacote_julia, abra o Julia e rode:
import Pkg; Pkg.activate("caminho/para/BacenBR.jl"); using BacenBRsgs_series(code; start_date=nothing, end_date=nothing, last=0, window_years=5)Baixa uma ou mais séries temporais do BCB.
| Forma | Coluna resultante |
|---|---|
433 |
"433" |
"ipca" => 433 |
"ipca" |
Dict("ipca" => 433) |
"ipca" |
["ipca" => 433, "selic" => 432] |
"ipca", "selic" |
| Parâmetro | Tipo | Descrição |
|---|---|---|
start_date |
Date ou String |
Data inicial no formato "YYYY-MM-DD" |
end_date |
Date ou String |
Data final no formato "YYYY-MM-DD" |
last |
Int |
Últimos N registros. Ignora start_date/end_date/window_years. |
window_years |
Int |
Tamanho máximo (em anos) de cada janela de consulta. Default: 5. |
A API SGS rejeita consultas com dataFinal - dataInicial maior que 10 anos. Quando o intervalo pedido excede window_years, sgs_series fraciona a consulta em múltiplas janelas consecutivas automaticamente e concatena o resultado — não é preciso fazer isso manualmente.
using BacenBR
using Dates
# Série completa (sem nome — coluna chamada "433")
sgs_series(433)
# Série completa com nome na coluna
sgs_series("ipca" => 433)
# Últimos 12 meses de IPCA
sgs_series("ipca" => 433; last=12)
# IPCA de 2020 em diante
sgs_series("ipca" => 433; start_date="2020-01-01")
# IPCA num intervalo específico
sgs_series("ipca" => 433; start_date=Date(2022, 1, 1), end_date=Date(2022, 12, 31))
# Intervalo longo (30 anos) — fracionado automaticamente em janelas de 5 anos
sgs_series("selic" => 432; start_date="1995-01-01")
# Mesma coisa, com janelas menores (ex: para depurar/observar o fracionamento)
sgs_series("selic" => 432; start_date="1995-01-01", window_years=2)
# Múltiplas séries com nomes
sgs_series(["ipca" => 433, "selic" => 432]; last=12)
# Múltiplas séries com Dict (ordem não garantida)
sgs_series(Dict("ipca" => 433, "igpm" => 189); start_date="2023-01-01")| Código | Nome |
|---|---|
| 433 | IPCA (% ao mês) |
| 189 | IGP-M (% ao mês) |
| 432 | Taxa Selic (% ao dia) |
| 1178 | Taxa Selic Over (% a.a) |
| 1 | USD/BRL (câmbio) |
| 21619 | EUR/BRL (câmbio) |
| 7478 | IPCA-15 (% ao mês) |
| 13522 | INPC (% ao mês) |
Para encontrar outros códigos, acesse: https://www3.bcb.gov.br/sgspub
Quando mais de um code é passado, o retorno é um Vector{DataFrame} — um DataFrame por série, na mesma ordem em que os códigos foram passados. Séries do SGS podem ter periodicidades diferentes (ex: IPCA mensal e Selic diária); juntar tudo num único DataFrame por date geraria uma explosão de missing, então cada série vem separada:
dfs = sgs_series(["ipca" => 433, "selic" => 432]; last=12)
ipca, selic = dfs # cada um é um DataFrame independente, com sua própria frequênciafocus_expectations(period::Symbol; top5=false, indic=nothing, start_date=nothing,
end_date=nothing, top=nothing, skip=nothing)Uma única função cobre as 8 categorias de expectativas da API OLINDA: o endpoint é escolhido pela combinação de period e top5.
period |
Endpoint | aceita top5=true? |
|---|---|---|
:annual |
Expectativas anuais | sim |
:quarterly |
Expectativas trimestrais | não |
:monthly |
Expectativas mensais | sim |
:inflation_12m |
Inflação para os próximos 12 meses | não |
:selic |
Taxa Selic (por reunião do COPOM) | sim |
Passar top5=true com :quarterly ou :inflation_12m gera erro — não existe endpoint Top 5 para essas periodicidades.
| Parâmetro | Tipo | Descrição |
|---|---|---|
top5 |
Bool |
Retorna as estatísticas Top 5 em vez do agregado geral |
indic |
String ou Vector{String} |
Indicador(es). Case-sensitive, com acentos. |
start_date |
Date ou String |
Data inicial no formato "YYYY-MM-DD" |
end_date |
Date ou String |
Data final no formato "YYYY-MM-DD" |
top |
Int |
Máximo de linhas retornadas |
skip |
Int |
Pular os primeiros N registros |
using BacenBR
using Dates
# IPCA anual a partir de 2023
focus_expectations(:annual; indic="IPCA", start_date="2023-01-01")
# IPCA e Câmbio anuais — últimos 10 registros
focus_expectations(:annual; indic=["IPCA", "Câmbio"], top=10)
# Expectativas mensais de IPCA
focus_expectations(:monthly; indic="IPCA", start_date="2024-01-01")
# Nota: reference_date é convertida para Date (primeiro dia do mês)
# PIB Total trimestral
focus_expectations(:quarterly; indic="PIB Total", top=20)
# Nota: reference_date fica como String "Q/YYYY" (ex: "1/2025")
# Inflação 12 meses à frente — IPCA e IGP-M
focus_expectations(:inflation_12m; indic=["IPCA", "IGP-M"], start_date="2024-01-01")
# Top 5 IPCA mensal
focus_expectations(:monthly; indic="IPCA", top5=true, top=10)
# Selic — todas as reuniões previstas
focus_expectations(:selic; start_date="2025-01-01")
# Selic Top 5
focus_expectations(:selic; top5=true, start_date="2025-01-01", top=20)| Coluna | Descrição |
|---|---|
date |
Data de divulgação da expectativa |
indic |
Nome do indicador |
reference_date |
Período de referência da expectativa |
mean |
Média das expectativas |
median |
Mediana das expectativas |
sd |
Desvio padrão |
min |
Mínimo |
max |
Máximo |
respondents |
Número de respondentes |
coefvar |
Coeficiente de variação |
smoothed |
Expectativa suavizada (S/N) |
meeting |
Reunião do COPOM (endpoint :selic) |
typeCalc |
Tipo de cálculo (endpoints Top 5) |
fx_currency(symbol, start_date, end_date=start_date; intraday=false, parity=false)intraday=false(padrão): série diária de fechamento via PTAX legado. Para"USD"— removido pelo BCB da interface PTAX legada — a função redireciona automaticamente para OLINDA, retornando a cotação de fechamento diária no mesmo formato.intraday=true: todos os boletins do dia via API OLINDA. Aceitaparity=true(só válido junto comintraday=true) para retornar a paridade da moeda em relação ao USD em vez da cotação em BRL.
using BacenBR
using Dates
# Série diária — PTAX (fechamento)
fx_currency("USD", "2024-01-01", "2024-01-31")
fx_currency("EUR", "2024-01-01", "2024-01-31")
fx_currency("JPY", Date(2024,1,1), Date(2024,1,31))
# Série intraday — OLINDA (todos os boletins do dia)
fx_currency("USD", "2024-01-02", "2024-01-05"; intraday=true)
# Com paridade em relação ao USD (requer intraday=true)
fx_currency("EUR", "2024-01-02", "2024-01-05"; intraday=true, parity=true)Retorno: DataFrame com date (intraday=false) ou datetime (intraday=true), mais bid e ask.
fx_currencies(; source=:ptax)source=:ptax(padrão): lista mestre do PTAX legado. Colunas:symbol,name,code,country_name,country_code,currency_type.source=:olinda: lista da API OLINDA. Colunas:symbol,name,currency_type.
fx_currencies()
fx_currencies(; source=:olinda)fx_all_currencies(date)Retorna DataFrame com date, symbol, bid, ask (em BRL) para todas as moedas cotadas numa data.
fx_all_currencies(Date(2024, 1, 2))fx_cross_rates(date; ref=:ask)Retorna DataFrame com coluna :symbol + uma coluna por moeda (incluindo BRL). Cada célula [linha, coluna] = 1 unidade da moeda da linha em unidades da moeda da coluna.
m = fx_cross_rates(Date(2024, 1, 2)) # ask (padrão)
m = fx_cross_rates(Date(2024, 1, 2); ref=:bid)
# quantos USD vale 1 EUR?
m[m.symbol .== "EUR", :USD]