mercados: Acessando Dados do Mercado Financeiro com Python


Turicas aka Álvaro Justen


26 de outubro de 2025

PythonBrasil 2025 - São Paulo/SP

$ whoami

Turicas, prazer! =)

Sigam-me os bons:

{twitter,
bsky.social,
github,
youtube,
slideshare,
instagram}
/turicas

alvaro@pythonic.cafe


Acesse: pythonic.cafe

Software Livre & Python

(desde 2004/2005)

       

## Agenda - O projeto - O que é - Características - Instalação - A jornada financeira - Inflação (IPCA) - Poupança (Selic + TR) - Cofrinhos e caixinhas (CDI) - Tesouro Direto (Selic, IPCA) - Fundos imobiliários - Ações - Índices - Como contribuir
# mercados: O Projeto
## O projeto - 🌟 [github.com/PythonicCafe/mercados](https://github.com/PythonicCafe/mercados) - Biblioteca Python e interface de linha de comando (CLI) - Baixa, extrai e limpa dados do mercado financeiro brasileiro - Objetivo: ser a melhor, mais robusta e fácil opção para acessar dados do mercado financeiro e macroeconômicos, facilitando o controle social do mercado financeiro
## Características - Software livre - Dados somente de fontes **originais ou oficiais** (ex: IPCA - IBGE vs Banco Central) - Dados abertos e gratuitos - Mínimo de dependências possível (sem `pandas`) - Pythônica - Em Português (!)
## Fontes suportadas - [Comissão de Valores Mobiliários (CVM)](https://www.gov.br/cvm/pt-br) - [Banco Central do Brasil (BCB)](https://www.bcb.gov.br/) - [Secretaria do Tesouro Nacional (STN)](https://www.gov.br/tesouronacional/pt-br) - [B3](https://www.b3.com.br/pt_br/para-voce) (bolsa de valores do Brasil) - [Instituto Brasileiro de Geografia e Estatística (IBGE)](https://www.ibge.gov.br/)
## Versões - Primeiro commit: 2022-06-20 - Uso interno - 0.1.0: 2024-12-09 - 0.2.0: 2025-05-19 - 0.3.0: ? - Usada em produção em projetos de 2 clientes na [Pythonic Café](https://pythonic.cafe/): - [Ártica](https://artica.capital/) - [GDI Invest](https://app.gdiinvest.com.br/) - Em breve no [Brasil.IO](https://brasil.io/)
## Licença - [Licença Pública Geral Menor GNU versão 3 (LGPLv3)](https://www.gnu.org/licenses/lgpl-3.0.pt-br.html) - Código aberto (_open source_) **não é a mesma coisa** que software livre - **[_copyleft_](https://pt.wikipedia.org/wiki/Copyleft) importa!** - ✅ Usar a biblioteca em projetos proprietários ou livres - ✅ Modificar o código-fonte da biblioteca - ✅ Distribuí-la original ou modificada, desde que: - Notifique seu(ua) usuário(a) de que a biblioteca é usada no seu programa e que ela está sob LGPLv3 - Forneça uma cópia da LGPLv3 - 🚫 Restringir a liberdade do usuário do seu programa de modificar a biblioteca - 🚫 Distribuí-la (original ou modificada) sem fornecer o código-fonte - 🚫 Incorporar partes significativas da biblioteca no seu código sem informar e fornecer a licença
## Instalação - `pip install mercados` - `pip install mercados[ibge]` - `pip install https://github.com/PythonicCafe/mercados/archive/develop.zip`
# A Jornada Financeira
## ATENÇÃO! - Os ativos apresentados **não são recomendação** de compra/venda - O objetivo é meramente educacional/ilustrativo - Seus investimentos são sua responsabilidade: só invista no que você analisou, entende e confia - Rentabilidade passada não é garantia de rentabilidade futura
## Inflação - Dinheiro perde valor no tempo - Nossos gastos aumentam e para isso precisamos nos programar - O aumento médio de preços é chamado de inflação - Existem vários índices (por ex, por setor)!
## Índice de Preços ao Consumidor - Amplo ### (também conhecido como IPCA) - Fonte: IBGE - Principal indicador oficial da inflação no Brasil - Baseado numa cesta de produtos e serviços consumidos por famílias com renda entre 1 e 40 SM
## `mercados.ibge` ```python import datetime from mercados.ibge import IBGE ibge = IBGE() inflacao = {} for taxa in ibge.historico("IPCA"): inflacao[taxa.data] = taxa.valor print(f"IPCA em {taxa.data}: {taxa.valor}") ```
## Cálculo da variação ``` valor = 1000 inicio = datetime.date(2020, 1, 15) fim = datetime.date(2025, 9, 15) variacao = inflacao[fim] / inflacao[inicio] valor_ajustado = variacao * valor print(f"R$ {valor} em {inicio} = R$ {valor_ajustado:.2f} em {fim}") print(f"R$ {valor} em {fim} = R$ {valor / variacao:.2f} em {inicio}") ```
## Cálculo da variação (resultado) ``` IPCA em 1993-12-15: 100.00 [...] IPCA em 2020-01-15: 5331.42 [...] IPCA em 2025-09-15: 7359.06 R$ 1000 em 2020-01-15 = R$ 1380.32 em 2025-09-15 R$ 1000 em 2025-09-15 = R$ 724.47 em 2020-01-15 ```
## `mercados.ibge`: CLI - `python -m mercados.ibge historico IPCA` - `python -m mercados.ibge historico IPCA -i 2025-01-01 -F csv > ipca.csv` - `python -m mercados.ibge --help` - `python -m mercados.ibge historico --help`
## Poupança - Primeiro investimento de muitos brasileiros - Você empresta dinheiro para o banco, que te paga um rendimento mensal - O dinheiro é usado para financiamento imobiliário (majoritariamente) - Só rende no aniversário (dia do mês do depósito) - Se tirar antes, não rende nada! - Isenta de IRPF desde que a pessoa não ultrapasse R$ 200k/ano em qualquer rendimento isento - Cobertura do [Fundo Garantidor de Crédito (FGC)](https://www.fgc.org.br/) para até R$ 250k/pessoa/instituição
## Quanto rende a Poupança - Definido pela [Lei 12.703, de 7 de agosto de 2012](https://www.planalto.gov.br/ccivil_03/_ato2011-2014/2012/lei/l12703.htm) - Se Selic é maior que 8,5% ao ano: - Poupança (mensal) = 0,5% + Taxa Referencial mensalizada - Senão: - Poupança (mensal) = 70% da Selic mensalizada
## Selic? TR? Anualizada? Mensalizada? - Selic é a taxa básica de juros - Definida/ajustada pelo [Comitê de Política Monetária (Copom)](https://www.bcb.gov.br/controleinflacao/copom) a cada 45 dias - TR é a Taxa Referencial - Ambas expressas em valores percentuais ao ano - 15% ao ano = `15% / 12` ao mês? - Não! São **juros compostos** - `tx_ao_mes = (1 + tx_ao_ano) ** (1 / 12) -1` - 15% ao ano ~= 1,17% ao mês - `15 / 12 = 1.25`
## Cálculo da Poupança ```python if selic_ao_ano > 0.085: tr_ao_mes = ... poupanca_ao_mes = 0.005 + tr_ao_mes else: selic_ao_mes = ... poupanca_ao_mes = 0.70 * selic_ao_mes # oops, precisamos dos valores da TR e Selic! ```
## Cálculo do rendimento da Poupança - `python src/poupanca.py` - `python src/grafico.py --percent src/data/poupanca.csv images/poupanca.png`
## Poupança vs Selic vs TR ![](images/poupanca.png)
## BCB: Séries disponíveis - Selic - CDI - Taxa Referencial (TR) - Dólar e outras moedas - IPCA - ...
## `mercados.bcb`: CLI - `python -m mercados.bcb serie-temporal Selic -i 2025-06-01` - `python -m mercados.bcb serie-temporal -i 2025-01-01 CDI cdi.csv` - `python -m mercados.bcb --help` - `python -m mercados.bcb serie-temporal --help`
## "Poupança não rende nada" ### Cofrinhos e caixinhas - CDBs ou RDBs (você empresta para o banco) - Em geral, pagam um percentual do CDI (ex: 100% do CDI) - Cuidado com as pegadinhas! - Imposto: IOF (nos 30 primeiros dias) + IRPF regressivo - Boa opção se você ainda não sabe onde/em que investir - Seguro se for de banco grande - CDI = Selic - 0,10% (ao ano) - Atual = 14,9% a.a.
## Por que não emprestar para o Governo? ### Tesouro Direto! - Você compra um título do Tesouro Nacional - O Tesouro te paga o valor do título com a correção acordada no vencimento - Modalidades: - Tesouro Selic - Tesouro Pré-fixado - Tesouro IPCA+ - Investimento feito por meio de corretora. Exemplos: BTG, XP (Rico, Clear), Genial etc.
## `mercados.stn` ### (STN = Secretaria do Tesouro Nacional) - `python src/titulos_tesouro.py` ``` import datetime from mercados.stn import Tesouro tesouro = Tesouro() hoje = datetime.datetime.now().date() semana_passada = hoje - datetime.timedelta(days=7) historico = [] for titulo in tesouro.historico_titulos(): if semana_passada <= titulo.data <= hoje: print(f"{titulo.data}\t{titulo.nome} ({titulo.vencimento})\tR$ {titulo.preco:,}") ```
## Títulos do Tesouro: Resultado ``` [...] 2025-10-20 Tesouro IPCA+ (2026-08-15) R$ 4,212.24 2025-10-20 Tesouro IPCA+ (2050-08-15) R$ 818.87 2025-10-20 Tesouro Prefixado (2026-01-01) R$ 972.26 2025-10-20 Tesouro Selic (2027-03-01) R$ 17,586.33 ```
## Renda fixa vs Renda variável - Renda fixa: dívida (você empresta) - Risco: calote - Renda variável: empreendimento (você "arrisca") - Risco: do negócio - Só invista se você já tiver uma **reserva de emergência** e não for precisar do valor no curto/médio prazo! - Negociado na bolsa de valores por meio de códigos, exemplo: `ITSA4`, `VALE3`, `XPML11`, `IFRA11`
## ANTES DE INVESTIR: Aprenda e analise - Risco (qual a chance de perder dinheiro?) - Retorno (quanto deve dar de lucro?) - Liquidez (quando vou poder sacar?)
## Fundos de Investimento Imobiliário (FII) - Conjunto de cotistas que se une para investir em imóveis - Geridos por empresas certificadas - Pagam "aluguel" recorrente (em geral, mensalmente) - Negociados na bolsa de valores - Cotas a partir de ~R$ 10,00 - Diversos setores: - Shopping centers - Escritórios (lajes corporativas) - Galpões logísticos/centros de distruição - Residencial - ...
## FundosNET - Fundos são obrigados a publicar documentos nesse sistema - Documentos em XML 🤢 - E vários possuem inconsistências! - `python src/cotistas_xpml11.py` - `python grafico.py src/data/cotistas-xpml11.csv images/cotistas-xpml11.png`
## Cotistas XPML11 ![](images/cotistas-xpml11.png)
## Informe de Rendimentos - Publicado sempre que o fundo anuncia rendimentos - Também em XML - [Exemplo](https://fnet.bmfbovespa.com.br/fnet/publico/visualizarDocumento?id=1016857&cvm=true) - `python src/rendimentos_xpml11.py` - `python grafico.py src/data/rendimentos-xpml11.csv images/rendimentos-xpml11.png`
## Rendimentos XPML11 ![](images/rendimentos-xpml11.png)
## Pregão eletrônico (B3) - Negociação de ativos listados na bolsa - Ações - Fundos de Investimento Imobiliário (FII) - Fundos de Investimento no Agronegócio (FI-Agro) - Fundos de Investimento em Infraestrutura (FI-Infra) - Fundos de Investimento em Participações (FIP) - Opções - ... - `python -m mercados.b3 --help`
## Negociações históricas em bolsa - Preços: abertura, máximo, mínimo, médio e fechamento - Volume: quantidade de transações e valor total - Daqui se calcula a liquidez - `python src/preco_xpml11.py` - `python src/grafico.py src/data/precos-xpml11.csv images/precos-xpml11.png`
## Preços históricos XPML11 ### (fechamento) ![](images/precos-xpml11.png)
## B3: Dados disponíveis - Negociação: - Negociação diária (bolsa e balcão) - Negociação intradiária (bolsa) - Preços a cada 5min do último pregão (atraso de 15min) - Informações cadastrais: - Empresas listadas - Fundos listados (FII, FI-Infra, FI-Agro, FIP, FIDC e ETF) - Não são fundos de ações - Debêntures ativas - BDRs listados - CRAs e CRIs - Carteira e valor histórico de índices - Documentos (CRA, CRI, FII, FI-Infra, FI-Agro e FIP) - Dividendos (FI-Infra e FI-Agro) - Clearing (diversas informações)
## Índices - Cesta de ações, montada a partir de regras objetivas - Por exemplo: "empresas mais negociadas nos últimos dias e que não estejam em recuperação judicial" - Exemplos: - IBovespa/Ibov (maiores e mais negociadas empresas da bolsa brasileira) - IDIV (empresas pagadoras de dividendos) - IFIX (maiores e mais negociados fundos imobiliários) - UTIL (empresas de utilidade pública)
## `mercados.b3`: Índices - `python src/b3_indice.py` - `python src/grafico.py src/data/IFIX.csv images/ifix.png`
## IFIX - Histórico ![](images/ifix.png)
## Exchange Traded Funds (ETFs) - Fundos listados em bolsa que acompanham índices - Índices são somente teóricos - ETFs compram as ações de acordo com os pesos do índice - Exemplos: - `BOVA11` acompanha o Ibovespa (maiores empresas) - `DIVO11` acompanha o Idiv (empresas que pagam dividendos)
## `mercados.cvm` - RAD/EmpresasNET: "FundosNET" das empresas listas - Fatos relevantes, comunicados ao mercado, informes trimestrais etc. - Balancetes de fundos de investimento - Informes diários de fundos (de ações) - `python -m mercados.cvm --help`
## Como contribuir - `git clone git@github.com:PythonicCafe/mercados.git` - `cd mercados` - `vim CONTRIBUTING.md` - `git grep '# TODO'` - [t.me/pycafe_mercados](https://t.me/pycafe_mercados)
## Slides: [bit.ly/turicas-pybr25](http://bit.ly/turicas-pybr25) ## Exemplos de código: [bit.ly/turicas-pybr25-src](http://bit.ly/turicas-pybr25-src)

Dúvidas?



{twitter,
bsky.social,
github,
youtube,
slideshare,
instagram}
/turicas

alvaro@pythonic.cafe