Pular para conteúdo

Visão Geral

auctions(start=None, end=None, auction_type=None)

Dados de leilões de títulos públicos federais do BCB.

Fonte: Banco Central do Brasil. Disponível desde 12/11/2012.

Se ambos start e end forem omitidos, retorna a série histórica completa. Se apenas um for informado, a API do BCB usa o início ou fim do histórico como limite.

Parameters:

Name Type Description Default
start DateLike | None

Data de início. Padrão é None.

None
end DateLike | None

Data de fim. Padrão é None.

None
auction_type Literal['sell', 'buy'] | None

Tipo de leilão ("sell" = venda, "buy" = compra). Padrão é None (todos).

None

Returns:

Type Description
DataFrame

DataFrame com dados de leilões, ou DataFrame vazio

DataFrame

se não houver dados.

Output Columns
  • data_leilao (Date): data do leilão.
  • data_liquidacao (Date): data de liquidação.
  • tipo_leilao (String): "Venda" ou "Compra".
  • numero_edital (Int64): edital normativo.
  • tipo_publico (String): categoria do comprador.
  • titulo (String): sigla do título (LTN, LFT, NTN-B, NTN-F).
  • codigo_selic (Int64): código no sistema Selic.
  • data_vencimento (Date): data de vencimento.
  • dias_uteis (Int32): dias úteis até o vencimento.
  • duration (Float64): duração de Macaulay em anos.
  • prazo_medio (Float64): prazo médio em anos.
  • pu_medio (Float64): PU médio no leilão.
  • pu_corte (Float64): PU de corte.
  • taxa_media (Float64): taxa média (decimal).
  • taxa_corte (Float64): taxa de corte (decimal).
  • dv01_1v (Float64): DV01 da 1ª volta em R$.
  • dv01_2v (Float64): DV01 da 2ª volta em R$.
  • dv01_total (Float64): DV01 total em R$.
  • ptax (Float64): PTAX (venda) para conversão USD.
  • dv01_1v_usd (Float64): DV01 da 1ª volta em USD.
  • dv01_2v_usd (Float64): DV01 da 2ª volta em USD.
  • dv01_total_usd (Float64): DV01 total em USD.
  • quantidade_liquidada_1v (Int64): qtd liquidada 1ª volta.
  • quantidade_liquidada_2v (Int64): qtd liquidada 2ª volta.
  • quantidade_liquidada_total (Int64): qtd total liquidada.
  • quantidade_ofertada_1v (Int64): qtd ofertada 1ª volta.
  • quantidade_ofertada_2v (Int64): qtd ofertada 2ª volta.
  • quantidade_ofertada_total (Int64): qtd total ofertada.
  • quantidade_aceita_1v (Int64): qtd aceita 1ª volta.
  • quantidade_aceita_2v (Int64): qtd aceita 2ª volta.
  • quantidade_aceita_total (Int64): qtd total aceita.
  • financeiro_1v (Int64): financeiro 1ª volta em R$.
  • financeiro_2v (Int64): financeiro 2ª volta em R$.
  • financeiro_total (Int64): financeiro total em R$.
Notes

1v = primeira volta (rodada), 2v = segunda volta.

Examples:

