Explorando a cotação do dólar! Consulta a API do Banco Central.
Nesta atividade eu criei uma rotina em Python que consulta a cotação do dólar comercial em um determinado mês e ano, usando a API do Banco Central (PTAX) e exibe os resultados em um gráfico de linha interativo com o Plotly.
Instalei as bibliotecas necessárias
Antes de tudo, precisei instalar algumas bibliotecas que o código utiliza:
pip install requests pandas plotly
Requirement already satisfied: requests in /home/codespace/.local/lib/python3.12/site-packages (2.32.5)
Requirement already satisfied: pandas in /home/codespace/.local/lib/python3.12/site-packages (2.3.3)
Requirement already satisfied: plotly in /home/codespace/.local/lib/python3.12/site-packages (6.4.0)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/codespace/.local/lib/python3.12/site-packages (from requests) (3.4.4)
Requirement already satisfied: idna<4,>=2.5 in /home/codespace/.local/lib/python3.12/site-packages (from requests) (3.11)
Requirement already satisfied: urllib3<3,>=1.21.1 in /home/codespace/.local/lib/python3.12/site-packages (from requests) (2.5.0)
Requirement already satisfied: certifi>=2017.4.17 in /home/codespace/.local/lib/python3.12/site-packages (from requests) (2025.10.5)
Requirement already satisfied: numpy>=1.26.0 in /home/codespace/.local/lib/python3.12/site-packages (from pandas) (2.3.4)
Requirement already satisfied: python-dateutil>=2.8.2 in /home/codespace/.local/lib/python3.12/site-packages (from pandas) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/codespace/.local/lib/python3.12/site-packages (from pandas) (2025.2)
Requirement already satisfied: tzdata>=2022.7 in /home/codespace/.local/lib/python3.12/site-packages (from pandas) (2025.2)
Requirement already satisfied: narwhals>=1.15.1 in /home/codespace/.local/lib/python3.12/site-packages (from plotly) (2.10.2)
Requirement already satisfied: packaging in /home/codespace/.local/lib/python3.12/site-packages (from plotly) (25.0)
Requirement already satisfied: six>=1.5 in /home/codespace/.local/lib/python3.12/site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)
Note: you may need to restart the kernel to use updated packages.
requests → para acessar a API do Banco Central
pandas → para organizar os dados e tratar a tabela
plotly → para criar o gráfico de linha interativo
Função principal
Depois disso, criei uma função chamada cotacao_dolar_periodo() que recebe uma string com o mês e o ano no formato “MMYYYY”, por exemplo “082021”. A função consulta as cotações de todos os dias daquele mês e mostra o gráfico.
import requestsimport pandas as pdimport calendarfrom datetime import datetime, timedeltaimport plotly.express as pxdef cotacao_dolar_periodo(mes_ano: str):""" Recebe uma string no formato 'MMYYYY' (ex: '082021') e retorna um gráfico de linha com a cotação do dólar comercial (compra e venda) no período. """# Converter o texto para data e descobrir o primeiro e o último dia do mês data_inicial = datetime.strptime(mes_ano, "%m%Y") ultimo_dia = calendar.monthrange(data_inicial.year, data_inicial.month)[1] data_final = data_inicial.replace(day=ultimo_dia)# Ajustar o formato da data para o padrão da API (MM-DD-YYYY) data_inicial_str = data_inicial.strftime("%m-%d-%Y") data_final_str = data_final.strftime("%m-%d-%Y")# URL da API do Banco Central (Cotação do Dólar por Período) url = ("https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/odata/"f"CotacaoDolarPeriodo(dataInicial=@dataInicial,dataFinalCotacao=@dataFinalCotacao)?"f"@dataInicial='{data_inicial_str}'&@dataFinalCotacao='{data_final_str}'&""$format=json&$select=cotacaoCompra,cotacaoVenda,dataHoraCotacao" )# Fazer a requisição response = requests.get(url)if response.status_code !=200:print("Erro ao acessar API do Banco Central.")returnNone dados = response.json().get("value", [])# Converter o resultado em um DataFrame df = pd.DataFrame(dados)if df.empty:print("Nenhum dado encontrado para o período informado.")returnNone# Converter a coluna de data e ordenar df["dataHoraCotacao"] = pd.to_datetime(df["dataHoraCotacao"]) df = df.sort_values("dataHoraCotacao")# Preencher dias sem cotação (feriados ou fins de semana) com o valor anterior df = df.set_index("dataHoraCotacao").asfreq("D", method="ffill").reset_index()# Criar o gráfico com Plotly fig = px.line( df, x="dataHoraCotacao", y=["cotacaoCompra", "cotacaoVenda"], title=f"Cotação do Dólar - {data_inicial.strftime('%B/%Y')}", labels={"dataHoraCotacao": "Data","value": "Cotação (R$)","variable": "Tipo de Cotação" } )# Ajustes visuais fig.update_layout( title_x=0.5, legend_title_text="", template="plotly_white" )# Exibir o gráfico fig.show()
Executando o código
Para testar, basta chamar a função passando o mês e o ano desejados:
cotacao_dolar_periodo("082021")
Isso vai gerar um gráfico interativo mostrando a variação da cotação de compra e venda do dólar ao longo de agosto de 2021.
O que o código faz automaticamente
Calcula o primeiro e o último dia do mês informado.
Monta a URL da API PTAX do Banco Central com essas datas.
Busca as cotações diárias de compra e venda.
Preenche dias sem cotação (como finais de semana e feriados) com o valor do dia anterior.
Cria um gráfico interativo com as duas linhas (compra e venda).