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
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
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.
Referências bibliográficas
INCLUIR LIVROS COM O LINK DA AMAZON ASSOCIADOS.
- Microsoft Power Bi for Dummies. Jack A Hyman. 2022. Para saber mais,
Compartilhe este conteúdo se você acredita que ele seja útil para outros profissionais Compartilhar este conteúdo