>>> from pyield import bc
>>> bc.auctions(start="19-08-2025", end="19-08-2025")
shape: (5, 34)
┌─────────────┬─────────────────┬─────────────┬───────────────┬───┬─────────────────────────┬───────────────┬───────────────┬──────────────────┐
│ data_leilao ┆ data_liquidacao ┆ tipo_leilao ┆ numero_edital ┆ … ┆ quantidade_aceita_total ┆ financeiro_1v ┆ financeiro_2v ┆ financeiro_total │
│ ---         ┆ ---             ┆ ---         ┆ ---           ┆   ┆ ---                     ┆ ---           ┆ ---           ┆ ---              │
│ date        ┆ date            ┆ str         ┆ i64           ┆   ┆ i64                     ┆ i64           ┆ i64           ┆ i64              │
╞═════════════╪═════════════════╪═════════════╪═══════════════╪═══╪═════════════════════════╪═══════════════╪═══════════════╪══════════════════╡
│ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 192           ┆ … ┆ 150000                  ┆ 2572400000    ┆ 0             ┆ 2572400000       │
│ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 192           ┆ … ┆ 751003                  ┆ 12804476147   ┆ 17123853      ┆ 12821600000      │
│ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 193           ┆ … ┆ 300759                  ┆ 1289936461    ┆ 3263539       ┆ 1293200000       │
│ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 194           ┆ … ┆ 500542                  ┆ 2071654327    ┆ 2245673       ┆ 2073900000       │
│ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 194           ┆ … ┆ 500000                  ┆ 2010700000    ┆ 0             ┆ 2010700000       │
└─────────────┴─────────────────┴─────────────┴───────────────┴───┴─────────────────────────┴───────────────┴───────────────┴──────────────────┘
Source code in pyield/bc/auction.py
def auctions(
    start: DateLike | None = None,
    end: DateLike | None = None,
    auction_type: Literal["sell", "buy"] | None = None,
) -> pl.DataFrame:
    """Dados de leilões de títulos públicos federais do BCB.

    Fonte: Banco Central do Brasil. Disponível desde 12/11/2012.

    Se ambos `start` e `end` forem omitidos, retorna a série
    histórica completa. Se apenas um for informado, a API do BCB
    usa o início ou fim do histórico como limite.

    Args:
        start: Data de início. Padrão é ``None``.
        end: Data de fim. Padrão é ``None``.
        auction_type: Tipo de leilão (``"sell"`` = venda,
            ``"buy"`` = compra). Padrão é ``None`` (todos).

    Returns:
        DataFrame com dados de leilões, ou DataFrame vazio
        se não houver dados.

    Output Columns:
        * data_leilao (Date): data do leilão.
        * data_liquidacao (Date): data de liquidação.
        * tipo_leilao (String): "Venda" ou "Compra".
        * numero_edital (Int64): edital normativo.
        * tipo_publico (String): categoria do comprador.
        * titulo (String): sigla do título (LTN, LFT, NTN-B, NTN-F).
        * codigo_selic (Int64): código no sistema Selic.
        * data_vencimento (Date): data de vencimento.
        * dias_uteis (Int32): dias úteis até o vencimento.
        * duration (Float64): duração de Macaulay em anos.
        * prazo_medio (Float64): prazo médio em anos.
        * pu_medio (Float64): PU médio no leilão.
        * pu_corte (Float64): PU de corte.
        * taxa_media (Float64): taxa média (decimal).
        * taxa_corte (Float64): taxa de corte (decimal).
        * dv01_1v (Float64): DV01 da 1ª volta em R$.
        * dv01_2v (Float64): DV01 da 2ª volta em R$.
        * dv01_total (Float64): DV01 total em R$.
        * ptax (Float64): PTAX (venda) para conversão USD.
        * dv01_1v_usd (Float64): DV01 da 1ª volta em USD.
        * dv01_2v_usd (Float64): DV01 da 2ª volta em USD.
        * dv01_total_usd (Float64): DV01 total em USD.
        * quantidade_liquidada_1v (Int64): qtd liquidada 1ª volta.
        * quantidade_liquidada_2v (Int64): qtd liquidada 2ª volta.
        * quantidade_liquidada_total (Int64): qtd total liquidada.
        * quantidade_ofertada_1v (Int64): qtd ofertada 1ª volta.
        * quantidade_ofertada_2v (Int64): qtd ofertada 2ª volta.
        * quantidade_ofertada_total (Int64): qtd total ofertada.
        * quantidade_aceita_1v (Int64): qtd aceita 1ª volta.
        * quantidade_aceita_2v (Int64): qtd aceita 2ª volta.
        * quantidade_aceita_total (Int64): qtd total aceita.
        * financeiro_1v (Int64): financeiro 1ª volta em R$.
        * financeiro_2v (Int64): financeiro 2ª volta em R$.
        * financeiro_total (Int64): financeiro total em R$.

    Notes:
        1v = primeira volta (rodada), 2v = segunda volta.

    Examples:
        >>> from pyield import bc
        >>> bc.auctions(start="19-08-2025", end="19-08-2025")
        shape: (5, 34)
        ┌─────────────┬─────────────────┬─────────────┬───────────────┬───┬─────────────────────────┬───────────────┬───────────────┬──────────────────┐
        │ data_leilao ┆ data_liquidacao ┆ tipo_leilao ┆ numero_edital ┆ … ┆ quantidade_aceita_total ┆ financeiro_1v ┆ financeiro_2v ┆ financeiro_total │
        │ ---         ┆ ---             ┆ ---         ┆ ---           ┆   ┆ ---                     ┆ ---           ┆ ---           ┆ ---              │
        │ date        ┆ date            ┆ str         ┆ i64           ┆   ┆ i64                     ┆ i64           ┆ i64           ┆ i64              │
        ╞═════════════╪═════════════════╪═════════════╪═══════════════╪═══╪═════════════════════════╪═══════════════╪═══════════════╪══════════════════╡
        │ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 192           ┆ … ┆ 150000                  ┆ 2572400000    ┆ 0             ┆ 2572400000       │
        │ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 192           ┆ … ┆ 751003                  ┆ 12804476147   ┆ 17123853      ┆ 12821600000      │
        │ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 193           ┆ … ┆ 300759                  ┆ 1289936461    ┆ 3263539       ┆ 1293200000       │
        │ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 194           ┆ … ┆ 500542                  ┆ 2071654327    ┆ 2245673       ┆ 2073900000       │
        │ 2025-08-19  ┆ 2025-08-20      ┆ Venda       ┆ 194           ┆ … ┆ 500000                  ┆ 2010700000    ┆ 0             ┆ 2010700000       │
        └─────────────┴─────────────────┴─────────────┴───────────────┴───┴─────────────────────────┴───────────────┴───────────────┴──────────────────┘
    """
    url = _montar_url(inicio=start, fim=end, tipo_leilao=auction_type)
    dados = _buscar_csv(url)
    df = _parsear_df(dados)
    if df.is_empty():
        return pl.DataFrame()
    df = _processar_df(df)
    df = _adicionar_dv01_usd(df)
    return df.select(ORDEM_COLUNAS_FINAL).sort(CHAVES_ORDENACAO)

di_over(date, annualized=True)

Taxa DI Over para uma data específica.

Parameters:

Name Type Description Default
date DateLike

Data de referência.

required
annualized bool

Se True, retorna a taxa anualizada (base 252 d.u.). Caso contrário, retorna a taxa diária.

True

Returns:

Type Description
float

Taxa DI Over ou nan se não disponível.

Examples:

>>> from pyield import bc
>>> bc.di_over("31-05-2024")
0.104
>>> bc.di_over("28-01-2025", annualized=False)
0.00045513
Source code in pyield/bc/rates.py
def di_over(date: DateLike, annualized: bool = True) -> float:
    """Taxa DI Over para uma data específica.

    Args:
        date: Data de referência.
        annualized: Se ``True``, retorna a taxa anualizada (base
            252 d.u.). Caso contrário, retorna a taxa diária.

    Returns:
        Taxa DI Over ou ``nan`` se não disponível.

    Examples:
        >>> from pyield import bc
        >>> bc.di_over("31-05-2024")
        0.104

        >>> bc.di_over("28-01-2025", annualized=False)
        0.00045513
    """
    if any_is_empty(date):
        return float("nan")
    return _extrair_taxa(di_over_series(date, date, annualized))

di_over_series(start, end=None, annualized=True)

Taxa DI Over (série SGS 11).

Taxa de juros média dos empréstimos interbancários.

Parameters:

Name Type Description Default
start DateLike

Data inicial.

required
end DateLike | None

Data final. Se None, usa a data mais recente.

None
annualized bool

Se True, retorna a taxa anualizada (base 252 d.u.). Caso contrário, retorna a taxa diária.

True

Returns:

Type Description
DataFrame

DataFrame com colunas data e taxa, ou DataFrame vazio.

Examples:

