Metodologia de Filtros - italostatonato/stock-screener-automation GitHub Wiki

Metodologia de Filtros

Revisado em 15/09/2026 contra config.yaml, src/scorer.py, src/filters.py, src/scraper.py, src/market_data.py e src/benchmark.py.

Frequência e indicadores

O screener coleta semanalmente, com início agendado para segunda-feira às 10h de Brasília, e permite acionamento manual. As datas dos snapshots registram as execuções. Liquidez diária, CDI diário e variações em 24h mantêm a frequência da métrica de origem; não indicam atualização diária dos rankings.

Ordem de processamento

O score é calculado no universo completo da execução, antes dos pisos de elegibilidade. Cada indicador vira um ranking percentílico. Para indicadores em que menor é melhor, o percentil é invertido por 100 - percentil. O score é a média de sete fatores com peso 1/7, limitado a 0–100 e arredondado a uma casa decimal. Valores ou colunas ausentes recebem nota 50.

A seleção aplica os critérios mínimos, ordena por score decrescente, desempata pelo ticker em ordem alfabética e limita o resultado a top_n. As ações são deduplicadas por empresa após a ordenação: fica a classe com melhor posição. A chave usa o nome normalizado ou o radical do ticker quando o nome não está disponível.

O código atual não aplica cortes Q25/Q75 nem tem fallback de quartis. Pode haver menos de 20 ativos. Se o Top FII ou Top Ações ficar vazio, main.py interrompe a execução.

FIIs

Sete fatores do score:

  • DY (12M) MÉDIA: maior é melhor;
  • P/VP: menor é melhor;
  • LIQUIDEZ DIÁRIA (R$): maior é melhor;
  • PATRIMÔNIO LÍQUIDO: maior é melhor;
  • RENTAB. PERÍODO: maior é melhor;
  • TAX. ADMINISTRAÇÃO: menor é melhor;
  • TAX. PERFORMANCE: menor é melhor.

Pisos atuais de config.yaml:

  • P/VP presente e maior que zero;
  • DY médio de 12 meses presente e maior que 0,3% (0.003);
  • liquidez diária presente e maior que R$ 100.000;
  • patrimônio líquido presente e maior que R$ 50.000.000;
  • até 20 FIIs.

Na elegibilidade, se a coluna inteira DY (12M) MÉDIA não existir, o filtro usa DIVIDEND YIELD para compatibilidade histórica. Um valor nulo numa coluna existente não aciona esse fallback. O score continua usando seus sete fatores: o DY médio ausente recebe nota neutra.

Ações

Sete fatores do score:

  • Dividend Yield: maior é melhor;
  • Preço/VPA: menor é melhor;
  • EV/EBITDA: menor é melhor;
  • Margem Líquida: maior é melhor;
  • ROInvC (ROIC): maior é melhor;
  • RPL (ROE): maior é melhor;
  • Volume Diário Médio (3 meses): maior é melhor.

Pisos atuais:

  • ticker e preço presentes; tickers repetidos são removidos;
  • Preço/VPA e EV/EBITDA presentes e maiores que zero;
  • Dividend Yield presente e maior que 2% (0.02);
  • liquidez presente e maior que R$ 500.000;
  • valor de mercado presente e maior que R$ 200.000.000;
  • até 20 empresas.

Margem Líquida e ROA positivos não são filtros fixos atuais. ROA, P/L e EV/EBIT não integram os sete fatores do score de ações.

Como ler Status

  • Rank #N: posição no Top N.
  • Aprovado (fora do Top N): passou nos pisos e ficou fora do limite.
  • Eliminado no filtro fixo: ...: primeira condição que falhou.
  • Eliminado por duplicidade da empresa: outra classe da mesma empresa foi priorizada na seleção de ações.

Snapshots antigos podem guardar metodologia e rótulos anteriores. Atualizar a documentação não recalcula o histórico já observado.

Fontes e aliases: Fontes de Dados.