Pular para conteúdo

Uma biblioteca em Python para obteção de dados de instrumentos de Renda Fixa brasileira

Se você é um entusiasta de VBA e Excel, pode pular esse artigo que aqui não é lugar para você! Brincadeira, você é bem-vindo também. Afinal, essa pode ser uma ótima desculpa para você finalmente aprender Python 😂

Brincadeiras à parte, qualquer um que trabalhe com análise de renda fixa no sabe que a obtenção de dados de fontes como ANBIMA e B3 pode ser uma tarefa complicada. Outro ponto refere-se ao tratamento dos feriados e dias úteis, um verdadeiro pesadelo para quem precisa calcular prazos e vencimentos, ainda mais depois que criaram um novo feriado nacional no final do ano passado. Sim, agora temos que considerar duas listas de feriados nacionais, uma para dados ateriores a 26-12-2023 e outra para depois.

Claro que para os afortunados com acesso a serviços pagos como Bloomberg, a obtenção desse tipo de dados já é bem fácil. Mas para a maioria dos analistas financeiros, pesquisadores e entusiastas do mercado, a obtenção e processamento desses dados pode ser um desafio. Afinal, você terá que lidar com chamadas para diversas APIs como a do IBGE, do BACEN, da ANBIMA, da B3, e por aí vai. Em alguns casos, o dado tem que ser extraído diretamente de sites, o que pode ser ainda mais complicado.

O que é PYield?

A biblioteca Python foi projetada especificamente para a obtenção e tratamento de dados de instrumentos de renda fixa. Ou seja, é uma tentativa de simplificar a obtenção e processamento de dados de fontes primárias como ANBIMA e B3, fornecendo uma API de fácil utilização.

Utilizando a robustez de bibliotecas populares de Python, como Pandas, Requests e Numpy, PYield pode ser usada como backend de aplicações mais complexas, removendo a parte pesada relacionada a obtenção e processamento de dados de fontes e formatos diversos.

Características Principais

  • Coleta de Dados: Obtenha dados diretamente de fontes primárias como ANBIMA e B3 de forma simples e rápida.
  • Processamento de Dados: Os dados são processados e entregues em formatos fáceis de usar, como DataFrames do Pandas.
  • Ferramentas de Análise: Acesse funções para tarefas comuns de análise do mercado de renda fixa, como cálculos de dias úteis e feriados.

Como Instalar o PYield

A instalação do PYield é rápida e fácil através do pip, o gerenciador de pacotes do Python. Basta abrir o terminal e executar o seguinte comando no seu ambiente virtual:

pip install pyield
Este comando instala a última versão do PYield, deixando você pronto para começar a utilizar a biblioteca em seus projetos.

Exemplos Práticos de Uso:

Ferramentas de Dias Úteis (Feriados brasileiros são automaticamente considerados)

>>> import pyield as yd

# Contar o número de dias úteis entre duas datas.
# A data de início é inclusiva, a data de término é exclusiva.
>>> yd.bday.count(start='29-12-2023', end='02-01-2024')
1

# Obtenha o próximo dia útil após uma determinada data (offset=1).
>>> yd.bday.offset(dates="29-12-2023", offset=1)
Timestamp('2024-01-02 00:00:00')

# Obtenha o próximo dia útil se não for um dia útil (offset=0).
>>> yd.bday.offset(dates="30-12-2023", offset=0)
Timestamp('2024-01-02 00:00:00')

# Como 2023-12-29 já é um dia útil, a função retorna a mesma data (offset=0).
>>> yd.bday.offset(dates="29-12-2023", offset=0)
Timestamp('2023-12-29 00:00:00')

# Gerar uma série de dias úteis entre duas datas.
>>> yd.bday.generate(start='2023-12-29', end='2024-01-03')
0   2023-12-29
1   2024-01-02
2   2024-01-03
dtype: datetime64[ns]

Dados de Futuro de DI

# Obtenha um DataFrame com os dados dos Futuros de DI da B3 de uma data específica.
>>> yd.futures(contract_code="DI1", date='2024-03-08')

TradeDate  ExpirationCode ExpirationDate BDaysToExp  ... LastRate LastAskRate LastBidRate SettlementRate
2024-03-08 J24            2024-04-01     15              ... 10.952   10.952      10.956      10.956
2024-03-08 K24            2024-05-02     37              ... 10.776   10.774      10.780      10.777
2024-03-08 M24            2024-06-03     58              ... 10.604   10.602      10.604      10.608
...        ...            ...            ...             ... ...      ...         ...         ...
2024-03-08 F37            2037-01-02     3213            ... <NA>     <NA>        <NA>        10.859
2024-03-08 F38            2038-01-04     3462            ... <NA>     <NA>        <NA>        10.859
2024-03-08 F39            2039-01-03     3713            ... <NA>     <NA>        <NA>        10.85

Dados de Títulos do Tesouro

# Obtenha um DataFrame com os dados dos títulos NTN-B da ANBIMA.
# Os dados da Anbima estão disponíveis para os últimos 5 dias úteis.
# Obs: Para quem é membro da Anbima, o acesso ao histórico é liberado automaticamente pela biblioteca.
>>> yd.anbima(bond_type="NTN-B", date='2024-04-12')

BondType ReferenceDate MaturityDate BidRate AskRate IndicativeRate Price
NTN-B    2024-04-12    2024-08-15   0.07540 0.07504 0.07523        4,271.43565
NTN-B    2024-04-12    2025-05-15   0.05945 0.05913 0.05930        4,361.34391
NTN-B    2024-04-12    2026-08-15   0.05927 0.05897 0.05910        4,301.40082
...      ...           ...          ...     ...     ...            ...
NTN-B    2024-04-12    2050-08-15   0.06039 0.06006 0.06023        4,299.28233
NTN-B    2024-04-12    2055-05-15   0.06035 0.05998 0.06017        4,367.13360
NTN-B    2024-04-12    2060-08-15   0.06057 0.06016 0.06036        4,292.26323

Cálculo de spreads

# Calcule o spread entre o futuro de DI e os títulos pré-fixados do Tesouro.
>>> yd.spreads(spread_type="DI_PRE", date="2024-4-11")

BondType ReferenceDate MaturityDate  DISpread
LTN      2024-04-11    2024-07-01    -20.28
LTN      2024-04-11    2024-10-01    -10.19
LTN      2024-04-11    2025-01-01    -15.05
...      ...           ...           ...
NTN-F    2024-04-11    2031-01-01    -0.66
NTN-F    2024-04-11    2033-01-01    -5.69
NTN-F    2024-04-11    2035-01-01    -1.27

Dados de Indicadores

# Obtenha a taxa SELIC meta do BCB em um determinado dia.
>>> yd.indicator(indicator_code="SELIC", date='2024-04-12')
0.1075  # 10.75%

# Obtenha a taxa mensal (Monthly Rate) do IPCA do IBGE com base no mês de referência da data.
>>> yd.indicator(indicator_code="IPCA_MR", date='2024-03-18')
0.0016  # 0.16%

# Se o indicador não estiver disponível para a data de referência, o retorno será nulo (None).
>>> yd.indicator(indicator_code="IPCA_MR", date='2030-04-10')
None

Conclusão

Se você precisa obter e tratar dados de renda fixa, PYield pode ser uma ferramenta valiosa nesse processo. Com uma API simples, o seu código pode se tornar mais limpo e eficiente, permitindo que você se concentre na análise dos dados em vez de se preocupar com a obtenção e processamento deles.

O código da biblioteca pode ser acessado em: PYield

Quem quiser contribuir com o desenvolvimento da ferramenta entre em contato comigo: cr.cj@outlook.com