>>> from pyield import bc
>>> # Retorna todos os dados desde 29-01-2025
>>> bc.di_over_series("29-01-2025").head(5)  # Primeiras 5 linhas
shape: (5, 2)
┌────────────┬────────┐
│ data       ┆ taxa   │
│ ---        ┆ ---    │
│ date       ┆ f64    │
╞════════════╪════════╡
│ 2025-01-29 ┆ 0.1215 │
│ 2025-01-30 ┆ 0.1315 │
│ 2025-01-31 ┆ 0.1315 │
│ 2025-02-03 ┆ 0.1315 │
│ 2025-02-04 ┆ 0.1315 │
└────────────┴────────┘
Source code in pyield/bc/rates.py
def di_over_series(
    start: DateLike,
    end: DateLike | None = None,
    annualized: bool = True,
) -> pl.DataFrame:
    """Taxa DI Over (série SGS 11).

    Taxa de juros média dos empréstimos interbancários.

    Args:
        start: Data inicial.
        end: Data final. Se ``None``, usa a data mais recente.
        annualized: Se ``True``, retorna a taxa anualizada (base
            252 d.u.). Caso contrário, retorna a taxa diária.

    Returns:
        DataFrame com colunas data e taxa, ou DataFrame vazio.

    Examples:
        >>> from pyield import bc
        >>> # Retorna todos os dados desde 29-01-2025
        >>> bc.di_over_series("29-01-2025").head(5)  # Primeiras 5 linhas
        shape: (5, 2)
        ┌────────────┬────────┐
        │ data       ┆ taxa   │
        │ ---        ┆ ---    │
        │ date       ┆ f64    │
        ╞════════════╪════════╡
        │ 2025-01-29 ┆ 0.1215 │
        │ 2025-01-30 ┆ 0.1315 │
        │ 2025-01-31 ┆ 0.1315 │
        │ 2025-02-03 ┆ 0.1315 │
        │ 2025-02-04 ┆ 0.1315 │
        └────────────┴────────┘
    """
    if any_is_empty(start):
        return pl.DataFrame()
    df = _buscar_dados_url(SerieBC.DI_OVER, start, end)
    if annualized:
        return df.with_columns(
            taxa=(((pl.col("taxa") + 1).pow(252)) - 1).round(CASAS_DECIMAIS_ANUALIZADA)
        )
    return df.with_columns(taxa=pl.col("taxa").round(CASAS_DECIMAIS_DIARIA))

ptax(date)

Cotação PTAX média de fechamento para uma data específica.

Parameters:

Name Type Description Default
date DateLike

Data desejada.

required

Returns:

Type Description
float

Taxa média (cotacao_media) do dia, ou nan se não

float

houver cotação (feriado, fim de semana ou data futura).

Examples:

>>> from pyield import bc
>>> # Busca a PTAX para um dia útil
>>> bc.ptax("22-08-2025")
5.4389
>>> # Busca a PTAX para um fim de semana (sem dados)
>>> bc.ptax("23-08-2025")
nan
Source code in pyield/bc/ptax_api.py
def ptax(date: DateLike) -> float:
    """Cotação PTAX média de fechamento para uma data específica.

    Args:
        date: Data desejada.

    Returns:
        Taxa média (cotacao_media) do dia, ou ``nan`` se não
        houver cotação (feriado, fim de semana ou data futura).

    Examples:
        >>> from pyield import bc
        >>> # Busca a PTAX para um dia útil
        >>> bc.ptax("22-08-2025")
        5.4389

        >>> # Busca a PTAX para um fim de semana (sem dados)
        >>> bc.ptax("23-08-2025")
        nan
    """
    dados_ptax = ptax_series(start=date, end=date)
    if dados_ptax.is_empty():
        return float("nan")
    return dados_ptax["cotacao_media"].item(0)

ptax_series(start=None, end=None)

Cotações de fechamento do Dólar PTAX (taxa de câmbio).

Fonte: Banco Central do Brasil (BCB). Frequência diária.

Se start não for informado, usa 28.11.1984 (primeira data disponível). Se end não for informado, usa a data de hoje.

Parameters:

Name Type Description Default
start DateLike | None

Data de início da consulta. Padrão é None.

None
end DateLike | None

Data de fim da consulta. Padrão é None.

None

Returns:

Type Description
DataFrame

DataFrame com as cotações do período, ou DataFrame vazio

DataFrame

se não houver dados.

Output Columns
  • data (Date): data da cotação.
  • hora (Time): hora da cotação.
  • cotacao_compra (Float64): taxa de compra em R$.
  • cotacao_venda (Float64): taxa de venda em R$.
  • cotacao_media (Float64): média de compra/venda (5 casas).
Notes

Disponível desde 28.11.1984; refere-se às taxas administradas até março de 1990 e às taxas livres a partir de então (Resolução 1690, de 18.3.1990). A partir de março de 1992, essa taxa recebeu a denominação PTAX. Desde 1 de julho de 2011 (Circular 3506), a PTAX corresponde à média aritmética das taxas obtidas em quatro consultas diárias aos dealers de câmbio.

Documentação da API: https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/documentacao

Examples:

