pyield 0.52.0__tar.gz → 0.52.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pyield-0.52.0 → pyield-0.52.2}/PKG-INFO +7 -3
- {pyield-0.52.0 → pyield-0.52.2}/README.md +6 -2
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/types.py +2 -2
- {pyield-0.52.0 → pyield-0.52.2}/pyield/interpolador.py +7 -5
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/lft.py +23 -4
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/ntnb.py +12 -12
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/ntnf.py +55 -19
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/leiloes.py +11 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyproject.toml +1 -1
- {pyield-0.52.0 → pyield-0.52.2}/LICENSE +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/br_numbers.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/cache.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/converters.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/data_cache.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/_internal/retry.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/anbima/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/anbima/imaq.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/anbima/mercado_secundario.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/b3/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/b3/_contratos.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/b3/_validar_pregao.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/b3/boletim.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/b3/derivativos_intradia.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/b3/di_over.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/_olinda.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/leiloes.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/lft.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/sgs.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/tpf_intradia.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/bc/tpf_mensal.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/du/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/du/core.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/du/feriados/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/du/feriados/feriados_antigos_br.txt +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/du/feriados/feriados_br.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/du/feriados/feriados_novos_br.txt +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/futuro/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/futuro/contratos.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/futuro/di1.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/futuro/historico.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/futuro/intradia.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/fwd.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/ipca/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/ipca/historico.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/ipca/projetado.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/py.typed +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/relogio.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/selic/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/selic/compromissada.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/selic/copom.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/selic/cpm.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/selic/probabilities.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/ltn.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/ntnb1.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/ntnbprinc.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/_titulos/ntnc.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/benchmark.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/pre.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/rmd/__init__.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/rmd/_aba_1_3.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/rmd/_aba_2_1.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/rmd/_common.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/rmd/_download.py +0 -0
- {pyield-0.52.0 → pyield-0.52.2}/pyield/tpf/utils.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: pyield
|
|
3
|
-
Version: 0.52.
|
|
3
|
+
Version: 0.52.2
|
|
4
4
|
Summary: Polars-powered toolkit for Brazilian fixed income analysis
|
|
5
5
|
Keywords: fixed-income,brazil,finance,analysis,bonds
|
|
6
6
|
Author: Carlos Carvalho
|
|
@@ -114,13 +114,13 @@ documentação.
|
|
|
114
114
|
| `yd.futuro` | módulo | Contratos futuros da B3 | `di1`, `historico`, `intradia`, `datas_disponiveis`, `vencimento`, `enriquecer`, `vencimento_expr` |
|
|
115
115
|
| `yd.di1` | módulo | Curva DI1 e interpolação | `dados`, `interpolar_taxas`, `interpolar_taxa`, `datas_disponiveis` |
|
|
116
116
|
| `yd.tpf` | módulo | Títulos públicos federais | `taxas`, `vencimentos`, `estoque`, `leiloes`, `benchmarks`, `curva_pre`, `premio_pre`, `rmd`, `secundario_mensal`, `secundario_intradia` |
|
|
117
|
-
| `yd.lft` | módulo | LFT | `dados`, `vencimentos`, `cotacao`, `taxa`, `vna` |
|
|
117
|
+
| `yd.lft` | módulo | LFT | `dados`, `vencimentos`, `cotacao`, `pu`, `taxa`, `vna`, `rentabilidade`, `rentabilidade_expr` |
|
|
118
118
|
| `yd.ltn` | módulo | LTN | `dados`, `vencimentos`, `pu`, `taxa`, `duration_expr`, `dv01`, `dv01_expr`, `rentabilidade`, `rentabilidade_expr`, `taxas_forward` |
|
|
119
119
|
| `yd.ntnb` | módulo | NTN-B | `dados`, `vencimentos`, `datas_pagamento`, `fluxos_caixa`, `cotacao`, `pu`, `taxa`, `taxas_zero`, `duration`, `duration_expr`, `dv01`, `dv01_expr`, `implicitas`, `curva` |
|
|
120
120
|
| `yd.ntnb1` | módulo | NTN-B1 | `datas_pagamento`, `fluxos_caixa`, `cotacao`, `pu`, `duration`, `dv01` |
|
|
121
121
|
| `yd.ntnbprinc` | módulo | NTN-B Principal | `pu`, `dv01` |
|
|
122
122
|
| `yd.ntnc` | módulo | NTN-C | `dados`, `datas_pagamento`, `fluxos_caixa`, `cotacao`, `pu`, `taxa`, `duration`, `duration_expr`, `dv01`, `dv01_expr` |
|
|
123
|
-
| `yd.ntnf` | módulo | NTN-F | `dados`, `vencimentos`, `datas_pagamento`, `fluxos_caixa`, `pu`, `taxa`, `taxas_zero`, `premio`, `premio_limpo`, `rentabilidade`, `rentabilidade_expr`, `duration`, `duration_expr`, `dv01`, `dv01_expr` |
|
|
123
|
+
| `yd.ntnf` | módulo | NTN-F | `dados`, `vencimentos`, `datas_pagamento`, `fluxos_caixa`, `pu`, `taxa`, `taxas_zero`, `premio`, `premio_limpo`, `premio_limpo_expr`, `rentabilidade`, `rentabilidade_expr`, `duration`, `duration_expr`, `dv01`, `dv01_expr` |
|
|
124
124
|
| `yd.selic` | módulo | Selic, COPOM e política monetária | `over`, `over_serie`, `meta`, `meta_serie`, `compromissadas`, `copom`, `cpm`, `probabilities` |
|
|
125
125
|
| `yd.ipca` | módulo | IPCA histórico e projetado | `indice`, `indices`, `indices_ultimos`, `taxa`, `taxas`, `taxas_ultimas`, `taxa_projetada` |
|
|
126
126
|
| `yd.ptax(data)` | função | PTAX para uma data | |
|
|
@@ -322,6 +322,10 @@ Resumo das quebras desta versão:
|
|
|
322
322
|
antes suportadas via sobrecarga vetorial, agora levantam `TypeError`.
|
|
323
323
|
Substitua por `Interpolador.interpolar_expr` em pipelines Polars ou pela
|
|
324
324
|
função top-level `yd.interpolar(...)` (curva única ou multi-curva).
|
|
325
|
+
- `yd.interpolar(...)` passou a usar `extrapolar=False` como padrão, alinhado
|
|
326
|
+
com `Interpolador`. Antes era `True`. Chamadas que dependiam da
|
|
327
|
+
extrapolação implícita na ponta longa precisam passar `extrapolar=True`
|
|
328
|
+
explicitamente.
|
|
325
329
|
- As funções `dv01(...)` dos títulos públicos agora recebem `pu` como argumento
|
|
326
330
|
explícito. Chamadas antigas que passavam apenas data, vencimento e taxa, ou
|
|
327
331
|
que passavam VNA no caso da NTN-B, precisam ser atualizadas.
|
|
@@ -70,13 +70,13 @@ documentação.
|
|
|
70
70
|
| `yd.futuro` | módulo | Contratos futuros da B3 | `di1`, `historico`, `intradia`, `datas_disponiveis`, `vencimento`, `enriquecer`, `vencimento_expr` |
|
|
71
71
|
| `yd.di1` | módulo | Curva DI1 e interpolação | `dados`, `interpolar_taxas`, `interpolar_taxa`, `datas_disponiveis` |
|
|
72
72
|
| `yd.tpf` | módulo | Títulos públicos federais | `taxas`, `vencimentos`, `estoque`, `leiloes`, `benchmarks`, `curva_pre`, `premio_pre`, `rmd`, `secundario_mensal`, `secundario_intradia` |
|
|
73
|
-
| `yd.lft` | módulo | LFT | `dados`, `vencimentos`, `cotacao`, `taxa`, `vna` |
|
|
73
|
+
| `yd.lft` | módulo | LFT | `dados`, `vencimentos`, `cotacao`, `pu`, `taxa`, `vna`, `rentabilidade`, `rentabilidade_expr` |
|
|
74
74
|
| `yd.ltn` | módulo | LTN | `dados`, `vencimentos`, `pu`, `taxa`, `duration_expr`, `dv01`, `dv01_expr`, `rentabilidade`, `rentabilidade_expr`, `taxas_forward` |
|
|
75
75
|
| `yd.ntnb` | módulo | NTN-B | `dados`, `vencimentos`, `datas_pagamento`, `fluxos_caixa`, `cotacao`, `pu`, `taxa`, `taxas_zero`, `duration`, `duration_expr`, `dv01`, `dv01_expr`, `implicitas`, `curva` |
|
|
76
76
|
| `yd.ntnb1` | módulo | NTN-B1 | `datas_pagamento`, `fluxos_caixa`, `cotacao`, `pu`, `duration`, `dv01` |
|
|
77
77
|
| `yd.ntnbprinc` | módulo | NTN-B Principal | `pu`, `dv01` |
|
|
78
78
|
| `yd.ntnc` | módulo | NTN-C | `dados`, `datas_pagamento`, `fluxos_caixa`, `cotacao`, `pu`, `taxa`, `duration`, `duration_expr`, `dv01`, `dv01_expr` |
|
|
79
|
-
| `yd.ntnf` | módulo | NTN-F | `dados`, `vencimentos`, `datas_pagamento`, `fluxos_caixa`, `pu`, `taxa`, `taxas_zero`, `premio`, `premio_limpo`, `rentabilidade`, `rentabilidade_expr`, `duration`, `duration_expr`, `dv01`, `dv01_expr` |
|
|
79
|
+
| `yd.ntnf` | módulo | NTN-F | `dados`, `vencimentos`, `datas_pagamento`, `fluxos_caixa`, `pu`, `taxa`, `taxas_zero`, `premio`, `premio_limpo`, `premio_limpo_expr`, `rentabilidade`, `rentabilidade_expr`, `duration`, `duration_expr`, `dv01`, `dv01_expr` |
|
|
80
80
|
| `yd.selic` | módulo | Selic, COPOM e política monetária | `over`, `over_serie`, `meta`, `meta_serie`, `compromissadas`, `copom`, `cpm`, `probabilities` |
|
|
81
81
|
| `yd.ipca` | módulo | IPCA histórico e projetado | `indice`, `indices`, `indices_ultimos`, `taxa`, `taxas`, `taxas_ultimas`, `taxa_projetada` |
|
|
82
82
|
| `yd.ptax(data)` | função | PTAX para uma data | |
|
|
@@ -278,6 +278,10 @@ Resumo das quebras desta versão:
|
|
|
278
278
|
antes suportadas via sobrecarga vetorial, agora levantam `TypeError`.
|
|
279
279
|
Substitua por `Interpolador.interpolar_expr` em pipelines Polars ou pela
|
|
280
280
|
função top-level `yd.interpolar(...)` (curva única ou multi-curva).
|
|
281
|
+
- `yd.interpolar(...)` passou a usar `extrapolar=False` como padrão, alinhado
|
|
282
|
+
com `Interpolador`. Antes era `True`. Chamadas que dependiam da
|
|
283
|
+
extrapolação implícita na ponta longa precisam passar `extrapolar=True`
|
|
284
|
+
explicitamente.
|
|
281
285
|
- As funções `dv01(...)` dos títulos públicos agora recebem `pu` como argumento
|
|
282
286
|
explícito. Chamadas antigas que passavam apenas data, vencimento e taxa, ou
|
|
283
287
|
que passavam VNA no caso da NTN-B, precisam ser atualizadas.
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import datetime as dt
|
|
2
2
|
import math
|
|
3
|
-
from collections.abc import
|
|
3
|
+
from collections.abc import Sized
|
|
4
4
|
from typing import Any, TypeAlias, TypeGuard
|
|
5
5
|
|
|
6
6
|
import polars as pl
|
|
7
7
|
|
|
8
8
|
DateLike: TypeAlias = str | dt.datetime | dt.date
|
|
9
9
|
ArrayLike: TypeAlias = list[Any] | tuple[Any, ...] | pl.Series
|
|
10
|
-
DatesLike: TypeAlias =
|
|
10
|
+
DatesLike: TypeAlias = list[DateLike] | tuple[DateLike, ...] | pl.Series
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def _is_empty(arg: Any) -> bool:
|
|
@@ -310,7 +310,7 @@ def interpolar( # noqa: PLR0913
|
|
|
310
310
|
*,
|
|
311
311
|
datas_alvo: pl.Series | None = None,
|
|
312
312
|
datas_curva: pl.Series | None = None,
|
|
313
|
-
extrapolar: bool =
|
|
313
|
+
extrapolar: bool = False,
|
|
314
314
|
) -> pl.Series:
|
|
315
315
|
r"""Interpola taxas flat-forward para uma série de pontos alvo.
|
|
316
316
|
|
|
@@ -332,10 +332,12 @@ def interpolar( # noqa: PLR0913
|
|
|
332
332
|
Padrão: ``None`` (curva única).
|
|
333
333
|
datas_curva: Series Date com a data de referência de cada
|
|
334
334
|
vértice da curva. Padrão: ``None`` (curva única).
|
|
335
|
-
extrapolar:
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
primeira taxa do
|
|
335
|
+
extrapolar: Controla apenas o comportamento na ponta longa (DU acima
|
|
336
|
+
do maior vértice de cada grupo). Se True, retorna a última taxa
|
|
337
|
+
conhecida; se False (padrão), retorna ``null``. A ponta curta
|
|
338
|
+
(DU abaixo do menor vértice) sempre retorna a primeira taxa do
|
|
339
|
+
grupo, independentemente desta flag. O default casa com o da
|
|
340
|
+
classe :class:`Interpolador`.
|
|
339
341
|
|
|
340
342
|
Returns:
|
|
341
343
|
Series Float64 ``taxa_interpolada`` na mesma ordem de
|
|
@@ -55,10 +55,7 @@ def dados(data: DateLike) -> pl.DataFrame:
|
|
|
55
55
|
df = utils.adicionar_taxa_di(df, data_ref)
|
|
56
56
|
|
|
57
57
|
df = df.with_columns(
|
|
58
|
-
rentabilidade=
|
|
59
|
-
lambda s: rentabilidade(s["taxa_indicativa"], s["taxa_di"]),
|
|
60
|
-
return_dtype=pl.Float64,
|
|
61
|
-
)
|
|
58
|
+
rentabilidade=rentabilidade_expr("taxa_indicativa", "taxa_di"),
|
|
62
59
|
)
|
|
63
60
|
|
|
64
61
|
return df.select(
|
|
@@ -226,6 +223,28 @@ def rentabilidade(taxa_lft: float, taxa_di: float) -> float:
|
|
|
226
223
|
return (fator_lft * fator_di - 1) / (fator_di - 1)
|
|
227
224
|
|
|
228
225
|
|
|
226
|
+
def rentabilidade_expr(
|
|
227
|
+
taxa_lft: pl.Expr | str,
|
|
228
|
+
taxa_di: pl.Expr | str,
|
|
229
|
+
) -> pl.Expr:
|
|
230
|
+
"""Cria expressão Polars para a rentabilidade da LFT sobre o DI.
|
|
231
|
+
|
|
232
|
+
Args:
|
|
233
|
+
taxa_lft: Nome de coluna ou expressão Polars com a taxa anualizada da
|
|
234
|
+
LFT sobre a Selic.
|
|
235
|
+
taxa_di: Nome de coluna ou expressão Polars com a taxa DI Futuro
|
|
236
|
+
anualizada (interpolada para o mesmo vencimento da LFT).
|
|
237
|
+
|
|
238
|
+
Returns:
|
|
239
|
+
pl.Expr: Expressão sem alias com a rentabilidade da LFT sobre o DI.
|
|
240
|
+
"""
|
|
241
|
+
expr_lft = taxa_lft if isinstance(taxa_lft, pl.Expr) else pl.col(taxa_lft)
|
|
242
|
+
expr_di = taxa_di if isinstance(taxa_di, pl.Expr) else pl.col(taxa_di)
|
|
243
|
+
fator_lft = (expr_lft + 1) ** (1 / 252)
|
|
244
|
+
fator_di = (expr_di + 1) ** (1 / 252)
|
|
245
|
+
return (fator_lft * fator_di - 1) / (fator_di - 1)
|
|
246
|
+
|
|
247
|
+
|
|
229
248
|
def _calcular_pu(
|
|
230
249
|
vna: float,
|
|
231
250
|
cotacao: float,
|
|
@@ -5,7 +5,7 @@ import polars as pl
|
|
|
5
5
|
|
|
6
6
|
import pyield._internal.converters as conversores
|
|
7
7
|
from pyield import du, fwd, interpolador
|
|
8
|
-
from pyield._internal.types import ArrayLike, DateLike, any_is_empty
|
|
8
|
+
from pyield._internal.types import ArrayLike, DateLike, DatesLike, any_is_empty
|
|
9
9
|
from pyield.tpf import utils
|
|
10
10
|
|
|
11
11
|
"""
|
|
@@ -367,7 +367,7 @@ def pu(
|
|
|
367
367
|
|
|
368
368
|
def _validar_entradas_taxas_zero(
|
|
369
369
|
data_liquidacao: DateLike,
|
|
370
|
-
vencimentos:
|
|
370
|
+
vencimentos: DatesLike,
|
|
371
371
|
taxas: ArrayLike,
|
|
372
372
|
) -> tuple[dt.date, pl.Series, pl.Series]:
|
|
373
373
|
# Processa e valida os dados de entrada
|
|
@@ -459,7 +459,7 @@ def _calcular_valor_presente_cupons(
|
|
|
459
459
|
|
|
460
460
|
def taxas_zero(
|
|
461
461
|
data_liquidacao: DateLike,
|
|
462
|
-
vencimentos:
|
|
462
|
+
vencimentos: DatesLike,
|
|
463
463
|
taxas: ArrayLike,
|
|
464
464
|
incluir_cupons: bool = False,
|
|
465
465
|
) -> pl.DataFrame:
|
|
@@ -471,7 +471,7 @@ def taxas_zero(
|
|
|
471
471
|
|
|
472
472
|
Args:
|
|
473
473
|
data_liquidacao (DateLike): Data de liquidação.
|
|
474
|
-
vencimentos (
|
|
474
|
+
vencimentos (DatesLike): Datas de vencimento dos títulos.
|
|
475
475
|
taxas (ArrayLike): TIRs correspondentes.
|
|
476
476
|
incluir_cupons (bool, optional): Se True, inclui datas intermediárias de cupom.
|
|
477
477
|
Padrão False.
|
|
@@ -586,9 +586,9 @@ def taxas_zero(
|
|
|
586
586
|
|
|
587
587
|
def implicitas( # noqa: PLR0913
|
|
588
588
|
data_liquidacao: DateLike,
|
|
589
|
-
vencimentos_tir:
|
|
589
|
+
vencimentos_tir: DatesLike,
|
|
590
590
|
taxas_tir: ArrayLike,
|
|
591
|
-
vencimentos_nominais:
|
|
591
|
+
vencimentos_nominais: DatesLike,
|
|
592
592
|
taxas_nominais: ArrayLike,
|
|
593
593
|
*,
|
|
594
594
|
extrapolar: bool = False,
|
|
@@ -601,12 +601,12 @@ def implicitas( # noqa: PLR0913
|
|
|
601
601
|
|
|
602
602
|
Args:
|
|
603
603
|
data_liquidacao (DateLike): Data de liquidação da operação.
|
|
604
|
-
vencimentos_tir (
|
|
604
|
+
vencimentos_tir (DatesLike): Vencimentos das NTN-B usadas como vértices
|
|
605
605
|
da curva de TIR real.
|
|
606
606
|
taxas_tir (ArrayLike): TIRs reais observadas das NTN-B correspondentes
|
|
607
607
|
aos vencimentos informados. A função calcula a curva zero real a
|
|
608
608
|
partir dessas taxas.
|
|
609
|
-
vencimentos_nominais (
|
|
609
|
+
vencimentos_nominais (DatesLike): Vencimentos da curva nominal de
|
|
610
610
|
referência.
|
|
611
611
|
taxas_nominais (ArrayLike): Taxas da curva nominal de referência. Pode
|
|
612
612
|
representar DI Futuro, curva soberana prefixada ou outra curva
|
|
@@ -709,9 +709,9 @@ def implicitas( # noqa: PLR0913
|
|
|
709
709
|
|
|
710
710
|
def curva( # noqa: PLR0913
|
|
711
711
|
data_liquidacao: DateLike,
|
|
712
|
-
vencimentos_tir:
|
|
712
|
+
vencimentos_tir: DatesLike,
|
|
713
713
|
taxas_tir: ArrayLike,
|
|
714
|
-
vencimentos_nominais:
|
|
714
|
+
vencimentos_nominais: DatesLike,
|
|
715
715
|
taxas_nominais: ArrayLike,
|
|
716
716
|
*,
|
|
717
717
|
extrapolar: bool = False,
|
|
@@ -725,12 +725,12 @@ def curva( # noqa: PLR0913
|
|
|
725
725
|
|
|
726
726
|
Args:
|
|
727
727
|
data_liquidacao (DateLike): Data de liquidação da operação.
|
|
728
|
-
vencimentos_tir (
|
|
728
|
+
vencimentos_tir (DatesLike): Vencimentos das NTN-B usadas como vértices
|
|
729
729
|
da curva de TIR real.
|
|
730
730
|
taxas_tir (ArrayLike): TIRs reais observadas das NTN-B correspondentes
|
|
731
731
|
aos vencimentos informados. A função calcula a curva zero real a
|
|
732
732
|
partir dessas taxas.
|
|
733
|
-
vencimentos_nominais (
|
|
733
|
+
vencimentos_nominais (DatesLike): Vencimentos da curva nominal de
|
|
734
734
|
referência.
|
|
735
735
|
taxas_nominais (ArrayLike): Taxas da curva nominal de referência. Pode
|
|
736
736
|
representar DI Futuro, curva soberana prefixada ou outra curva
|
|
@@ -7,7 +7,7 @@ import polars as pl
|
|
|
7
7
|
import pyield._internal.converters as cv
|
|
8
8
|
import pyield.interpolador as ip
|
|
9
9
|
from pyield import du
|
|
10
|
-
from pyield._internal.types import ArrayLike, DateLike, any_is_empty
|
|
10
|
+
from pyield._internal.types import ArrayLike, DateLike, DatesLike, any_is_empty
|
|
11
11
|
from pyield.futuro import di1
|
|
12
12
|
from pyield.tpf import utils
|
|
13
13
|
|
|
@@ -96,15 +96,12 @@ def dados(data: DateLike) -> pl.DataFrame:
|
|
|
96
96
|
# Calcula prêmios e rentabilidade para cada vencimento
|
|
97
97
|
df = df.with_columns(
|
|
98
98
|
premio=pl.col("taxa_indicativa") - pl.col("taxa_di"),
|
|
99
|
-
premio_limpo=
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
taxas_di=df_di["taxa_ajuste"],
|
|
106
|
-
),
|
|
107
|
-
return_dtype=pl.Float64,
|
|
99
|
+
premio_limpo=premio_limpo_expr(
|
|
100
|
+
data_liquidacao=data,
|
|
101
|
+
data_vencimento="data_vencimento",
|
|
102
|
+
taxa_ntnf="taxa_indicativa",
|
|
103
|
+
vencimentos_di=df_di["data_vencimento"],
|
|
104
|
+
taxas_di=df_di["taxa_ajuste"],
|
|
108
105
|
),
|
|
109
106
|
rentabilidade=rentabilidade_expr(
|
|
110
107
|
data_liquidacao=data,
|
|
@@ -343,9 +340,9 @@ def pu(
|
|
|
343
340
|
|
|
344
341
|
def taxas_zero( # noqa
|
|
345
342
|
data_liquidacao: DateLike,
|
|
346
|
-
vencimentos_ltn:
|
|
343
|
+
vencimentos_ltn: DatesLike,
|
|
347
344
|
taxas_ltn: ArrayLike,
|
|
348
|
-
vencimentos_ntnf:
|
|
345
|
+
vencimentos_ntnf: DatesLike,
|
|
349
346
|
taxas_ntnf: ArrayLike,
|
|
350
347
|
incluir_cupons: bool = False,
|
|
351
348
|
) -> pl.DataFrame:
|
|
@@ -360,11 +357,11 @@ def taxas_zero( # noqa
|
|
|
360
357
|
|
|
361
358
|
Args:
|
|
362
359
|
data_liquidacao (DateLike): Data de liquidação para o cálculo.
|
|
363
|
-
vencimentos_ltn (
|
|
360
|
+
vencimentos_ltn (DatesLike): Datas de vencimento das LTNs usadas como
|
|
364
361
|
vértices prefixados zero cupom.
|
|
365
362
|
taxas_ltn (ArrayLike): Taxas das LTNs. Como a LTN é zero cupom, essas
|
|
366
363
|
taxas são usadas diretamente como taxas zero no bootstrap.
|
|
367
|
-
vencimentos_ntnf (
|
|
364
|
+
vencimentos_ntnf (DatesLike): Datas de vencimento das NTN-F usadas no
|
|
368
365
|
bootstrap.
|
|
369
366
|
taxas_ntnf (ArrayLike): TIRs das NTN-F correspondentes aos vencimentos
|
|
370
367
|
informados.
|
|
@@ -524,7 +521,7 @@ def rentabilidade( # noqa
|
|
|
524
521
|
data_liquidacao: DateLike,
|
|
525
522
|
data_vencimento: DateLike,
|
|
526
523
|
taxa_ntnf: float,
|
|
527
|
-
vencimentos_di:
|
|
524
|
+
vencimentos_di: DatesLike,
|
|
528
525
|
taxas_di: ArrayLike,
|
|
529
526
|
) -> float:
|
|
530
527
|
"""
|
|
@@ -539,7 +536,7 @@ def rentabilidade( # noqa
|
|
|
539
536
|
data_liquidacao (DateLike): Data de liquidação para o cálculo.
|
|
540
537
|
data_vencimento (DateLike): Data de vencimento da NTN-F.
|
|
541
538
|
taxa_ntnf (float): TIR da NTN-F.
|
|
542
|
-
vencimentos_di (
|
|
539
|
+
vencimentos_di (DatesLike): Datas de vencimento da curva DI.
|
|
543
540
|
taxas_di (ArrayLike): Taxas DI correspondentes aos vencimentos.
|
|
544
541
|
|
|
545
542
|
Returns:
|
|
@@ -629,7 +626,7 @@ def rentabilidade_expr(
|
|
|
629
626
|
data_liquidacao: DateLike,
|
|
630
627
|
data_vencimento: pl.Expr | str,
|
|
631
628
|
taxa_ntnf: pl.Expr | str,
|
|
632
|
-
vencimentos_di:
|
|
629
|
+
vencimentos_di: DatesLike,
|
|
633
630
|
taxas_di: ArrayLike,
|
|
634
631
|
) -> pl.Expr:
|
|
635
632
|
"""Cria expressão Polars para a rentabilidade da NTN-F sobre a curva DI.
|
|
@@ -717,7 +714,7 @@ def premio_limpo( # noqa
|
|
|
717
714
|
data_liquidacao: DateLike,
|
|
718
715
|
data_vencimento: DateLike,
|
|
719
716
|
taxa_ntnf: float,
|
|
720
|
-
vencimentos_di:
|
|
717
|
+
vencimentos_di: DatesLike,
|
|
721
718
|
taxas_di: ArrayLike,
|
|
722
719
|
) -> float:
|
|
723
720
|
"""
|
|
@@ -731,7 +728,7 @@ def premio_limpo( # noqa
|
|
|
731
728
|
data_liquidacao (DateLike): Data de liquidação para o cálculo.
|
|
732
729
|
data_vencimento (DateLike): Data de vencimento do título.
|
|
733
730
|
taxa_ntnf (float): TIR do título.
|
|
734
|
-
vencimentos_di (
|
|
731
|
+
vencimentos_di (DatesLike): Vencimentos da curva DI.
|
|
735
732
|
taxas_di (ArrayLike): Série de taxas DI.
|
|
736
733
|
|
|
737
734
|
Returns:
|
|
@@ -796,6 +793,45 @@ def premio_limpo( # noqa
|
|
|
796
793
|
return utils.encontrar_raiz(diferenca_preco)
|
|
797
794
|
|
|
798
795
|
|
|
796
|
+
def premio_limpo_expr(
|
|
797
|
+
data_liquidacao: DateLike,
|
|
798
|
+
data_vencimento: pl.Expr | str,
|
|
799
|
+
taxa_ntnf: pl.Expr | str,
|
|
800
|
+
vencimentos_di: DatesLike,
|
|
801
|
+
taxas_di: ArrayLike,
|
|
802
|
+
) -> pl.Expr:
|
|
803
|
+
"""Cria expressão Polars para o prêmio limpo da NTN-F sobre a curva DI.
|
|
804
|
+
|
|
805
|
+
O cálculo é aplicado linha a linha porque o prêmio limpo depende dos fluxos
|
|
806
|
+
de caixa do título, da interpolação da curva DI e da resolução de raiz.
|
|
807
|
+
|
|
808
|
+
Args:
|
|
809
|
+
data_liquidacao: Data de liquidação para o cálculo.
|
|
810
|
+
data_vencimento: Nome de coluna ou expressão Polars com a data de
|
|
811
|
+
vencimento da NTN-F.
|
|
812
|
+
taxa_ntnf: Nome de coluna ou expressão Polars com a TIR da NTN-F.
|
|
813
|
+
vencimentos_di: Datas de vencimento da curva DI.
|
|
814
|
+
taxas_di: Taxas DI correspondentes aos vencimentos.
|
|
815
|
+
|
|
816
|
+
Returns:
|
|
817
|
+
pl.Expr: Expressão sem alias com o prêmio limpo da NTN-F sobre a curva
|
|
818
|
+
DI.
|
|
819
|
+
"""
|
|
820
|
+
return pl.struct(
|
|
821
|
+
utils.coluna_ou_expr(data_vencimento, "data_vencimento"),
|
|
822
|
+
utils.coluna_ou_expr(taxa_ntnf, "taxa_ntnf"),
|
|
823
|
+
).map_elements(
|
|
824
|
+
lambda row: premio_limpo(
|
|
825
|
+
data_liquidacao=data_liquidacao,
|
|
826
|
+
data_vencimento=row["data_vencimento"],
|
|
827
|
+
taxa_ntnf=row["taxa_ntnf"],
|
|
828
|
+
vencimentos_di=vencimentos_di,
|
|
829
|
+
taxas_di=taxas_di,
|
|
830
|
+
),
|
|
831
|
+
return_dtype=pl.Float64,
|
|
832
|
+
)
|
|
833
|
+
|
|
834
|
+
|
|
799
835
|
def duration(
|
|
800
836
|
data_liquidacao: DateLike,
|
|
801
837
|
data_vencimento: DateLike,
|
|
@@ -24,6 +24,7 @@ DEFINICOES_COLUNAS = [
|
|
|
24
24
|
("liquidacao_segunda_volta", "data_liquidacao_2v", pl.String),
|
|
25
25
|
("numero_edital", "numero_edital", pl.Int64),
|
|
26
26
|
("tipo_leilao", "tipo_leilao", pl.String),
|
|
27
|
+
("tipo_ocorrencia", "tipo_ocorrencia", pl.String),
|
|
27
28
|
("titulo", "titulo", pl.String),
|
|
28
29
|
("benchmark", "benchmark", pl.String),
|
|
29
30
|
("vencimento", "data_vencimento", pl.String),
|
|
@@ -31,6 +32,8 @@ DEFINICOES_COLUNAS = [
|
|
|
31
32
|
("quantidade_aceita", "quantidade_aceita_1v", pl.Int64),
|
|
32
33
|
("oferta_segunda_volta", "quantidade_ofertada_2v", pl.Int64),
|
|
33
34
|
("quantidade_aceita_segunda_volta", "quantidade_aceita_2v", pl.Int64),
|
|
35
|
+
("quantidade_liquidada", "quantidade_liquidada_1v", pl.Int64),
|
|
36
|
+
("quantidade_liquidada_segunda_volta", "quantidade_liquidada_2v", pl.Int64),
|
|
34
37
|
("financeiro_aceito", "financeiro_aceito_1v", pl.Float64),
|
|
35
38
|
("financeiro_aceito_segunda_volta", "financeiro_aceito_2v", pl.Float64),
|
|
36
39
|
("quantidade_bcb", "quantidade_bcb", pl.Int64),
|
|
@@ -50,6 +53,7 @@ ORDEM_FINAL_COLUNAS = [
|
|
|
50
53
|
"data_liquidacao_2v",
|
|
51
54
|
"numero_edital",
|
|
52
55
|
"tipo_leilao",
|
|
56
|
+
"tipo_ocorrencia",
|
|
53
57
|
"titulo",
|
|
54
58
|
"benchmark",
|
|
55
59
|
"data_vencimento",
|
|
@@ -62,6 +66,8 @@ ORDEM_FINAL_COLUNAS = [
|
|
|
62
66
|
"quantidade_aceita_1v",
|
|
63
67
|
"quantidade_aceita_2v",
|
|
64
68
|
"quantidade_aceita_total",
|
|
69
|
+
"quantidade_liquidada_1v",
|
|
70
|
+
"quantidade_liquidada_2v",
|
|
65
71
|
"financeiro_ofertado_1v",
|
|
66
72
|
"financeiro_ofertado_2v",
|
|
67
73
|
"financeiro_ofertado_total",
|
|
@@ -155,7 +161,9 @@ def _transformar_dados_brutos(dados_brutos: list[dict]) -> pl.DataFrame:
|
|
|
155
161
|
"liquidacao_segunda_volta": pl.String,
|
|
156
162
|
"oferta_segunda_volta": pl.Int64,
|
|
157
163
|
"financeiro_aceito_segunda_volta": pl.Float64,
|
|
164
|
+
"tipo_ocorrencia": pl.String,
|
|
158
165
|
"quantidade_liquidada": pl.Int64,
|
|
166
|
+
"quantidade_liquidada_segunda_volta": pl.Int64,
|
|
159
167
|
"quantidade_aceita_segunda_volta": pl.Int64,
|
|
160
168
|
}
|
|
161
169
|
|
|
@@ -371,6 +379,7 @@ def leiloes(
|
|
|
371
379
|
* data_liquidacao_2v (Date): data de liquidação financeira da 2ª volta.
|
|
372
380
|
* numero_edital (Int64): número do edital do leilão.
|
|
373
381
|
* tipo_leilao (String): tipo da operação.
|
|
382
|
+
* tipo_ocorrencia (String): classificação da ocorrência do leilão.
|
|
374
383
|
* titulo (String): código do título público leiloado.
|
|
375
384
|
* benchmark (String): descrição de referência do título.
|
|
376
385
|
* data_vencimento (Date): data de vencimento do título.
|
|
@@ -383,6 +392,8 @@ def leiloes(
|
|
|
383
392
|
* quantidade_aceita_1v (Int64): quantidade aceita na 1ª volta.
|
|
384
393
|
* quantidade_aceita_2v (Int64): quantidade aceita na 2ª volta.
|
|
385
394
|
* quantidade_aceita_total (Int64): quantidade aceita total.
|
|
395
|
+
* quantidade_liquidada_1v (Int64): quantidade liquidada na 1ª volta.
|
|
396
|
+
* quantidade_liquidada_2v (Int64): quantidade liquidada na 2ª volta.
|
|
386
397
|
* financeiro_ofertado_1v (Float64): financeiro ofertado na 1ª volta.
|
|
387
398
|
* financeiro_ofertado_2v (Float64): financeiro ofertado na 2ª volta.
|
|
388
399
|
* financeiro_ofertado_total (Float64): financeiro ofertado total.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|