Títulos Públicos Federais (TPF)
Porta de entrada principal para dados de mercado de títulos públicos: taxas indicativas, vencimentos, estoque, negociações secundárias, leilões, benchmarks e Relatório Mensal da Dívida (RMD).
Para precificação e análise por tipo de título (cotação, duration, prêmio), consulte as páginas individuais: LFT, LTN, NTN-B, NTN-F, etc.
Títulos Públicos Federais.
benchmarks(titulo=None, incluir_historico=False)
Busca benchmarks de títulos públicos brasileiros.
Fonte: API do Tesouro Nacional.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
titulo
|
str | None
|
Tipo do título a filtrar (ex.: |
None
|
incluir_historico
|
bool
|
Se |
False
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars com os benchmarks. Retorna DataFrame vazio se |
DataFrame
|
não houver dados. |
Output Columns
- titulo (String): tipo do título (ex.:
"LTN","LFT"). - data_vencimento (Date): data de vencimento do benchmark.
- benchmark (String): nome/identificador do benchmark.
- data_inicio (Date): data de início da vigência.
- data_fim (Date): data de término da vigência.
Notes
Documentação da API: https://portal-conhecimento.tesouro.gov.br/catalogo-componentes/api-leil%C3%B5es
Examples:
Source code in pyield/tpf/benchmark.py
curva_pre(data)
Constrói a curva PRE (taxas zero cupom prefixadas).
Combina taxas de LTN (já zero cupom) com taxas spot derivadas de NTN-F via bootstrap. O resultado é a curva de juros prefixada brasileira expressa em taxas zero cupom.
Fonte: ANBIMA (taxas indicativas de LTN e NTN-F).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de referência. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame com a curva PRE para a data solicitada. Retorna DataFrame |
DataFrame
|
vazio se não houver dados de LTN disponíveis. |
Output Columns
- data_vencimento (Date): data de vencimento do vértice.
- dias_uteis (Int64): dias úteis entre a data de referência e o vencimento.
- taxa_zero (Float64): taxa zero cupom anualizada (base 252).
Raises:
| Type | Description |
|---|---|
ValueError
|
Se houver NTN-F sem dados de LTN para bootstrap. |
Examples:
>>> yd.tpf.curva_pre("18-06-2025")
shape: (17, 3)
┌─────────────────┬────────────┬───────────┐
│ data_vencimento ┆ dias_uteis ┆ taxa_zero │
│ --- ┆ --- ┆ --- │
│ date ┆ i64 ┆ f64 │
╞═════════════════╪════════════╪═══════════╡
│ 2025-07-01 ┆ 8 ┆ 0.14835 │
│ 2025-10-01 ┆ 74 ┆ 0.147463 │
│ 2026-01-01 ┆ 138 ┆ 0.147752 │
│ 2026-04-01 ┆ 199 ┆ 0.147947 │
│ 2026-07-01 ┆ 260 ┆ 0.147069 │
│ … ┆ … ┆ … │
│ 2030-01-01 ┆ 1135 ┆ 0.137279 │
│ 2031-01-01 ┆ 1387 ┆ 0.138154 │
│ 2032-01-01 ┆ 1639 ┆ 0.13876 │
│ 2033-01-01 ┆ 1891 ┆ 0.1393 │
│ 2035-01-01 ┆ 2390 ┆ 0.141068 │
└─────────────────┴────────────┴───────────┘
Source code in pyield/tpf/pre.py
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | |
estoque(data)
Busca dados de estoque de TPFs.
Fonte: IMA-Q da ANBIMA. Contém quantidade em mercado, valor de mercado e variação diária da quantidade dos títulos.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de referência. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars com dados de estoque. Retorna DataFrame vazio se a |
DataFrame
|
data for inválida ou não houver dados. |
Output Columns
- data_referencia (Date): data de referência dos dados.
- titulo (String): tipo do título público.
- data_vencimento (Date): data de vencimento do título.
- codigo_selic (Int64): código SELIC do título.
- isin (String): código ISIN.
- pu (Float64): preço unitário do título em reais.
- quantidade_mercado (Int64): quantidade em mercado.
- valor_mercado (Int64): valor de mercado em reais.
- variacao_quantidade (Int64): variação diária da quantidade.
- status_titulo (String): status do título.
Examples:
>>> import datetime as dt
>>> data = yd.du.deslocar(dt.date.today(), -2)
>>> df = yd.tpf.estoque(data)
>>> df.shape[0] > 0
True
Source code in pyield/anbima/imaq.py
leilao(data)
Busca resultados de leilões de TPFs.
Fonte: Tesouro Nacional. Retorna dados de quantidades, financeiros, taxas de colocação, duration e DV01 dos leilões nas datas informadas.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike | Sequence[DateLike]
|
Data ou sequência de datas do leilão. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars com os dados processados do leilão. Se |
DataFrame
|
uma sequência, concatena os resultados das datas informadas. Retorna |
DataFrame
|
DataFrame vazio se não houver dados para as datas. |
Output Columns
- data_1v (Date): data de realização do leilão.
- data_liquidacao_1v (Date): data de liquidação financeira da 1ª volta.
- data_liquidacao_2v (Date): data de liquidação financeira da 2ª volta.
- numero_edital (Int64): número do edital do leilão.
- tipo_leilao (String): tipo da operação.
- titulo (String): código do título público leiloado.
- benchmark (String): descrição de referência do título.
- data_vencimento (Date): data de vencimento do título.
- dias_uteis (Int32): dias úteis entre liquidação e vencimento.
- dias_corridos (Int32): dias corridos entre liquidação e vencimento.
- duration (Float64): duration de Macaulay em anos.
- prazo_medio (Float64): maturidade média em anos.
- quantidade_ofertada_1v (Int64): quantidade ofertada na 1ª volta.
- quantidade_ofertada_2v (Int64): quantidade ofertada na 2ª volta.
- quantidade_aceita_1v (Int64): quantidade aceita na 1ª volta.
- quantidade_aceita_2v (Int64): quantidade aceita na 2ª volta.
- quantidade_aceita_total (Int64): quantidade aceita total.
- financeiro_ofertado_1v (Float64): financeiro ofertado na 1ª volta.
- financeiro_ofertado_2v (Float64): financeiro ofertado na 2ª volta.
- financeiro_ofertado_total (Float64): financeiro ofertado total.
- financeiro_aceito_1v (Float64): financeiro aceito na 1ª volta.
- financeiro_aceito_2v (Float64): financeiro aceito na 2ª volta.
- financeiro_aceito_total (Float64): financeiro aceito total.
- quantidade_bcb (Int64): quantidade adquirida pelo Banco Central.
- financeiro_bcb (Int64): financeiro adquirido pelo Banco Central.
- colocacao_1v (Float64): taxa de colocação da 1ª volta.
- colocacao_2v (Float64): taxa de colocação da 2ª volta.
- colocacao_total (Float64): taxa de colocação total.
- dv01_1v (Float64): DV01 da 1ª volta em reais.
- dv01_2v (Float64): DV01 da 2ª volta em reais.
- dv01_total (Float64): DV01 total em reais.
- ptax (Float64): PTAX usada na conversão para dólar.
- dv01_1v_usd (Float64): DV01 da 1ª volta em dólar.
- dv01_2v_usd (Float64): DV01 da 2ª volta em dólar.
- dv01_total_usd (Float64): DV01 total em dólar.
- pu_minimo (Float64): preço unitário mínimo aceito.
- pu_medio (Float64): preço unitário médio ponderado aceito.
- tipo_pu_medio (String): origem do PU médio.
- taxa_media (Float64): taxa média aceita.
- taxa_maxima (Float64): taxa máxima aceita.
Source code in pyield/tpf/leiloes.py
premio_pre(data, pontos_base=False)
Calcula o prêmio dos títulos prefixados (LTN e NTN-F) sobre o DI.
Em linguagem de mercado, esse valor é chamado de prêmio. Em termos descritivos, trata-se do spread sobre o DI.
Definição do prêmio
premio = taxa indicativa do PRE - taxa de ajuste do DI
Quando pontos_base=False a coluna retorna essa diferença em formato
decimal (ex: 0.000439 ≈ 4.39 bps). Quando pontos_base=True o valor
é automaticamente multiplicado por 10_000 e exibido diretamente em
basis points.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data da consulta para buscar as taxas. |
required |
pontos_base
|
bool
|
Se True, retorna o prêmio já convertido em basis points. Padrão False. |
False
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame com as colunas do prêmio. Retorna DataFrame vazio se |
DataFrame
|
não houver dados. |
Output Columns
- titulo (String): tipo do título.
- data_vencimento (Date): data de vencimento.
- premio (Float64): prêmio em decimal ou bps conforme parâmetro (spread sobre o DI).
Examples:
>>> yd.tpf.premio_pre("30-05-2025", pontos_base=True)
shape: (18, 3)
┌────────┬─────────────────┬────────┐
│ titulo ┆ data_vencimento ┆ premio │
│ --- ┆ --- ┆ --- │
│ str ┆ date ┆ f64 │
╞════════╪═════════════════╪════════╡
│ LTN ┆ 2025-07-01 ┆ 4.39 │
│ LTN ┆ 2025-10-01 ┆ -9.0 │
│ LTN ┆ 2026-01-01 ┆ -4.88 │
│ LTN ┆ 2026-04-01 ┆ -4.45 │
│ LTN ┆ 2026-07-01 ┆ 0.81 │
│ … ┆ … ┆ … │
│ NTN-F ┆ 2027-01-01 ┆ -3.31 │
│ NTN-F ┆ 2029-01-01 ┆ 14.21 │
│ NTN-F ┆ 2031-01-01 ┆ 21.61 │
│ NTN-F ┆ 2033-01-01 ┆ 11.51 │
│ NTN-F ┆ 2035-01-01 ┆ 22.0 │
└────────┴─────────────────┴────────┘
Source code in pyield/tpf/utils.py
secundario_intradia()
Busca dados intradia do mercado secundário de TPFs.
Fonte: Banco Central do Brasil, sistema SELIC. Os dados ficam disponíveis apenas durante o horário do SELIC (09:00-22:00 BRT) em dias úteis.
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars com negociações intradia do mercado secundário. |
DataFrame
|
Retorna DataFrame vazio fora do horário do SELIC. |
Output Columns
- data_hora_consulta (Datetime): data e hora da consulta.
- data_liquidacao (Date): data de liquidação à vista.
- titulo (String): sigla do título público.
- 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.
- taxa_media (Float64): taxa média negociada.
- taxa_maxima (Float64): maior taxa negociada.
- taxa_ultima (Float64): última taxa negociada.
- operacoes (Int64): total de operações liquidadas.
- quantidade (Int64): quantidade total de títulos negociados.
- financeiro (Float64): valor financeiro total negociado.
- operacoes_corretagem (Int64): operações via corretagem.
- quantidade_corretagem (Int64): títulos 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.
- termo_taxa_minima (Float64): menor taxa a termo negociada.
- termo_taxa_media (Float64): taxa média a termo negociada.
- termo_taxa_maxima (Float64): maior taxa a termo negociada.
- termo_operacoes (Int64): total de operações a termo.
- termo_quantidade (Int64): total de títulos a termo negociados.
- termo_financeiro (Float64): valor financeiro total a termo.
- termo_operacoes_corretagem (Int64): operações a termo via corretagem.
- termo_quantidade_corretagem (Int64): títulos a termo via corretagem.
Examples:
Source code in pyield/bc/tpf_intradia.py
secundario_mensal(data, extragrupo=False)
Busca dados mensais do mercado secundário de TPFs.
Fonte: Banco Central do Brasil, sistema SELIC. Baixa o arquivo mensal de negociações secundárias para o mês correspondente à data informada.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de referência. |
required |
extragrupo
|
bool
|
Se verdadeiro, busca apenas negociações extragrupo. |
False
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars com dados mensais do mercado secundário. |
Output Columns
- data_liquidacao (Date): data de liquidação da negociação.
- titulo (String): sigla do título público.
- codigo_selic (Int64): código único no sistema SELIC.
- isin (String): 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.
- quantidade (Int64): quantidade total negociada.
- financeiro (Float64): valor financeiro negociado.
- 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): preço unitário de 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): operações com corretagem.
- quantidade_corretagem (Int64): quantidade com corretagem.
Examples:
Source code in pyield/bc/tpf_mensal.py
taxas(data, titulo=None, completo=False)
Busca taxas e preços indicativos de TPFs.
Fonte: ANBIMA. Primeiro consulta o cache local de dados históricos; se a data não estiver no cache, busca diretamente na fonte da ANBIMA.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de referência. |
required |
titulo
|
TipoTPF | None
|
Tipo do título público federal. Aceita |
None
|
completo
|
bool
|
Se verdadeiro, retorna os dados da ANBIMA sem cache nem filtro de colunas. |
False
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
DataFrame Polars com taxas e preços indicativos. Retorna DataFrame |
DataFrame
|
vazio se não houver dados para a data. |
Output Columns
- titulo (String): tipo do título público.
- data_referencia (Date): data de referência dos dados.
- codigo_selic (Int64): código do título no SELIC.
- data_base (Date): data base ou de emissão do título.
- data_vencimento (Date): data de vencimento do título.
- pu (Float64): preço unitário para liquidação em D0.
- taxa_compra (Float64): taxa de compra em D0.
- taxa_venda (Float64): taxa de venda em D0.
- taxa_indicativa (Float64): taxa indicativa em D0.
Examples:
Source code in pyield/anbima/mercado_secundario.py
vencimentos(data, titulo)
Busca vencimentos de TPFs disponíveis nas taxas indicativas.
Fonte: ANBIMA, mesma base usada por yd.tpf.taxas.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
data
|
DateLike
|
Data de referência. |
required |
titulo
|
TipoTPF
|
Tipo do título público federal. Aceita |
required |
Returns:
| Type | Description |
|---|---|
Series
|
Series ordenada com os vencimentos disponíveis. |
Examples:
>>> yd.tpf.vencimentos(data="22-08-2025", titulo="PRE")
shape: (18,)
Series: 'data_vencimento' [date]
[
2025-10-01
2026-01-01
2026-04-01
2026-07-01
2026-10-01
…
2030-01-01
2031-01-01
2032-01-01
2033-01-01
2035-01-01
]