>>> from pyield import bc
>>> bc.ptax_series(start="20-04-2025", end="25-04-2025")
shape: (4, 5)
┌────────────┬──────────────┬────────────────┬───────────────┬───────────────┐
│ data       ┆ hora         ┆ cotacao_compra ┆ cotacao_venda ┆ cotacao_media │
│ ---        ┆ ---          ┆ ---            ┆ ---           ┆ ---           │
│ date       ┆ time         ┆ f64            ┆ f64           ┆ f64           │
╞════════════╪══════════════╪════════════════╪═══════════════╪═══════════════╡
│ 2025-04-22 ┆ 13:09:35.629 ┆ 5.749          ┆ 5.7496        ┆ 5.7493        │
│ 2025-04-23 ┆ 13:06:30.443 ┆ 5.6874         ┆ 5.688         ┆ 5.6877        │
│ 2025-04-24 ┆ 13:04:29.639 ┆ 5.6732         ┆ 5.6738        ┆ 5.6735        │
│ 2025-04-25 ┆ 13:09:26.592 ┆ 5.684          ┆ 5.6846        ┆ 5.6843        │
└────────────┴──────────────┴────────────────┴───────────────┴───────────────┘
>>> bc.ptax_series(start="02-01-1995", end="06-01-1995")
shape: (5, 5)
┌────────────┬──────────┬────────────────┬───────────────┬───────────────┐
│ data       ┆ hora     ┆ cotacao_compra ┆ cotacao_venda ┆ cotacao_media │
│ ---        ┆ ---      ┆ ---            ┆ ---           ┆ ---           │
│ date       ┆ time     ┆ f64            ┆ f64           ┆ f64           │
╞════════════╪══════════╪════════════════╪═══════════════╪═══════════════╡
│ 1995-01-02 ┆ 18:20:00 ┆ 0.843          ┆ 0.845         ┆ 0.844         │
│ 1995-01-03 ┆ 18:25:00 ┆ 0.844          ┆ 0.846         ┆ 0.845         │
│ 1995-01-04 ┆ 18:12:00 ┆ 0.844          ┆ 0.846         ┆ 0.845         │
│ 1995-01-05 ┆ 18:07:00 ┆ 0.842          ┆ 0.844         ┆ 0.843         │
│ 1995-01-06 ┆ 18:12:00 ┆ 0.839          ┆ 0.841         ┆ 0.84          │
└────────────┴──────────┴────────────────┴───────────────┴───────────────┘
Source code in pyield/bc/ptax_api.py
def ptax_series(
    start: DateLike | None = None,
    end: DateLike | None = None,
) -> pl.DataFrame:
    """Cotações de fechamento do Dólar PTAX (taxa de câmbio).

    Fonte: Banco Central do Brasil (BCB). Frequência diária.

    Se `start` não for informado, usa 28.11.1984 (primeira data
    disponível). Se `end` não for informado, usa a data de hoje.

    Args:
        start: Data de início da consulta. Padrão é ``None``.
        end: Data de fim da consulta. Padrão é ``None``.

    Returns:
        DataFrame com as cotações do período, ou DataFrame vazio
        se não houver dados.

    Output Columns:
        * data (Date): data da cotação.
        * hora (Time): hora da cotação.
        * cotacao_compra (Float64): taxa de compra em R$.
        * cotacao_venda (Float64): taxa de venda em R$.
        * cotacao_media (Float64): média de compra/venda (5 casas).

    Notes:
        Disponível desde 28.11.1984; refere-se às taxas
        administradas até março de 1990 e às taxas livres a
        partir de então (Resolução 1690, de 18.3.1990). A
        partir de março de 1992, essa taxa recebeu a
        denominação PTAX. Desde 1 de julho de 2011 (Circular
        3506), a PTAX corresponde à média aritmética das
        taxas obtidas em quatro consultas diárias aos dealers
        de câmbio.

        Documentação da API:
        https://olinda.bcb.gov.br/olinda/servico/PTAX/versao/v1/documentacao

    Examples:
        >>> from pyield import bc
        >>> bc.ptax_series(start="20-04-2025", end="25-04-2025")
        shape: (4, 5)
        ┌────────────┬──────────────┬────────────────┬───────────────┬───────────────┐
        │ data       ┆ hora         ┆ cotacao_compra ┆ cotacao_venda ┆ cotacao_media │
        │ ---        ┆ ---          ┆ ---            ┆ ---           ┆ ---           │
        │ date       ┆ time         ┆ f64            ┆ f64           ┆ f64           │
        ╞════════════╪══════════════╪════════════════╪═══════════════╪═══════════════╡
        │ 2025-04-22 ┆ 13:09:35.629 ┆ 5.749          ┆ 5.7496        ┆ 5.7493        │
        │ 2025-04-23 ┆ 13:06:30.443 ┆ 5.6874         ┆ 5.688         ┆ 5.6877        │
        │ 2025-04-24 ┆ 13:04:29.639 ┆ 5.6732         ┆ 5.6738        ┆ 5.6735        │
        │ 2025-04-25 ┆ 13:09:26.592 ┆ 5.684          ┆ 5.6846        ┆ 5.6843        │
        └────────────┴──────────────┴────────────────┴───────────────┴───────────────┘

        >>> bc.ptax_series(start="02-01-1995", end="06-01-1995")
        shape: (5, 5)
        ┌────────────┬──────────┬────────────────┬───────────────┬───────────────┐
        │ data       ┆ hora     ┆ cotacao_compra ┆ cotacao_venda ┆ cotacao_media │
        │ ---        ┆ ---      ┆ ---            ┆ ---           ┆ ---           │
        │ date       ┆ time     ┆ f64            ┆ f64           ┆ f64           │
        ╞════════════╪══════════╪════════════════╪═══════════════╪═══════════════╡
        │ 1995-01-02 ┆ 18:20:00 ┆ 0.843          ┆ 0.845         ┆ 0.844         │
        │ 1995-01-03 ┆ 18:25:00 ┆ 0.844          ┆ 0.846         ┆ 0.845         │
        │ 1995-01-04 ┆ 18:12:00 ┆ 0.844          ┆ 0.846         ┆ 0.845         │
        │ 1995-01-05 ┆ 18:07:00 ┆ 0.842          ┆ 0.844         ┆ 0.843         │
        │ 1995-01-06 ┆ 18:12:00 ┆ 0.839          ┆ 0.841         ┆ 0.84          │
        └────────────┴──────────┴────────────────┴───────────────┴───────────────┘
    """
    if start:
        start = cv.converter_datas(start)
    else:
        start = dt.date(1984, 11, 28)  # Primeira data disponível na API

    if end:
        end = cv.converter_datas(end)
    else:
        end = clock.today()

    url = _montar_url_api(start, end)
    texto = _buscar_texto_api(url)
    df = _parsear_df(texto)
    if df.is_empty():
        return pl.DataFrame()
    return _processar_df(df)

repos(start=None, end=None)

Consulta e retorna leilões de operações compromissadas (repos) do BCB.

Semântica dos parâmetros de período (API OData): - start somente: dados de start até o fim da série. - end somente: dados do início da série até end. - ambos omitidos: série histórica completa.

Parameters:

Name Type Description Default
start DateLike | None

Data inicial (inclusive) ou None.

None
end DateLike | None

Data final (inclusive) ou None.

None

Returns:

Type Description
DataFrame

DataFrame com colunas normalizadas em português e tipos

DataFrame

enriquecidos (frações decimais, inteiros, datas).

Output Columns
  • data_leilao (Date): data de ocorrência do leilão.
  • data_liquidacao (Date): data de liquidação (início da operação).
  • data_retorno (Date): data de recompra / término da operação.
  • hora_inicio (Time): horário de início do leilão.
  • prazo_dias_corridos (Int64): dias corridos até a data de retorno.
  • prazo_dias_uteis (Int64): dias úteis entre liquidação e retorno (bday.count).
  • numero_comunicado (Int64): número do comunicado/aviso do BC (pode ser nulo).
  • tipo_oferta (String): classif. do tipo de oferta (ex: Tomador, Compromissada 1047).
  • publico_permitido (String): escopo de participantes (SomenteDealer, TodoMercado).
  • volume_aceito (Int64): volume aceito no leilão em reais (convertido de milhares).
  • taxa_corte (Float64): taxa de corte (ex. 0.1490 = 14,90%). Nula se volume_aceito = 0.
  • percentual_aceito (Float64): percentual do volume ofertado efetivamente aceito (0-100). 100 = nenhuma rejeição. 0 indica nada aceito (volume_aceito = 0).
Notes
  • Dados ordenados por: data_leilao, hora_inicio, tipo_oferta.

Examples:

