Skip to main content

A Python library for analysis of fixed income instruments in Brazil

Project description

PyPI version Made with Python License

PYield: Toolkit de Renda Fixa Brasileira

Português | English

PYield é uma biblioteca Python voltada para análise de títulos públicos brasileiros. Ela busca e processa dados da ANBIMA, BCB, IBGE, B3 e Tesouro Nacional, retornando DataFrames do Polars para pipelines rápidos e com tipagem consistente.

Embora inclua dados e ferramentas de outros mercados (como DI1, DAP e PTAX), esses recursos são auxiliares para o objetivo central: análise, precificação e acompanhamento de títulos públicos.

Instalação

pip install pyield

Início Rápido

import pyield as yd

# Dias úteis (base de todos os cálculos)
yd.bday.count("02-01-2025", "15-01-2025")  # -> 9
yd.bday.offset("29-12-2023", 1)            # -> datetime.date(2024, 1, 2)

# Curva de DI Futuro
df = yd.futures("31-05-2024", "DI1")
# Columns: TradeDate, TickerSymbol, ExpirationDate, BDaysToExp, SettlementRate, ...

# Interpolação de taxas (flat forward, convenção 252 dias úteis/ano)
interp = yd.Interpolator("flat_forward", df["BDaysToExp"], df["SettlementRate"])
interp(45)       # -> 0.04833...
interp([30, 60]) # -> pl.Series with interpolated rates

# Precificação de títulos públicos
yd.ntnb.quotation("31-05-2024", "15-05-2035", 0.061490)  # -> 99.3651

# Indicadores do BCB
yd.bc.selic_over("31-05-2024")  # -> 0.000414...

Um notebook no Colab com mais exemplos:

Open In Colab

Blocos Principais

Dias Úteis (bday)

O módulo bday é a base do PYield. Todos os cálculos com datas (preço, duration, taxas a termo) dependem da contagem correta de dias úteis com feriados brasileiros.

from pyield import bday

# Conta dias úteis (início inclusivo, fim exclusivo)
bday.count("29-12-2023", "02-01-2024")  # -> 1

# Avança N dias úteis
bday.offset("29-12-2023", 1)  # -> datetime.date(2024, 1, 2)

# Ajusta dia não útil para o próximo dia útil
bday.offset("30-12-2023", 0)  # -> datetime.date(2024, 1, 2)

# Gera intervalo de dias úteis
bday.generate("22-12-2023", "02-01-2024")
# -> Series: [2023-12-22, 2023-12-26, 2023-12-27, 2023-12-28, 2023-12-29, 2024-01-02]

# Verifica se a data é dia útil
bday.is_business_day("25-12-2023")  # -> False (Christmas)

Todas as funções suportam operações vetorizadas com listas, Series ou arrays.

Interpolação de Taxas (Interpolator)

A classe Interpolator interpola taxas usando a convenção de 252 dias úteis/ano, padrão no mercado brasileiro.

from pyield import Interpolator

known_bdays = [30, 60, 90]
known_rates = [0.045, 0.05, 0.055]

# Interpolação flat forward (padrão de mercado)
interp = Interpolator("flat_forward", known_bdays, known_rates)
interp(45)  # -> 0.04833...

# Interpolação linear
linear = Interpolator("linear", known_bdays, known_rates)
linear(45)  # -> 0.0475

# Vetorizado
interp([15, 45, 75])  # -> pl.Series with 3 rates

# Extrapolação (desabilitada por padrão, retorna NaN)
interp(100)  # -> nan
Interpolator("flat_forward", known_bdays, known_rates, extrapolate=True)(100)  # -> 0.055

Taxas a Termo (forward, forwards)

Calcula taxas a termo a partir de curvas spot:

Convenção utilizada:

  • fwd_k = fwd_{j->k} (forward do vértice j para k)
  • f_k = 1 + tx_k (fator de capitalização no vértice k)
  • fwd_k = (f_k^au_k / f_j^au_j)^(1 / (au_k - au_j)) - 1, com au = du / 252
from pyield import forward, forwards

# Taxa a termo única entre dois pontos
forward(bday1=10, bday2=20, rate1=0.05, rate2=0.06)  # -> 0.0700952...

# Curva a termo vetorizada a partir de taxas spot
bdays = [10, 20, 30]
rates = [0.05, 0.06, 0.07]
forwards(bdays, rates)  # -> Series: [0.05, 0.070095, 0.090284]

Visão Geral dos Módulos

