Cotação do Dólar

API
code
Author

Anielly Miranda

Published

November 20, 2025

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.

  1. 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

  1. 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 requests
import pandas as pd
import calendar
from datetime import datetime, timedelta
import plotly.express as px

def 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.")
        return None

    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.")
        return None

    # 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()
  1. 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.

  1. 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).