>>> from pyield import bc
>>> bc.repos(start="21-08-2025", end="21-08-2025")
shape: (2, 12)
┌─────────────┬─────────────────┬──────────────┬─────────────┬───┬───────────────────┬───────────────┬────────────┬───────────────────┐
│ data_leilao ┆ data_liquidacao ┆ data_retorno ┆ hora_inicio ┆ … ┆ publico_permitido ┆ volume_aceito ┆ taxa_corte ┆ percentual_aceito │
│ ---         ┆ ---             ┆ ---          ┆ ---         ┆   ┆ ---               ┆ ---           ┆ ---        ┆ ---               │
│ date        ┆ date            ┆ date         ┆ time        ┆   ┆ str               ┆ i64           ┆ f64        ┆ f64               │
╞═════════════╪═════════════════╪══════════════╪═════════════╪═══╪═══════════════════╪═══════════════╪════════════╪═══════════════════╡
│ 2025-08-21  ┆ 2025-08-21      ┆ 2025-08-22   ┆ 09:00:00    ┆ … ┆ SomenteDealer     ┆ 647707406000  ┆ 0.149      ┆ 100.0             │
│ 2025-08-21  ┆ 2025-08-22      ┆ 2025-11-21   ┆ 12:00:00    ┆ … ┆ TodoMercado       ┆ 5000000000    ┆ 0.9978     ┆ 35.87             │
└─────────────┴─────────────────┴──────────────┴─────────────┴───┴───────────────────┴───────────────┴────────────┴───────────────────┘
Source code in pyield/bc/repo.py
def repos(
    start: DateLike | None = None,
    end: DateLike | None = None,
) -> pl.DataFrame:
    """Consulta e retorna leilões de operações compromissadas (repos) do BCB.

    Semântica dos parâmetros de período (API OData):
        - start somente: dados de start até o fim da série.
        - end somente: dados do início da série até end.
        - ambos omitidos: série histórica completa.

    Args:
        start: Data inicial (inclusive) ou None.
        end: Data final (inclusive) ou None.

    Returns:
        DataFrame com colunas normalizadas em português e tipos
        enriquecidos (frações decimais, inteiros, datas).

    Output Columns:
        - data_leilao (Date): data de ocorrência do leilão.
        - data_liquidacao (Date): data de liquidação (início da operação).
        - data_retorno (Date): data de recompra / término da operação.
        - hora_inicio (Time): horário de início do leilão.
        - prazo_dias_corridos (Int64): dias corridos até a data de retorno.
        - prazo_dias_uteis (Int64): dias úteis entre liquidação e retorno (bday.count).
        - numero_comunicado (Int64): número do comunicado/aviso do BC (pode ser nulo).
        - tipo_oferta (String): classif. do tipo de oferta (ex: Tomador, Compromissada 1047).
        - publico_permitido (String): escopo de participantes (SomenteDealer, TodoMercado).
        - volume_aceito (Int64): volume aceito no leilão em reais (convertido de milhares).
        - taxa_corte (Float64): taxa de corte (ex. 0.1490 = 14,90%). Nula se volume_aceito = 0.
        - percentual_aceito (Float64): percentual do volume ofertado efetivamente aceito (0-100).
          100 = nenhuma rejeição. 0 indica nada aceito (volume_aceito = 0).

    Notes:
        - Dados ordenados por: data_leilao, hora_inicio, tipo_oferta.

    Examples:
        >>> from pyield import bc
        >>> bc.repos(start="21-08-2025", end="21-08-2025")
        shape: (2, 12)
        ┌─────────────┬─────────────────┬──────────────┬─────────────┬───┬───────────────────┬───────────────┬────────────┬───────────────────┐
        │ data_leilao ┆ data_liquidacao ┆ data_retorno ┆ hora_inicio ┆ … ┆ publico_permitido ┆ volume_aceito ┆ taxa_corte ┆ percentual_aceito │
        │ ---         ┆ ---             ┆ ---          ┆ ---         ┆   ┆ ---               ┆ ---           ┆ ---        ┆ ---               │
        │ date        ┆ date            ┆ date         ┆ time        ┆   ┆ str               ┆ i64           ┆ f64        ┆ f64               │
        ╞═════════════╪═════════════════╪══════════════╪═════════════╪═══╪═══════════════════╪═══════════════╪════════════╪═══════════════════╡
        │ 2025-08-21  ┆ 2025-08-21      ┆ 2025-08-22   ┆ 09:00:00    ┆ … ┆ SomenteDealer     ┆ 647707406000  ┆ 0.149      ┆ 100.0             │
        │ 2025-08-21  ┆ 2025-08-22      ┆ 2025-11-21   ┆ 12:00:00    ┆ … ┆ TodoMercado       ┆ 5000000000    ┆ 0.9978     ┆ 35.87             │
        └─────────────┴─────────────────┴──────────────┴─────────────┴───┴───────────────────┴───────────────┴────────────┴───────────────────┘
    """
    url = _montar_url(inicio=start, fim=end)
    csv_api = _buscar_csv_api(url)
    df = _ler_csv(csv_api)
    if df.is_empty():
        return pl.DataFrame()
    return _processar_df(df)

selic_over(date)

Taxa SELIC Over para uma data específica.

Parameters:

Name Type Description Default
date DateLike

Data de referência.

required

Returns:

Type Description
float

Taxa SELIC Over ou nan se não disponível.

Examples:

>>> from pyield import bc
>>> bc.selic_over("31-05-2024")
0.104
Source code in pyield/bc/rates.py
def selic_over(date: DateLike) -> float:
    """Taxa SELIC Over para uma data específica.

    Args:
        date: Data de referência.

    Returns:
        Taxa SELIC Over ou ``nan`` se não disponível.

    Examples:
        >>> from pyield import bc
        >>> bc.selic_over("31-05-2024")
        0.104
    """
    if any_is_empty(date):
        return float("nan")
    return _extrair_taxa(selic_over_series(date, date))

selic_over_series(start, end=None)

Taxa SELIC Over (série SGS 1178).

Taxa de juros média diária praticada no mercado interbancário, com títulos públicos como garantia.

Parameters:

Name Type Description Default
start DateLike

Data inicial.

required
end DateLike | None

Data final. Se None, usa a data mais recente.

None

Returns:

Type Description
DataFrame

DataFrame com colunas data e taxa, ou DataFrame vazio.

Examples:

