Notebook em Python que faz a raspagem dos indicadores fundamentalistas de todas as ações listadas no Fundamentus, aplica um filtro de qualidade e cruza o resultado com a carteira do Novo Mercado (índice IGNM da B3), gerando uma lista de ações e gráficos de P/L e P/VP.
Aviso: este projeto é uma ferramenta de estudo e screening quantitativo. Os critérios e limiares são convenções de análise, não constituem recomendação de compra ou venda. Decisões de investimento são de responsabilidade de quem as toma.
- Baixa e interpreta a tabela completa de indicadores do Fundamentus (≈1.000 ações).
- Detecta as colunas a partir do cabeçalho da tabela, de modo que continua funcionando mesmo quando o Fundamentus adiciona, remove ou reordena colunas.
- Converte números no padrão brasileiro (
1.234,56) e percentuais (12,34%→0,1234). - Aplica um filtro fundamentalista composto (rentabilidade, margens, liquidez e endividamento).
- Obtém a lista do Novo Mercado direto da API da B3 (sem download manual), com fallback para um CSV local.
- Plota P/L e P/VP das ações selecionadas.
| Dado | Origem | Forma de acesso |
|---|---|---|
| Indicadores fundamentalistas | fundamentus.com.br/resultado.php |
Raspagem HTML (BeautifulSoup) |
| Composição do Novo Mercado (IGNM) | API pública da B3 | indexProxy/indexCall/GetPortfolioDay/<base64> |
A URL da B3 carrega os parâmetros da consulta codificados em base64
(ex.: {"language":"pt-br","pageNumber":1,"pageSize":1000,"index":"IGNM","segment":"1"}).
Trocando o campo index, a mesma função serve para outros índices (IBOV, IFIX,
SMLL, etc.).
- Python 3.9+
- Bibliotecas:
pip install beautifulsoup4 lxml pandas numpy matplotlibAs demais dependências (urllib, json, base64, unicodedata) fazem parte da
biblioteca padrão do Python.
- Abra o notebook no Colab.
- Execute as células na ordem. A lista do Novo Mercado é buscada automaticamente da API da B3 — não é preciso montar o Google Drive.
- Caso a API esteja indisponível, o bloco
exceptusa um CSV local; nesse caso, baixe o arquivo do índice IGNM emhttps://sistemaswebb3-listados.b3.com.br/indexPage/day/IGNM?language=pt-bre ajuste o caminho emcaminho_csv.
git clone <url-do-repositorio>
cd <repositorio>
pip install -r requirements.txt # ou o comando pip acima
jupyter notebook Fundamentos_IDV_v4_novomercado.ipynb| # | Célula | O que faz |
|---|---|---|
| 1 | Raspagem | Baixa o HTML do Fundamentus e localiza a tabela de resultados. |
| 2 | Extração | Lê os nomes das colunas do cabeçalho, mapeia para nomes limpos e monta o DataFrame com o texto cru de cada célula. |
| 3 | Tratamento | Converte o formato brasileiro em número (to_number); percentuais viram fração; liquidez e patrimônio são expressos em milhões de R$. |
| 4 | Filtro | Aplica os critérios fundamentalistas e ordena por P/L. |
| 5 | Novo Mercado | Busca a carteira IGNM na API da B3 (com fallback para CSV). |
| 6 | Cruzamento | Mantém apenas as ações aprovadas que também estão no Novo Mercado. |
| 7 | Gráficos | Barras horizontais de P/L e P/VP das ações finais. |
O filtro combina rentabilidade, eficiência, liquidez e solvência:
| Indicador | Regra | Objetivo |
|---|---|---|
| ROE | >= 6% |
Retorno sobre o patrimônio |
| ROIC | >= 6% |
Retorno sobre o capital investido |
| Margem líquida | >= 4% |
Lucratividade |
| Margem EBIT | >= 4% |
Rentabilidade operacional (garante EBIT > 0) |
| Liquidez 2 meses | >= R$ 8 mi |
Volume negociado suficiente |
| Patrimônio líquido | >= R$ 1,5 mi |
Porte mínimo |
| Dívida líquida / Patrimônio | < 1,0 |
Endividamento controlado |
| Dívida líquida / EBIT | < 3 |
Dívida quitável em poucos anos |
| Liquidez corrente | >= 1,0 |
Folga de caixa no curto prazo |
Nota sobre a dívida: o Fundamentus deixou de divulgar Dívida Bruta/Patrimônio na
tela de resultados, passando a Dívida Líquida/Patrimônio. Como a dívida líquida
desconta o caixa, o limiar foi ajustado para < 1,0 (mais estrito). A métrica
Dívida Líquida/EBIT é derivada de EV/EBIT − P/EBIT, sem depender do valor contábil
do patrimônio. Valores negativos indicam caixa líquido (empresa com mais caixa que
dívida) e passam naturalmente nos critérios.
Todos os limiares ficam comentados na célula de filtro para facilitar a calibração. Setores como bancos e utilities têm alavancagem estruturalmente diferente e podem pedir limiares próprios.
- Codificação: o Fundamentus responde em
latin-1; o tratamento já considera isso. - Robustez a mudanças de layout: as colunas são identificadas por nome (não por posição), então a inserção de uma coluna nova no meio da tabela não desalinha os demais indicadores.
- Reprodutibilidade: os dados são de mercado e mudam a cada dia; a saída varia conforme a data de execução.
Defina a licença do projeto (ex.: MIT). Os dados pertencem às respectivas fontes (Fundamentus e B3) e estão sujeitos aos termos de uso delas.