NTN-B
bei_rates(settlement, ntnb_maturities, ntnb_rates, nominal_maturities, nominal_rates)
Calcula a inflação implícita para NTN-B a partir de taxas nominais e reais.
A inflação implícita (breakeven) é a que iguala yields reais e nominais, baseada nas taxas zero das NTN-B.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação da operação. |
required |
ntnb_maturities
|
ArrayLike
|
Vencimentos das NTN-B. |
required |
ntnb_rates
|
ArrayLike
|
TIRs reais correspondentes. |
required |
nominal_maturities
|
ArrayLike
|
Vencimentos de referência para taxas nominais. |
required |
nominal_rates
|
ArrayLike
|
Taxas nominais (ex.: DI Futuro). |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
pl.DataFrame: DataFrame com as taxas calculadas. |
Output Columns
- data_vencimento (Date): Data de vencimento.
- dias_uteis (Int64): Dias úteis entre liquidação e vencimento.
- taxa_zero (Float64): Taxa real zero via bootstrap.
- taxa_nominal (Float64): Taxa nominal interpolada.
- inflacao_implicita (Float64): Inflação implícita (breakeven).
Notes
A inflação implícita indica a expectativa de mercado entre liquidação e vencimento.
Examples:
Busca as taxas de NTN-B para uma data de referência. Estas são TIRs e as taxas zero são calculadas a partir delas.
Busca as taxas de ajuste do DI Futuro para a mesma data de referência:
Calcula a inflação implícita na data de referência:
>>> yd.ntnb.bei_rates(
... settlement="05-09-2024",
... ntnb_maturities=df_ntnb["data_vencimento"],
... ntnb_rates=df_ntnb["taxa_indicativa"],
... nominal_maturities=df_di["data_vencimento"],
... nominal_rates=df_di["taxa_ajuste"],
... )
shape: (14, 5)
┌─────────────────┬────────────┬───────────┬──────────────┬────────────────────┐
│ data_vencimento ┆ dias_uteis ┆ taxa_zero ┆ taxa_nominal ┆ inflacao_implicita │
│ --- ┆ --- ┆ --- ┆ --- ┆ --- │
│ date ┆ i64 ┆ f64 ┆ f64 ┆ f64 │
╞═════════════════╪════════════╪═══════════╪══════════════╪════════════════════╡
│ 2025-05-15 ┆ 171 ┆ 0.061748 ┆ 0.113836 ┆ 0.049059 │
│ 2026-08-15 ┆ 488 ┆ 0.066133 ┆ 0.117126 ┆ 0.04783 │
│ 2027-05-15 ┆ 673 ┆ 0.063816 ┆ 0.117169 ┆ 0.050152 │
│ 2028-08-15 ┆ 988 ┆ 0.063635 ┆ 0.11828 ┆ 0.051376 │
│ 2029-05-15 ┆ 1172 ┆ 0.062532 ┆ 0.11838 ┆ 0.052561 │
│ … ┆ … ┆ … ┆ … ┆ … │
│ 2040-08-15 ┆ 3995 ┆ 0.060468 ┆ 0.11759 ┆ 0.053865 │
│ 2045-05-15 ┆ 5182 ┆ 0.0625 ┆ 0.11759 ┆ 0.05185 │
│ 2050-08-15 ┆ 6497 ┆ 0.063016 ┆ 0.11759 ┆ 0.051339 │
│ 2055-05-15 ┆ 7686 ┆ 0.062252 ┆ 0.11759 ┆ 0.052095 │
│ 2060-08-15 ┆ 9003 ┆ 0.063001 ┆ 0.11759 ┆ 0.051354 │
└─────────────────┴────────────┴───────────┴──────────────┴────────────────────┘
Source code in pyield/tn/ntnb.py
565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 | |
cash_flows(settlement, maturity)
Gera os fluxos de caixa da NTN-B entre liquidação e vencimento.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação (exclusiva). |
required |
maturity
|
DateLike
|
Data de vencimento. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
pl.DataFrame: DataFrame com as colunas de fluxo. |
Output Columns
- data_pagamento (Date): Data de pagamento.
- valor_pagamento (Float64): Valor do pagamento.
Examples:
>>> from pyield import ntnb
>>> ntnb.cash_flows("10-05-2024", "15-05-2025")
shape: (3, 2)
┌────────────────┬─────────────────┐
│ data_pagamento ┆ valor_pagamento │
│ --- ┆ --- │
│ date ┆ f64 │
╞════════════════╪═════════════════╡
│ 2024-05-15 ┆ 2.956301 │
│ 2024-11-15 ┆ 2.956301 │
│ 2025-05-15 ┆ 102.956301 │
└────────────────┴─────────────────┘
Source code in pyield/tn/ntnb.py
data(date)
Busca as taxas indicativas de NTN-B para a data de referência.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date
|
DateLike
|
Data de referência para a consulta. |
required |
Returns:
| Type | Description |
|---|---|
DataFrame
|
pl.DataFrame: DataFrame Polars com os dados de NTN-B. |
Output Columns
- data_referencia (Date): Data de referência dos dados.
- titulo (String): Tipo do título (ex.: "NTN-B").
- codigo_selic (Int64): Código do título no SELIC.
- data_base (Date): Data base de emissão do título.
- data_vencimento (Date): Data de vencimento do título.
- dias_uteis (Int64): Dias úteis entre referência e vencimento.
- duration (Float64): Macaulay Duration do título (anos).
- prazo_medio (Float64): Prazo médio do título (anos).
- dv01 (Float64): Variação no preço para 1bp de taxa.
- dv01_usd (Float64): DV01 convertido para USD pela PTAX do dia.
- pu (Float64): Preço unitário (PU).
- taxa_compra (Float64): Taxa de compra (decimal).
- taxa_venda (Float64): Taxa de venda (decimal).
- taxa_indicativa (Float64): Taxa indicativa (decimal).
- taxa_di (Float64): Taxa de ajuste do DI Futuro interpolada pelo método flat forward.
- taxa_zero (Float64): Taxa zero real (via bootstrap das taxas indicativas).
- taxa_forward (Float64): Taxa forward real (a partir das taxas zero).
- inflacao_implicita (Float64): Inflação implícita (breakeven) calculada a partir de taxas nominais do DI Futuro e taxas zero das NTN-B.
Examples:
Source code in pyield/tn/ntnb.py
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 114 115 116 117 118 119 | |
duration(settlement, maturity, rate)
Calcula a Macaulay duration da NTN-B em anos úteis.
Fórmula
Sum( t * CFₜ / (1 + y)ᵗ )
MacD = ---------------------------------
Current Bond Price
Onde
t = tempo (anos) até o pagamento CFₜ = fluxo no tempo t y = TIR (periódica) Price = Soma( CFₜ / (1 + y)ᵗ )
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação. |
required |
maturity
|
DateLike
|
Data de vencimento. |
required |
rate
|
float
|
Taxa de desconto usada no cálculo. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Macaulay duration em anos úteis. |
Examples: >>> from pyield import ntnb >>> ntnb.duration("23-08-2024", "15-08-2060", 0.061005) 15.08305431313046
Source code in pyield/tn/ntnb.py
dv01(settlement, maturity, rate, vna)
Calcula o DV01 (Dollar Value of 01) da NTN-B em R$.
Representa a variação de preço para um aumento de 1 bp (0,01%) na taxa.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação. |
required |
maturity
|
DateLike
|
Data de vencimento. |
required |
rate
|
float
|
Taxa de desconto (TIR) da NTN-B. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
DV01, variação de preço para 1 bp. |
Examples:
>>> from pyield import ntnb
>>> ntnb.dv01("26-03-2025", "15-08-2060", 0.074358, 4470.979474)
4.640875999999935
Source code in pyield/tn/ntnb.py
forwards(date, zero_coupon=True)
Calcula as taxas forward da NTN-B para a data de referência.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date
|
DateLike
|
Data de referência para a consulta. |
required |
zero_coupon
|
bool
|
Se True, usa taxas zero cupom no cálculo. Padrão True. Se False, usa as TIRs. |
True
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
pl.DataFrame: DataFrame com as taxas forward. |
Output Columns
- data_vencimento (Date): Data de vencimento.
- dias_uteis (Int64): Dias úteis entre referência e vencimento.
- taxa_indicativa (Float64): Taxa indicativa (spot ou TIR).
- taxa_forward (Float64): Taxa forward calculada.
Examples:
>>> from pyield import ntnb
>>> ntnb.forwards("17-10-2025", zero_coupon=True)
shape: (13, 4)
┌─────────────────┬────────────┬─────────────────┬──────────────┐
│ data_vencimento ┆ dias_uteis ┆ taxa_indicativa ┆ taxa_forward │
│ --- ┆ --- ┆ --- ┆ --- │
│ date ┆ i64 ┆ f64 ┆ f64 │
╞═════════════════╪════════════╪═════════════════╪══════════════╡
│ 2026-08-15 ┆ 207 ┆ 0.10089 ┆ 0.10089 │
│ 2027-05-15 ┆ 392 ┆ 0.088776 ┆ 0.074793 │
│ 2028-08-15 ┆ 707 ┆ 0.083615 ┆ 0.076598 │
│ 2029-05-15 ┆ 891 ┆ 0.0818 ┆ 0.074148 │
│ 2030-08-15 ┆ 1205 ┆ 0.080902 ┆ 0.077857 │
│ … ┆ … ┆ … ┆ … │
│ 2040-08-15 ┆ 3714 ┆ 0.076067 ┆ 0.070587 │
│ 2045-05-15 ┆ 4901 ┆ 0.075195 ┆ 0.069811 │
│ 2050-08-15 ┆ 6216 ┆ 0.074087 ┆ 0.064348 │
│ 2055-05-15 ┆ 7405 ┆ 0.073702 ┆ 0.067551 │
│ 2060-08-15 ┆ 8722 ┆ 0.073795 ┆ 0.074505 │
└─────────────────┴────────────┴─────────────────┴──────────────┘
Source code in pyield/tn/ntnb.py
maturities(date)
Busca os vencimentos de NTN-B disponíveis para a data de referência.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
date
|
DateLike
|
Data de referência para a consulta. |
required |
Returns:
| Type | Description |
|---|---|
Series
|
pl.Series: Série de datas de vencimento de NTN-B. |
Examples:
>>> from pyield import ntnb
>>> ntnb.maturities("16-08-2024")
shape: (14,)
Series: 'data_vencimento' [date]
[
2025-05-15
2026-08-15
2027-05-15
2028-08-15
2029-05-15
…
2040-08-15
2045-05-15
2050-08-15
2055-05-15
2060-08-15
]
Source code in pyield/tn/ntnb.py
payment_dates(settlement, maturity)
Gera todas as datas de cupom entre liquidação e vencimento (inclusivas).
Os cupons são pagos em 15/02, 15/05, 15/08 e 15/11. A NTN-B é definida pela data de vencimento.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação (exclusiva). |
required |
maturity
|
DateLike
|
Data de vencimento. |
required |
Returns:
| Type | Description |
|---|---|
Series
|
pl.Series: Série de datas de cupom no intervalo. Retorna série vazia se vencimento for menor ou igual à liquidação. |
Examples:
>>> from pyield import ntnb
>>> ntnb.payment_dates("10-05-2024", "15-05-2025")
shape: (3,)
Series: 'datas_pagamento' [date]
[
2024-05-15
2024-11-15
2025-05-15
]
Source code in pyield/tn/ntnb.py
price(vna, quotation)
Calcula o preço (PU) da NTN-B pelas regras da ANBIMA.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
vna
|
float
|
Valor nominal atualizado (VNA). |
required |
quotation
|
float
|
Cotação da NTN-B em base 100. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Preço da NTN-B truncado em 6 casas decimais. |
References
- https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
Examples:
>>> from pyield import ntnb
>>> ntnb.price(4299.160173, 99.3651)
4271.864805
>>> ntnb.price(4315.498383, 100.6409)
4343.156412
Source code in pyield/tn/ntnb.py
quotation(settlement, maturity, rate)
Calcula a cotação da NTN-B em base 100 pelas regras da ANBIMA.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação da operação. |
required |
maturity
|
DateLike
|
Data de vencimento da NTN-B. |
required |
rate
|
float
|
Taxa de desconto (TIR) usada no valor presente. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
Cotação da NTN-B truncada em 4 casas. Retorna NaN em erro. |
References
- https://www.anbima.com.br/data/files/A0/02/CC/70/8FEFC8104606BDC8B82BA2A8/Metodologias%20ANBIMA%20de%20Precificacao%20Titulos%20Publicos.pdf
- O cupom semestral é 2,956301, equivalente a 6% a.a. com capitalização semestral e arredondamento para 6 casas, conforme ANBIMA.
Examples:
>>> from pyield import ntnb
>>> ntnb.quotation("31-05-2024", "15-05-2035", 0.061490)
99.3651
>>> ntnb.quotation("31-05-2024", "15-08-2060", 0.061878)
99.5341
>>> ntnb.quotation("15-08-2024", "15-08-2032", 0.05929)
100.6409
Source code in pyield/tn/ntnb.py
rate(settlement, maturity, vna, price_value)
Calcula a TIR implícita de uma NTN-B a partir do preço (PU).
A função inverte numericamente a cadeia price(vna, quotation(...)),
encontrando a taxa que zera a diferença entre o preço calculado e o
informado.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação. |
required |
maturity
|
DateLike
|
Data de vencimento. |
required |
vna
|
float
|
Valor nominal atualizado (VNA). |
required |
price_value
|
float
|
Preço unitário (PU) do título. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
float |
float
|
TIR implícita em formato decimal. Retorna NaN em caso de erro. |
Examples:
>>> from pyield import ntnb
>>> ntnb.rate("31-05-2024", "15-05-2035", 4299.160173, 4271.864805)
0.06149
>>> ntnb.rate("15-08-2024", "15-08-2032", 4315.498383, 4343.156412)
0.05929
Source code in pyield/tn/ntnb.py
spot_rates(settlement, maturities, rates, show_coupons=False)
Calcula as taxas zero da NTN-B usando bootstrap.
O bootstrap determina as taxas zero a partir dos yields dos títulos, resolvendo iterativamente as taxas que descontam os fluxos ao preço.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
settlement
|
DateLike
|
Data de liquidação. |
required |
maturities
|
ArrayLike
|
Datas de vencimento dos títulos. |
required |
rates
|
ArrayLike
|
TIRs correspondentes. |
required |
show_coupons
|
bool
|
Se True, inclui datas intermediárias de cupom. Padrão False. |
False
|
Returns:
| Type | Description |
|---|---|
DataFrame
|
pl.DataFrame: DataFrame com as taxas zero. |
Output Columns
- data_vencimento (Date): Data de vencimento.
- dias_uteis (Int64): Dias úteis entre liquidação e vencimento.
- taxa_zero (Float64): Taxa zero (real).
Examples:
>>> from pyield import ntnb
>>> # Busca as taxas de NTN-B para uma data de referência
>>> df = ntnb.data("16-08-2024")
>>> # Calcula as taxas zero considerando a liquidação na data de referência
>>> ntnb.spot_rates(
... settlement="16-08-2024",
... maturities=df["data_vencimento"],
... rates=df["taxa_indicativa"],
... )
shape: (14, 3)
┌─────────────────┬────────────┬───────────┐
│ data_vencimento ┆ dias_uteis ┆ taxa_zero │
│ --- ┆ --- ┆ --- │
│ date ┆ i64 ┆ f64 │
╞═════════════════╪════════════╪═══════════╡
│ 2025-05-15 ┆ 185 ┆ 0.063893 │
│ 2026-08-15 ┆ 502 ┆ 0.066141 │
│ 2027-05-15 ┆ 687 ┆ 0.064087 │
│ 2028-08-15 ┆ 1002 ┆ 0.063057 │
│ 2029-05-15 ┆ 1186 ┆ 0.061458 │
│ … ┆ … ┆ … │
│ 2040-08-15 ┆ 4009 ┆ 0.058326 │
│ 2045-05-15 ┆ 5196 ┆ 0.060371 │
│ 2050-08-15 ┆ 6511 ┆ 0.060772 │
│ 2055-05-15 ┆ 7700 ┆ 0.059909 │
│ 2060-08-15 ┆ 9017 ┆ 0.060652 │
└─────────────────┴────────────┴───────────┘
Notes
O cálculo considera: - Mapear todas as datas de pagamento até o último vencimento. - Interpolar as TIRs nas datas intermediárias. - Calcular a cotação da NTN-B para cada vencimento. - Calcular as taxas zero reais.
Source code in pyield/tn/ntnb.py
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 | |