Como referenciar este texto: Dashboard para análise fundamentalista. Rodrigo Terra. Publicado em: 18/10/2022. Link da postagem: https://www.makerzine.com.br/tecnologia/dashboard-para-analise-fundamentalista.
Conteúdos dessa postagem
Este trabalho não tem como objetivo a recomendação de compra ou venda de papéis na bolsa de valores, seu objetivo real tem caráter único e exclusivamente educacional.
Proposta de desenvolvimento do dashboard
Desenvolver um Dashboard com os seguintes requisitos:
- 3 painéis que apresentem, nesta sequência:
- Painel 1: Seleção única de papel da B³ e apresentação dos principais dados, como:
- Dados do dia: Preço de abertura, máximo e mínimo do dia, máximo e mínimo das últimas 52 semanas, volume, quantidade de ações, patrimônio líquido, liquidez, taxa de crescimentos dos últimos 5 anos.
- Indicadores fundamentalistas: Preço/Lucro (P/L), dividend yield (DY), retorno sobre patrimônio lóquido (ROE), retorno sobre capital empregado (ROIC), preço sobre receita líquida (PSR), margem líquida, dívida sobre patrimônio líquido.
- Dados estatísticos: Desvio padrão da cotação do papel nos últimos 5 anos, Correlação com o IBOV, os 4 quartis das cotações históricas, cotação média histórica, cotação mínima histórica, cotação máxima histórica e cotação do dia.
- Painel 2: Seleção de perfil de investimento, com resultado de carteira sugerida contendo 10 papéis segundo perfil selecionado, com:
- Seleção de perfil, como: Conservador, Moderado e Arrojado.
- Seleção de papéis por preço.
- Indicador de rentabilidade do IBOV, nos últimos 5 anos.
- Indicador de rentabilidade da carteira sugerida, nos últimos 5 anos.
- Painel 3: Seleção de pesos dos principais indicadores fundamentalistas e recomendação de carteira segundo seleção, com:
- P/L, P/VP, PSR, P/Ativo, P/Capital de giro, P/EBIT, P/EBITDA, Margem EBITDA, Dividen yield, Margem líquida, Liquidez corrente, ROIC, ROE, Liquidez nos últimos 2 meses, Patrimônio líquido, Dívida bruta / patrimônio, Crescimento nos últimos 5 anos.
- Indicador de rentabilidade do IBOV, nos últimos 5 anos.
- Indicador de rentabilidade da carteira sugerida, nos últimos 5 anos.
- Seleção de papéis por preço.
- Painel 1: Seleção única de papel da B³ e apresentação dos principais dados, como:
A interface deve ser amigável, pois para que as pessoas que estão começando a conhecer a área de investimentos em ações se sintam menos desconfortáveis com a quantidade de informações.
Fontes de dados
Bovespa (B³).
Fundamentus.
Yahoo Finance.
Google Finance.
Ferramentas utilizadas
Power BI
Python
Google Colab
Google Planilhas
Procedimentos
Extração de dados
Fundamentus: Fonte de dados disponibilizados diretamente pelo site.
Google Finance: Utilização da fórmula (obs.: Delay de até 20 min)
=GoogleFinance()
Obs.: No exemplo acima, R$11,40 era a cotação do papel “EMBR3”, Embraer, no momento em que fiz o print da equação.
Python, Yahoo Finance e Google Colab: Código com o nome das ações, utilizando a biblioteca Yahoo Finance e código para exportar dados para um arquivo em formato .CSV, utilizando as bibliotecas Pandas e Pandas_datareader.
O código utilizado é o que segue:
#Importando as bibliotecas utilizadas
import pandas as pd
import pandas_datareader.data as web
#Instalando o Yahoo Finance
!pip install yfinance --upgrade --no-cache-dir
#Importanto o Yfinance
import yfinance as yf
yf.pdr_override()
#Lista com as ações pesquisas mais o IBOVESPA
acoes = ['TRAD3.SA', 'MGLU3.SA', 'EMBR3.SA', 'HETA3.SA', 'HAPV3.SA', 'MAPT3.SA', 'ELMD3.SA', 'RAIL3.SA', 'AGXY3.SA', 'DASA3.SA', 'MAPT4.SA', 'IGTI11.SA', 'IGTI3.SA', 'ORVR3.SA','PDTC3.SA', 'NTCO3.SA', 'AALR3.SA', 'DMMO3.SA', 'RRRP3.SA', 'SCAR3.SA', 'RCSL3.SA', 'CTSA3.SA', 'BKBR3.SA', 'MWET3.SA', 'KRSA3.SA', 'SMFT3.SA', 'CEED3.SA', 'CEED4.SA', 'ESTR4.SA', 'HETA4.SA', 'SEER3.SA', 'SEQL3.SA', 'CASH3.SA', 'OPCT3.SA', 'DTCY3.SA', 'AMAR3.SA', 'COGN3.SA', 'LUPA3.SA', 'RCSL4.SA', 'CTSA4.SA', 'IFCM3.SA', 'BRFS3.SA', 'VIIA3.SA', 'HBSA3.SA', 'MWET4.SA', 'CLSA3.SA', 'SHOW3.SA', 'ANIM3.SA', 'TELB3.SA', 'CRDE3.SA', 'NORD3.SA', 'TCNO3.SA', 'GPIV33.SA', 'AHEB6.SA', 'MEAL3.SA', 'BIOM3.SA', 'AHEB3.SA', 'BLUT3.SA', 'TCNO4.SA', 'NINJ3.SA', 'TELB4.SA', 'BOBR4.SA', 'BAHI3.SA', 'ADHM3.SA', 'CVCB3.SA', 'MBLY3.SA', 'IRBR3.SA', 'DOTZ3.SA', 'TXRX3.SA', 'ENJU3.SA', 'ALPK3.SA', 'AZUL4.SA', 'TCSA3.SA', 'FRIO3.SA', 'BRPR3.SA', 'CEDO3.SA', 'TEND3.SA', 'BLUT4.SA', 'VIVR3.SA', 'CTNM3.SA', 'CEDO4.SA', 'OIBR4.SA', 'BDLL3.SA', 'IGBR3.SA', 'PLAS3.SA', 'NEXP3.SA', 'GOLL4.SA', 'AVLL3.SA', 'BDLL4.SA', 'TXRX4.SA', 'CTNM4.SA', 'OIBR3.SA', 'JFEN3.SA', 'SGPS3.SA', 'PMAM3.SA', 'ATMP3.SA', 'RPMG3.SA', 'GSHP3.SA', 'RSID3.SA', 'SNSY5.SA', 'MTIG4.SA', 'LLIS3.SA', 'MNDL3.SA', 'TEKA4.SA', 'TEKA3.SA', 'APER3.SA', 'FIGE3.SA', 'FRTA3.SA', 'WEST3.SA', 'PDGR3.SA', 'INEP4.SA', 'INEP3.SA', 'HOOT4.SA', 'SLED4.SA', 'OSXB3.SA', 'SYNE3.SA', 'MRFG3.SA', 'MNPR3.SA', 'SLED3.SA', 'FHER3.SA', 'MGEL4.SA', 'BRAP3.SA', 'BRAP4.SA', 'USIM5.SA', 'USIM3.SA', 'EUCA4.SA', 'GOAU3.SA', 'TPIS3.SA', 'HBTS5.SA', 'GOAU4.SA', 'GGBR3.SA', 'JBSS3.SA', 'BRKM6.SA', 'PETR4.SA', 'GGBR4.SA', 'PCAR3.SA', 'PETR3.SA', 'EUCA3.SA', 'TASA4.SA', 'TKNO4.SA', 'EPAR3.SA', 'TASA3.SA', 'CLSC3.SA', 'BAZA3.SA', 'MYPK3.SA', 'HBRE3.SA', 'DEXP4.SA', 'USIM6.SA', 'BRKM5.SA', 'ETER3.SA', 'DEXP3.SA', 'HAGA4.SA', 'VALE3.SA', 'CLSC4.SA', 'UNIP3.SA', 'RNEW3.SA', 'BRKM3.SA', 'RNEW11.SA', 'CEBR5.SA', 'CGRA4.SA', 'NUTR3.SA', 'RNEW4.SA', 'EALT4.SA', 'BALM4.SA', 'ENAT3.SA', 'BNBR3.SA', 'CGRA3.SA', 'UNIP5.SA', 'GPAR3.SA', 'UNIP6.SA', 'CEBR6.SA', 'FESA4.SA', 'FESA3.SA', 'EALT3.SA', 'RAPT3.SA', 'PTNT4.SA', 'CEAB3.SA', 'NEOE3.SA', 'BALM3.SA', 'SAPR3.SA', 'BBAS3.SA', 'SAPR11.SA', 'SAPR4.SA', 'RAPT4.SA', 'CAMB3.SA', 'CEBR3.SA', 'TECN3.SA', 'AFLT3.SA', 'CBAV3.SA', 'SOND5.SA', 'SOND6.SA', 'MOVI3.SA', 'CPLE3.SA', 'CRPG5.SA', 'SUZB3.SA', 'KLBN4.SA', 'EKTR3.SA', 'KLBN11.SA', 'AURA33.SA', 'CSNA3.SA', 'CPLE11.SA', 'CRIV3.SA', 'CRPG6.SA', 'KLBN3.SA', 'CPLE6.SA', 'TRPL4.SA', 'UCAS3.SA', 'JALL3.SA', 'ENGI4.SA', 'PFRM3.SA', 'MTSA4.SA', 'BEES3.SA', 'RANI3.SA', 'BGIP4.SA', 'BEES4.SA', 'ENBR3.SA', 'JHSF3.SA', 'CEEB3.SA', 'SLCE3.SA', 'ALLD3.SA', 'BMEB4.SA', 'CSRN6.SA', 'PEAB3.SA', 'AGRO3.SA', 'JOPA3.SA', 'MDNE3.SA', 'SMTO3.SA', 'LEVE3.SA', 'DXCO3.SA', 'EKTR4.SA', 'ROMI3.SA', 'LOGG3.SA', 'BRSR6.SA', 'HBOR3.SA', 'CEEB5.SA', 'ENGI11.SA', 'ATOM3.SA', 'TAEE11.SA', 'TAEE3.SA', 'CMIN3.SA', 'TAEE4.SA', 'KEPL3.SA', 'ABCB4.SA', 'BRSR3.SA', 'ITSA4.SA', 'CCRO3.SA', 'ITSA3.SA', 'CSAN3.SA', 'CAML3.SA', 'CSRN5.SA', 'CSRN3.SA', 'BMKS3.SA', 'COCE5.SA', 'TRPL3.SA', 'SANB3.SA', 'WLMM3.SA', 'POMO3.SA', 'EQMA3B.SA', 'ALUP3.SA', 'PEAB4.SA', 'CRIV4.SA', 'RSUL4.SA', 'PTBL3.SA', 'ALUP11.SA', 'ALUP4.SA', 'SHUL4.SA', 'BMEB3.SA', 'REDE3.SA', 'PTNT3.SA', 'SANB11.SA', 'BBDC3.SA', 'MLAS3.SA', 'DOHL4.SA', 'GETT3.SA', 'BMGB4.SA', 'GETT4.SA', 'CPFE3.SA', 'PATI4.SA', 'PLPL3.SA', 'SANB4.SA', 'VBBR3.SA', 'JSLG3.SA', 'POSI3.SA', 'LPSB3.SA', 'TUPY3.SA', 'UGPA3.SA', 'CRPG3.SA', 'POMO4.SA', 'COCE3.SA', 'CMIG4.SA', 'MELK3.SA', 'ITUB3.SA', 'LIGT3.SA', 'BGIP3.SA', 'PATI3.SA', 'QUAL3.SA', 'CGAS3.SA', 'BRSR5.SA', 'CARD3.SA', 'EVEN3.SA', 'SBFG3.SA', 'WHRL3.SA', 'CGAS5.SA', 'BBDC4.SA', 'HAGA3.SA', 'BRIV4.SA', 'BSLI4.SA', 'LVTC3.SA', 'WLMM4.SA', 'EQTL3.SA', 'JOPA4.SA', 'PRNR3.SA', 'MRVE3.SA', 'BRBI11.SA', 'VULC3.SA', 'PRIO3.SA', 'BEEF3.SA', 'ENGI3.SA', 'WHRL4.SA', 'EQPA3.SA', 'LAVV3.SA', 'CYRE3.SA', 'WIZS3.SA', 'GUAR3.SA', 'ITUB4.SA', 'BTTL3.SA', 'BPAC5.SA', 'GRND3.SA', 'OFSA3.SA', 'TIMS3.SA', 'AZEV4.SA', 'EQPA5.SA', 'BBSE3.SA', 'CURY3.SA', 'CXSE3.SA', 'AZEV3.SA', 'EQPA7.SA', 'SIMH3.SA', 'GFSA3.SA', 'TGMA3.SA', 'ODPV3.SA', 'BSLI3.SA', 'EZTC3.SA', 'BMIN4.SA', 'CIEL3.SA', 'AESB3.SA', 'VIVT3.SA', 'SOJA3.SA', 'BOAS3.SA', 'DMVF3.SA', 'TRIS3.SA', 'BRIV3.SA', 'RECV3.SA', 'CMIG3.SA', 'CSMG3.SA', 'BPAN4.SA', 'MERC4.SA', 'MODL4.SA', 'TTEN3.SA', 'EMAE4.SA', 'CEPE5.SA', 'CEPE6.SA', 'MRSA6B.SA', 'MRSA6B.SA', 'ENMT3.SA', 'MODL11.SA', 'VLID3.SA', 'ENMT4.SA', 'MRSA3B.SA', 'MRSA3B.SA', 'FIQE3.SA', 'MEGA3.SA', 'MODL3.SA', 'ASAI3.SA', 'MILS3.SA', 'PARD3.SA', 'PSSA3.SA', 'RPAD6.SA', 'RAIZ4.SA', 'CRFB3.SA', 'BRGE12.SA', 'BPAC11.SA', 'DIRR3.SA', 'SBSP3.SA', 'VITT3.SA', 'MRSA5B.SA', 'MRSA5B.SA', 'GMAT3.SA', 'BRGE8.SA', 'FLRY3.SA', 'PORT3.SA', 'BRML3.SA', 'FRAS3.SA', 'BMIN3.SA', 'DOHL3.SA', 'GGPS3.SA', 'ELET3.SA', 'VVEO3.SA', 'CTKA4.SA', 'STBP3.SA', 'EGIE3.SA', 'BLAU3.SA', 'VIVA3.SA', 'ENEV3.SA', 'ELET6.SA', 'ABEV3.SA', 'BRGE3.SA', 'B3SA3.SA', 'BRGE11.SA', 'JPSA3.SA', 'BMOB3.SA', 'MTRE3.SA', 'HYPE3.SA', 'RPAD3.SA', 'PGMN3.SA', 'ALSO3.SA', 'LOGN3.SA', 'RPAD5.SA', 'BRGE5.SA', 'PNVL3.SA', 'TFCO4.SA', 'MDIA3.SA', 'ECOR3.SA', 'SULA3.SA', 'ALPA3.SA', 'MULT3.SA', 'SULA11.SA', 'SULA4.SA', 'RDNI3.SA', 'CPLE5.SA', 'LREN3.SA', 'BPAC3.SA', 'INTB3.SA', 'AMBP3.SA', 'GEPA3.SA', 'ARZZ3.SA', 'MATD3.SA', 'ESPA3.SA', 'ALPA4.SA', 'SOMA3.SA', 'CSAB3.SA', 'CSAB4.SA', 'DESK3.SA', 'MERC3.SA', 'PINE4.SA', 'BRGE6.SA', 'RENT3.SA', 'VAMO3.SA', 'CTKA3.SA', 'GEPA4.SA', 'ONCO3.SA', 'CSED3.SA', 'LIPR3.SA', 'AMER3.SA', 'LUXM4.SA', 'WEGE3.SA', 'TOTS3.SA', 'RDOR3.SA', 'BAUH4.SA', 'RADL3.SA', 'LJQQ3.SA', 'SQIA3.SA', 'ARML3.SA', 'PETZ3.SA', 'MOAR3.SA', 'CASN3.SA', 'AURE3.SA', 'NGRD3.SA', 'YDUQ3.SA', 'BRIT3.SA', 'CALI3.SA', 'LWSA3.SA', 'AERI3.SA']
#Criando u DataFrame, chamado tabela, para armazenar as informações das ações
tabela=pd.DataFrame()
#Criando um loop para preencher a tabela com os dados das ações
for i in acoes:
precos = yf.Ticker(i).history([i],start="2017-10-07",end="2022-10-07")['Close']
tabela[i]=precos
#Apresentando do DataFrame Criando
tabela
O resultado exibido é o que segue:
Utilizando a biblioteca Pandas e os dados coletados do Yahoo Finance, solicitei que alguns dados estatísticos fossem apresentados, como Contagem de dados, média, desvio padrão e quartis, com o comando:
#Solicitação para que a bilbioteca pandas apresente os principais dados estatísticos do DataFrame
tabela.describe()
e o resultado obtido foi:
Para finalizar:
#Solicitação para que a bilbioteca pandas exporte o DataFrame para um arquivo em formato .CSV
tabela.to_csv('tabela_de_cotações.csv')
e você terá um arquivo em formato .CSV para utilizar onde quiser.
Transformação dos dados
Power BI: Conexão com Google planilhas, alteração do tipo de dados, por coluna, remoção das linhas vazias.
Google planilhas: Normalização de dados (Indicadores fundamentalistas e outras colunas, como: Volume, Patrimônio, etc) com o intuito de poupar processamento no Power BI, aumentando o desempenho de uso do Dashboard, segundo a equação:
Google Finance: Utilização da fórmula (obs.: Delay de até 20 min):
=GoogleFinance()
Carregamento dos dados
Google planilhas: Todos os dados obtidos foram adicionados em uma única planilha com diferentes abas. O intuito de se manter tais dados em uma planilha, e não em um Banco de Dados, é que nãs planilhas Google podemos contar com a atualização automática dos dados dos papéis, utilizando o Google Finance.
Power BI: Conexão com Google planilhas.
Modelagem
Power BI: Criação de relacionamento entre tabelas, criação de 16 parâmetros para serem utilizados como “pesos” no cálculo do Score das ações, conforme segue:
Parâmetro (x) = GenerateSeries(0, 4, 1)
Criação de medida para gerar o resultado do Score para classificação das ações, conforme demonstrado abaixo:
Criação de medida para o cálculo da rentabilidade da carteira:
Rentab_carteira = SUM(‘Google Finance'[Rentabilidade ajustada])
Desenvolvimento do Dashboard
Power BI – Recursos visuais utilizados:
- Títulos e termos de identificação,
- Pesquisar
- Imagem interativa,
- Cards para apresentar dados específicos,
- Indicador
- Tabela
- Segmentação de dados com controle deslizante
- Segmentação de dados com Orientação horizontal e seleção única
Resultado
Como resultado desse trabalho, temos 3 painéis, contemplando as exigências colocadas inicialmente.
Painel 1
Como solicitado inicialmente, o Painel 1 tem por objetivo apresentar dados sobre um certo papel. Utilizando a barra de pesquisa, é possível encontrar mais de 470 papéis (listados acima).
Painel 2
No Painel 2, foi utilizada uma segmentação de dados com orientação horizontal e seleção única para criar os “botões”. Cada botão corresponde a um perfil.
Utilizando a equação do Score Final e ordenei os papéis segundo o próprio resultado do Score_final, separando-os da seguinte maneira para os perfis:
- Perfil Conservador: 25% dos maiores papéis considerando o Score Final.
- Perfil Moderado: de 25,1% a 75% do maiores papéis segundo o Score Final.
- Perfil Arrojado: de 75,1% até 100% do restante dos papéis.
Observação: Acredito que existam maneiras mais adequadas de se analisar esses papéis, por exemplo, utilizando-se do Desvio Padrão (volatilidade) das cotações de cada papel, combinado com o crescimento da empresa no mesmo período tomado. Por uma questão de tempo, essa foi a maneira mais rápida e eficiente que encontrei.
Painel 3
Por fim , o Painel 3 apresenta parâmetros criados da mesma forma que no Painel 2, porém com apresentações de valores que variam de 0 a 4, sendo 0 o correspondente a “Menor importância” e 4 “Maior importância”.
Ao selecionarmos cada um dos valores para os indicadores fundamentalistas, o Score Final é calculado e apresentado na tabela ao lado direito do painel, sendo ordenado pelo maior Score final.
No canto inferior direito, também é apresentado um comparativo de rentabilidade da carteira, supondo que cada ação corresponde a 1/10 do total de ativos da certeira, apenas somando-se os valores de rentabilidade ajustada de cada uma das ações que apareceram como sugestão.