>>> from pyield import bc
>>> # Sem dados em 26-01-2025 (domingo). Selic mudou por reunião do Copom.
>>> bc.selic_over_series("26-01-2025").head(5)  # Primeiras 5 linhas
shape: (5, 2)
┌────────────┬────────┐
│ data       ┆ taxa   │
│ ---        ┆ ---    │
│ date       ┆ f64    │
╞════════════╪════════╡
│ 2025-01-27 ┆ 0.1215 │
│ 2025-01-28 ┆ 0.1215 │
│ 2025-01-29 ┆ 0.1215 │
│ 2025-01-30 ┆ 0.1315 │
│ 2025-01-31 ┆ 0.1315 │
└────────────┴────────┘
>>> # Buscando dados para um intervalo específico
>>> bc.selic_over_series("14-09-2025", "17-09-2025")
shape: (3, 2)
┌────────────┬───────┐
│ data       ┆ taxa  │
│ ---        ┆ ---   │
│ date       ┆ f64   │
╞════════════╪═══════╡
│ 2025-09-15 ┆ 0.149 │
│ 2025-09-16 ┆ 0.149 │
│ 2025-09-17 ┆ 0.149 │
└────────────┴───────┘
Source code in pyield/bc/rates.py
def selic_over_series(
    start: DateLike,
    end: DateLike | None = None,
) -> pl.DataFrame:
    """Taxa SELIC Over (série SGS 1178).

    Taxa de juros média diária praticada no mercado interbancário,
    com títulos públicos como garantia.

    Args:
        start: Data inicial.
        end: Data final. Se ``None``, usa a data mais recente.

    Returns:
        DataFrame com colunas data e taxa, ou DataFrame vazio.

    Examples:
        >>> from pyield import bc
        >>> # Sem dados em 26-01-2025 (domingo). Selic mudou por reunião do Copom.
        >>> bc.selic_over_series("26-01-2025").head(5)  # Primeiras 5 linhas
        shape: (5, 2)
        ┌────────────┬────────┐
        │ data       ┆ taxa   │
        │ ---        ┆ ---    │
        │ date       ┆ f64    │
        ╞════════════╪════════╡
        │ 2025-01-27 ┆ 0.1215 │
        │ 2025-01-28 ┆ 0.1215 │
        │ 2025-01-29 ┆ 0.1215 │
        │ 2025-01-30 ┆ 0.1315 │
        │ 2025-01-31 ┆ 0.1315 │
        └────────────┴────────┘

        >>> # Buscando dados para um intervalo específico
        >>> bc.selic_over_series("14-09-2025", "17-09-2025")
        shape: (3, 2)
        ┌────────────┬───────┐
        │ data       ┆ taxa  │
        │ ---        ┆ ---   │
        │ date       ┆ f64   │
        ╞════════════╪═══════╡
        │ 2025-09-15 ┆ 0.149 │
        │ 2025-09-16 ┆ 0.149 │
        │ 2025-09-17 ┆ 0.149 │
        └────────────┴───────┘
    """
    if any_is_empty(start):  # start deve ser fornecido
        return pl.DataFrame()
    df = _buscar_dados_url(SerieBC.SELIC_OVER, start, end)
    return df.with_columns(pl.col("taxa").round(CASAS_DECIMAIS_ANUALIZADA))

selic_target(date)

Taxa SELIC Meta para uma data específica.

Parameters:

Name Type Description Default
date DateLike

Data de referência.

required

Returns:

Type Description
float

Taxa SELIC Meta ou nan se não disponível.

Examples:

>>> from pyield import bc
>>> bc.selic_target("31-05-2024")
0.105
Source code in pyield/bc/rates.py
def selic_target(date: DateLike) -> float:
    """Taxa SELIC Meta para uma data específica.

    Args:
        date: Data de referência.

    Returns:
        Taxa SELIC Meta ou ``nan`` se não disponível.

    Examples:
        >>> from pyield import bc
        >>> bc.selic_target("31-05-2024")
        0.105
    """
    if any_is_empty(date):
        return float("nan")
    return _extrair_taxa(selic_target_series(date, date))

selic_target_series(start, end=None)

Taxa SELIC Meta (série SGS 432).

Taxa de juros oficial definida pelo COPOM.

Parameters:

Name Type Description Default
start DateLike

Data inicial.

required
end DateLike | None

Data final. Se None, usa a data mais recente.

None

Returns:

Type Description
DataFrame

DataFrame com colunas data e taxa, ou DataFrame vazio.

Examples:

>>> from pyield import bc
>>> bc.selic_target_series("31-05-2024", "31-05-2024")
shape: (1, 2)
┌────────────┬───────┐
│ data       ┆ taxa  │
│ ---        ┆ ---   │
│ date       ┆ f64   │
╞════════════╪═══════╡
│ 2024-05-31 ┆ 0.105 │
└────────────┴───────┘
Source code in pyield/bc/rates.py
def selic_target_series(
    start: DateLike,
    end: DateLike | None = None,
) -> pl.DataFrame:
    """Taxa SELIC Meta (série SGS 432).

    Taxa de juros oficial definida pelo COPOM.

    Args:
        start: Data inicial.
        end: Data final. Se ``None``, usa a data mais recente.

    Returns:
        DataFrame com colunas data e taxa, ou DataFrame vazio.

    Examples:
        >>> from pyield import bc
        >>> bc.selic_target_series("31-05-2024", "31-05-2024")
        shape: (1, 2)
        ┌────────────┬───────┐
        │ data       ┆ taxa  │
        │ ---        ┆ ---   │
        │ date       ┆ f64   │
        ╞════════════╪═══════╡
        │ 2024-05-31 ┆ 0.105 │
        └────────────┴───────┘
    """
    if any_is_empty(start):
        return pl.DataFrame()
    df = _buscar_dados_url(SerieBC.SELIC_TARGET, start, end)
    return df.with_columns(pl.col("taxa").round(CASAS_DECIMAIS_ANUALIZADA))

tpf_intraday_trades()

Obtém dados intradiários de negociações secundárias da dívida pública federal (TPF - títulos públicos federais) no Banco Central do Brasil (BCB).

Os dados ficam disponíveis apenas durante o horário do SELIC (09:00–22:00 BRT) em dias úteis. Retorna DataFrame vazio fora desse período.

Returns:

Type Description
DataFrame

pl.DataFrame: DataFrame com negociações intradiárias. Vazio se o mercado estiver fechado ou ocorrer erro.