Módulo Finalidade
bday Calendário de dias úteis com feriados brasileiros
futures Dados de futuros da B3 (DI1, DDI, FRC, DAP, DOL, WDO, IND, WIN)
Interpolator Interpolação de taxas (flat_forward, linear)
forward / forwards Cálculo de taxas a termo
ltn, ntnb, ntnf, lft, ntnc Precificação e análise de títulos públicos
anbima Dados da ANBIMA (preços de TPF, curvas de juros, índices IMA)
bc Indicadores do BCB (SELIC, PTAX, repos, VNA)
ipca Dados de inflação (histórico e projeções)
rmd Relatório Mensal da Dívida do Tesouro Nacional
today / now Data/hora atual no Brasil (America/Sao_Paulo)

Títulos Públicos

from pyield import ltn, ntnb, ntnf

# Busca taxas indicativas da ANBIMA
ltn.data("23-08-2024")   # -> DataFrame with LTN bonds
ntnb.data("23-08-2024")  # -> DataFrame with NTN-B bonds

# Calcula cotação do título (base 100)
ntnb.quotation("31-05-2024", "15-05-2035", 0.061490)  # -> 99.3651
ntnb.quotation("31-05-2024", "15-08-2060", 0.061878)  # -> 99.5341

# Spreads de DI (bps=True multiplica por 10.000)
ntnf.di_spreads("30-05-2025", bps=True)
# -> DataFrame: BondType, MaturityDate, DISpread

Dados de Futuros

from pyield import futures

# DI1 (Futuro de Depósito Interfinanceiro)
futures("31-05-2024", "DI1")

# Outros contratos: DDI, FRC, DAP, DOL, WDO, IND, WIN
futures("31-05-2024", "DAP")

# Dados intradiários (quando o mercado estiver aberto)
futures("16-01-2025", "DI1")  # Retorna dados ao vivo durante o horário de negociação

Tratamento de Datas

PYield aceita entradas de data flexíveis (DateLike):

  • Strings: "31-05-2024", "31/05/2024", "2024-05-31"
  • datetime.date, datetime.datetime
  • pandas.Timestamp, numpy.datetime64

Funções escalares retornam datetime.date. Funções vetorizadas retornam polars.Series.

O parsing de strings é elemento a elemento entre os formatos aceitos. Strings inválidas são convertidas para valores nulos (None em saídas escalares e null em saídas vetorizadas).

Tratamento de nulos: funções escalares retornam float('nan') para entradas ausentes (propaga nos cálculos). Funções vetorizadas propagam null elemento a elemento.

from pyield import ntnb, bday

ntnb.quotation(None, "15-05-2035", 0.06149)  # -> nan
bday.count(["01-01-2024", None], "01-02-2024")  # -> Series: [22, null]

Migração para Polars (v0.40.0+)

Todas as funções retornam DataFrames/Series do Polars. Para converter para Pandas:

df_pandas = df.to_pandas(use_pyarrow_extension_array=True)

Documentação

Documentação completa: crdcj.github.io/PYield

Testes

pytest pyield --doctest-modules

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyield-0.43.6.tar.gz (118.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyield-0.43.6-py3-none-any.whl (162.0 kB view details)

Uploaded Python 3

File details

Details for the file pyield-0.43.6.tar.gz.

File metadata

  • Download URL: pyield-0.43.6.tar.gz
  • Upload date:
  • Size: 118.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Bluefin","version":"43","id":"Deinonychus","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pyield-0.43.6.tar.gz
Algorithm Hash digest
SHA256 67b6df502906fbd95b4249fb81f3364043d846cf03f02cc94094e2f109a46862
MD5 bea0fbf68038936b22dedd4779eddde4
BLAKE2b-256 9403314845294bafc5709ef729e3277b4c0e9c41bdb0f1c6ffd30628126bda67

See more details on using hashes here.

File details

Details for the file pyield-0.43.6-py3-none-any.whl.

File metadata

  • Download URL: pyield-0.43.6-py3-none-any.whl
  • Upload date:
  • Size: 162.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.6 {"installer":{"name":"uv","version":"0.10.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Bluefin","version":"43","id":"Deinonychus","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for pyield-0.43.6-py3-none-any.whl
Algorithm Hash digest
SHA256 afc9eb6b5159458601994c69216376d8ec93a27fdff5579fe3f3fc02c707c328
MD5 b27a839a726f3adaa225b7605d4084bd
BLAKE2b-256 d6fc34384bf67ccc3f518d94ee0d907955d40fb5490fec2081681f6a8492c4cd

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page