GithubHelp home page GithubHelp logo

jasondavindev / greenblatt-crawler Goto Github PK

View Code? Open in Web Editor NEW
6.0 3.0 1.0 31 KB

Crawler para buscar ativos de empresas listadas na B3 utilizando a API do site Status Invest

Go 99.40% Makefile 0.60%
statusinvest greenblatt golang finances investments b3

greenblatt-crawler's Introduction

Greenblatt Crawler

Este repositório contém uma aplicação escrita em Golang que busca ativos de empresas listadas na bolsa (B3) de acordo com determinados filtros. Com os dados computados, é aplicado uma fórmula personalizada baseada na de Joel Greenblatt.

  • Você consegue alterar os filtros listados no arquivo filtros.yml
  • Os dados de saída serão gerados no arquivo result.csv

Filtros

No arquivo de configuração, você deve seguir o seguinte padrão:

filtros:
  dy: # (em porcentagem)
    - valor mínimo # (ex: 0.1)
    - valor máximo # (ex: 100)
  roe:
    - 0.1 # (quando emitido o segundo valor, o valor padrão será zero (0))

Filtros disponíveis:

  • dy
  • p_L
  • p_VP
  • p_Ativo
  • margemBruta
  • margemEbit
  • margemLiquida
  • p_Ebit
  • eV_Ebit
  • dividaLiquidaEbit
  • dividaliquidaPatrimonioLiquido
  • p_SR
  • p_CapitalGiro
  • p_AtivoCirculante
  • roe
  • roic
  • roa
  • liquidezCorrente
  • pl_Ativo
  • passivo_Ativo
  • giroAtivos
  • receitas_Cagr5
  • lucros_Cagr5
  • liquidezMediaDiaria
  • vpa
  • lpa

Filtros extras

A API permite filtrar por alguns filtros extras que obecedem um formato diferente. Alguns filtros:

Nome Tipo Valor padrão
Sector string vazio
SubSector string vazio
Segment string vazio
my_range string "0;25"

Agrupamento

É possível fazer uma busca agrupando por areas e o Top N de cada uma das areas. As areas são segment, sector e subsector. Para cada busca por area, há uma pré-ordenação, assim, garantindo a ordenação correta do resultado final.

Valores disponíveis

  • sector
  • subsector
  • segment

Arquivo de configuração

filtros:
  ...
  ...
agrupamento:
  top: 10 # Os 10 primeiros no rank
  class: "sector"

Se as configurações de agrupamento forem omitidas, a busca padrão será executada (não há agrupamento). Se o valor top for omitido, o valor 10 será usado como padrão.

Campos de saída

Campos de saída são as colunas que serão adicionadas ao arquivo de saída. Por exemplo, nome da companhia, ticker, ROE, Preço etc.

Valores disponíveis

  • Companhia
  • Ticker
  • Preco
  • PL
  • Dividendo
  • Roic
  • DividaLiquidaEbit
  • DividaliquidaPatrimonioLiquido
  • EVEbit
  • LiquidezMediaDiaria
  • Lpa
  • Roe
  • LucrosCagr5
  • ReceitasCagr5
  • MargemBruta
  • MargemEbit
  • MargemLiquida
  • PEbit
  • PVP
  • Roa
  • Vpa

Há também um campo extra Area que só é disponibilizado caso você utilize a busca por agrupamento.

Arquivo de configuração

filtros:
  ...
  ...

agrupamento:
  top: 10
  class: "sector"

campos_saida:
  - Companhia
  - Ticker
  - Area # Somente nas busca com agrupamento habilitado
  - Preco
  - PL

As colunas respeitarão a ordem do campos listados.

Ordenação

A ordenação aplicada segue os seguintes criterios:

Nome Regra
P/L Ordem crescente
ROIC Ordem decrescente
Dividendo Ordem decrescente
Posição final Soma das posições das ordenações anteriores

Buildando aplicação

Sem Docker

Se você possui Golang instalado com a versão 1.11.x ou maior, execute o comando

make build

Com Docker

Se você prefere buildar a aplicação utilizando um container docker, execute o comando

make dkbuild

Rodando aplicação

Após a etapa de build, será gerado um arquivo na pasta build/greenblatt_crawler(.exe). Execute-o apenas clicando (Windows) ou da seguinte forma em ambientes Unix

./bin/greenblatt_crawler

greenblatt-crawler's People

Contributors

jasondavindev avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

leodutra

greenblatt-crawler's Issues

Integrar com portal do investidor (CEI)

Integrar com a API do CEI para listar os ativos.

Obs: talvez seja interessante adicionar um banco de dados para salvar os ativos pois o CEI só salva ativos num período de 18 meses.

Retornar apenas um ticker por companhia

Hoje é retornado mais de um registro por companhia, o que distorce um pouco o rank final caso uma mesma empresa ocupe duas ou mais posições no rank. Por exemplo, se filtro por Top 2 e a empresa tem dois registros a busca irá retornar somente uma companhia.
Dar prioridade para ações ON (final 3).

Agrupamento por setor/subsetor

Adicionar agrupamento por setor e subsetor

Infelizmente a API não retorna essas categorias nos endpoints. Será necessário chumbar no código ou fazer uma request na página de pesquisa avançada e pegar os <option>s do <select> (estratégia do Alyson).

  • Criar uma opção para passar o setor para ser aplicado num filtro
  • Criar opção para trazer apenas 1 empresa por setor

Implementar busca de mediana nos indicadores

Indicadores

Alguns indicadores podem sofrer anomalias durante algumas datas. Ex: a empresa tem uma média de pagar 7% dy mas em um mês ela teve de pagar 21% dy e acaba criando uma deformação no indicador. Pegando a média/mediana tornaria isso mais interessante.
Talvez seja interessante pegar o desvio padrão também.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.