Output Columns
  • data_hora_consulta (Datetime): data e hora da consulta (BRT).
  • data_liquidacao (Date): data de liquidação à vista.
  • titulo (String): sigla do título (ex.: LFT, LTN, NTN-B).
  • codigo_selic (Int64): código SELIC do título.
  • data_vencimento (Date): data de vencimento do título.
  • pu_minimo (Float64): menor preço negociado.
  • pu_medio (Float64): preço médio negociado.
  • pu_maximo (Float64): maior preço negociado.
  • pu_ultimo (Float64): último preço negociado.
  • taxa_minima (Float64): menor taxa negociada (decimal).
  • taxa_media (Float64): taxa média negociada (decimal).
  • taxa_maxima (Float64): maior taxa negociada (decimal).
  • taxa_ultima (Float64): última taxa negociada (decimal).
  • operacoes (Int64): total de operações liquidadas.
  • quantidade (Int64): quantidade total de títulos negociados.
  • financeiro (Float64): valor financeiro total negociado (BRL).
  • operacoes_corretagem (Int64): operações liquidadas via corretagem.
  • quantidade_corretagem (Int64): títulos negociados via corretagem.
  • termo_pu_minimo (Float64): menor preço a termo negociado.
  • termo_pu_medio (Float64): preço médio a termo negociado.
  • termo_pu_ultimo (Float64): último preço a termo negociado.
  • termo_pu_maximo (Float64): maior preço a termo negociado.
  • termo_taxa_ultima (Float64): última taxa a termo negociada (decimal).
  • termo_taxa_minima (Float64): menor taxa a termo negociada (decimal).
  • termo_taxa_media (Float64): taxa média a termo negociada (decimal).
  • termo_taxa_maxima (Float64): maior taxa a termo negociada (decimal).
  • termo_operacoes (Int64): total de operações a termo contratadas.
  • termo_quantidade (Int64): total de títulos a termo negociados.
  • termo_financeiro (Float64): valor financeiro total a termo (BRL).
  • termo_operacoes_corretagem (Int64): operações a termo via corretagem.
  • termo_quantidade_corretagem (Int64): títulos a termo via corretagem.
Notes

Retorna DataFrame vazio fora do horário do SELIC (09:00–22:00 BRT).

Examples:

>>> from pyield import bc
>>> df = bc.tpf_intraday_trades()
Source code in pyield/bc/trades_intraday.py
def tpf_intraday_trades() -> pl.DataFrame:
    """Obtém dados intradiários de negociações secundárias da dívida pública
    federal (TPF - títulos públicos federais) no Banco Central do Brasil (BCB).

    Os dados ficam disponíveis apenas durante o horário do SELIC
    (09:00–22:00 BRT) em dias úteis. Retorna DataFrame vazio fora desse período.

    Returns:
        pl.DataFrame: DataFrame com negociações intradiárias. Vazio se o mercado
            estiver fechado ou ocorrer erro.

    Output Columns:
        - data_hora_consulta (Datetime): data e hora da consulta (BRT).
        - data_liquidacao (Date): data de liquidação à vista.
        - titulo (String): sigla do título (ex.: LFT, LTN, NTN-B).
        - codigo_selic (Int64): código SELIC do título.
        - data_vencimento (Date): data de vencimento do título.
        - pu_minimo (Float64): menor preço negociado.
        - pu_medio (Float64): preço médio negociado.
        - pu_maximo (Float64): maior preço negociado.
        - pu_ultimo (Float64): último preço negociado.
        - taxa_minima (Float64): menor taxa negociada (decimal).
        - taxa_media (Float64): taxa média negociada (decimal).
        - taxa_maxima (Float64): maior taxa negociada (decimal).
        - taxa_ultima (Float64): última taxa negociada (decimal).
        - operacoes (Int64): total de operações liquidadas.
        - quantidade (Int64): quantidade total de títulos negociados.
        - financeiro (Float64): valor financeiro total negociado (BRL).
        - operacoes_corretagem (Int64): operações liquidadas via corretagem.
        - quantidade_corretagem (Int64): títulos negociados via corretagem.
        - termo_pu_minimo (Float64): menor preço a termo negociado.
        - termo_pu_medio (Float64): preço médio a termo negociado.
        - termo_pu_ultimo (Float64): último preço a termo negociado.
        - termo_pu_maximo (Float64): maior preço a termo negociado.
        - termo_taxa_ultima (Float64): última taxa a termo negociada (decimal).
        - termo_taxa_minima (Float64): menor taxa a termo negociada (decimal).
        - termo_taxa_media (Float64): taxa média a termo negociada (decimal).
        - termo_taxa_maxima (Float64): maior taxa a termo negociada (decimal).
        - termo_operacoes (Int64): total de operações a termo contratadas.
        - termo_quantidade (Int64): total de títulos a termo negociados.
        - termo_financeiro (Float64): valor financeiro total a termo (BRL).
        - termo_operacoes_corretagem (Int64): operações a termo via corretagem.
        - termo_quantidade_corretagem (Int64): títulos a termo via corretagem.

    Notes:
        Retorna DataFrame vazio fora do horário do SELIC (09:00–22:00 BRT).

    Examples:
        >>> from pyield import bc
        >>> df = bc.tpf_intraday_trades()
    """
    if not _mercado_selic_aberto():
        return pl.DataFrame()

    texto_bruto = _buscar_csv()
    df = _parsear_df(texto_bruto)
    return _processar_df(df)

tpf_monthly_trades(target_date, extragroup=False)

Consulta negociações mensais no mercado secundário de TPF registradas no sistema Selic do BCB.

Baixa os dados mensais de negociação do site do BCB para o mês correspondente à data fornecida. Os dados são baixados como arquivo ZIP, extraídos e carregados em um DataFrame Polars. Contém todas as negociações do mês, separadas por data de liquidação (data_liquidacao).

Parameters:

Name Type Description Default
target_date DateLike

Data de referência. Apenas ano e mês são utilizados para baixar o arquivo correspondente.

required
extragroup bool

Se True, busca apenas negociações extragrupo (entre grupos econômicos distintos). Se False, busca todas. Default é False. Negociações extragrupo são aquelas em que o conglomerado da contraparte cedente difere do conglomerado da contraparte cessionária, ou quando ao menos uma das contrapartes não pertence a um conglomerado. No caso de fundos, considera-se o conglomerado do administrador.

False

Returns:

Type Description
DataFrame

DataFrame com dados de negociação do mês especificado. Em caso de erro

DataFrame

retorna DataFrame vazio e registra log da exceção.

