Você está visualizando atualmente Dashboard para Análise Fundamentalista

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.

 

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

B3_logo

Bovespa (B³).

Site: https://www.b3.com.br/pt_br/

logo yahoo finance

Yahoo Finance.

Site: https://finance.yahoo.com/

Ferramentas utilizadas

Logo_power_BI

Power BI

Python-logo

Python

Google colab logo

Google Colab

sheets

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 BIRecursos 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

Rodrigo Terra

Atuei como Professor de Física e Cultura Maker, por mais de 20 anos. Sou Pesquisador em Ciências Educacionais com ênfase em Tecnologia Educacional e Docência. desenvolvendo trabalhos de Consultorias Pedagógicas para diversas empresas do setor educacional. Há alguns anos, venho direcionando meus estudos para o universo dos dados e programação. Atualmente, trabalho como Líder Acadêmico de matérias técnicas, como Data Analytics, Gestão de Produtos Digitais e Mercado Financeiro. Sou um eterno curioso, apaixonado por café e por uma boa conversa. Acredito que somente com uma formação transdisciplinar é que criamos oportunidades pensar em diferentes aspectos ou ponto de vista de um mesmo assunto, e com isso, desenvolver pessoas mais conscientes e preparadas para a vida.

Deixe um comentário