Output Columns
  • data_liquidacao (Date): data de liquidação da negociação.
  • titulo (str): sigla do título (ex: LFT, LTN, NTN-B, NTN-F).
  • codigo_selic (Int64): código único no sistema Selic.
  • isin (str): código ISIN.
  • data_emissao (Date): data de emissão do título.
  • data_vencimento (Date): data de vencimento do título.
  • operacoes (Int64): número total de operações realizadas.
  • quantidade (Int64): quantidade total negociada.
  • financeiro (Float64): valor financeiro (quantidade × pu_medio).
  • pu_minimo (Float64): preço unitário mínimo.
  • pu_medio (Float64): preço unitário médio.
  • pu_maximo (Float64): preço unitário máximo.
  • pu_lastro (Float64): PU lastro.
  • valor_par (Float64): valor par do título.
  • taxa_minima (Float64): taxa mínima.
  • taxa_media (Float64): taxa média.
  • taxa_maxima (Float64): taxa máxima.
  • operacoes_corretagem (Int64): subconjunto de operações com corretagem.
  • quantidade_corretagem (Int64): subconjunto de quantidade com corretagem.
Notes
  • Dados ordenados por: data_liquidacao, titulo, data_vencimento.

Examples:

>>> from pyield import bc
>>> df = bc.tpf_monthly_trades("07-01-2025", extragroup=True)
Source code in pyield/bc/trades_monthly.py
def tpf_monthly_trades(target_date: DateLike, extragroup: bool = False) -> pl.DataFrame:
    """Consulta negociações mensais no mercado secundário de TPF
    registradas no sistema Selic do BCB.

    Baixa os dados mensais de negociação do site do BCB para o mês correspondente
    à data fornecida. Os dados são baixados como arquivo ZIP, extraídos e carregados
    em um DataFrame Polars. Contém todas as negociações do mês, separadas por
    data de liquidação (data_liquidacao).

    Args:
        target_date: Data de referência. Apenas ano e mês são utilizados para
            baixar o arquivo correspondente.
        extragroup: Se True, busca apenas negociações extragrupo (entre grupos
            econômicos distintos). Se False, busca todas. Default é False.
            Negociações extragrupo são aquelas em que o conglomerado da contraparte
            cedente difere do conglomerado da contraparte cessionária, ou quando ao
            menos uma das contrapartes não pertence a um conglomerado. No caso de
            fundos, considera-se o conglomerado do administrador.

    Returns:
        DataFrame com dados de negociação do mês especificado. Em caso de erro
        retorna DataFrame vazio e registra log da exceção.

    Output Columns:
        - data_liquidacao (Date): data de liquidação da negociação.
        - titulo (str): sigla do título (ex: LFT, LTN, NTN-B, NTN-F).
        - codigo_selic (Int64): código único no sistema Selic.
        - isin (str): código ISIN.
        - data_emissao (Date): data de emissão do título.
        - data_vencimento (Date): data de vencimento do título.
        - operacoes (Int64): número total de operações realizadas.
        - quantidade (Int64): quantidade total negociada.
        - financeiro (Float64): valor financeiro (quantidade × pu_medio).
        - pu_minimo (Float64): preço unitário mínimo.
        - pu_medio (Float64): preço unitário médio.
        - pu_maximo (Float64): preço unitário máximo.
        - pu_lastro (Float64): PU lastro.
        - valor_par (Float64): valor par do título.
        - taxa_minima (Float64): taxa mínima.
        - taxa_media (Float64): taxa média.
        - taxa_maxima (Float64): taxa máxima.
        - operacoes_corretagem (Int64): subconjunto de operações com corretagem.
        - quantidade_corretagem (Int64): subconjunto de quantidade com corretagem.

    Notes:
        - Dados ordenados por: data_liquidacao, titulo, data_vencimento.

    Examples:
        >>> from pyield import bc
        >>> df = bc.tpf_monthly_trades("07-01-2025", extragroup=True)

    """
    if any_is_empty(target_date):
        return pl.DataFrame()
    data_alvo = converter_datas(target_date)
    if (data_alvo.year, data_alvo.month) > (today().year, today().month):
        return pl.DataFrame()
    url = _montar_url(data_alvo, extragroup)
    conteudo_zip = _baixar_zip(url)
    arquivo_extraido = _descompactar_zip(conteudo_zip)
    df = _parsear_df(arquivo_extraido)
    return _processar_df(df)

vna_lft(date)

Obtém o VNA (Valor Nominal Atualizado) da LFT no site do BCB.

Baixa o arquivo diário do BCB (SELIC), extrai a tabela com os valores VNA e retorna o valor correspondente à data informada.

Parameters:

Name Type Description Default
date DateLike

Data de referência. Aceita string, date ou datetime, convertidos internamente por converter_datas.

required

Returns:

Name Type Description
float float

Valor do VNA para a data especificada. Retorna NaN se a data for nula ou vazia.

Raises:

Type Description
ValueError

Se os valores VNA extraídos do site do BCB forem inconsistentes (nem todos iguais), indicando possível divergência nos dados da fonte. A mensagem inclui o link do BCB para verificação manual.

HTTPError

Se a requisição HTTP ao site do BCB falhar (problemas de rede, site indisponível ou dados não encontrados para a data informada).

Examples:

>>> from pyield import bc
>>> bc.vna_lft("31-05-2024")
14903.01148
Source code in pyield/bc/vna.py
def vna_lft(date: DateLike) -> float:
    """Obtém o VNA (Valor Nominal Atualizado) da LFT no site do BCB.

    Baixa o arquivo diário do BCB (SELIC), extrai a tabela com os valores
    VNA e retorna o valor correspondente à data informada.

    Args:
        date (DateLike): Data de referência. Aceita string, date ou datetime,
            convertidos internamente por ``converter_datas``.

    Returns:
        float: Valor do VNA para a data especificada. Retorna ``NaN`` se a
            data for nula ou vazia.

    Raises:
        ValueError: Se os valores VNA extraídos do site do BCB forem
            inconsistentes (nem todos iguais), indicando possível divergência
            nos dados da fonte. A mensagem inclui o link do BCB para
            verificação manual.
        requests.exceptions.HTTPError: Se a requisição HTTP ao site do BCB
            falhar (problemas de rede, site indisponível ou dados não
            encontrados para a data informada).

    Examples:
        >>> from pyield import bc
        >>> bc.vna_lft("31-05-2024")
        14903.01148
    """
    if any_is_empty(date):
        return float("nan")
    texto = _baixar_texto(date)
    tabela = _recortar_tabela(texto)
    linhas = _obter_linhas(tabela)
    valores = _extrair_valores(linhas)
    return _validar_valores(valores)