Construindo um Dashboard de Análise de Ações do Zero: Guia Passo a Passo
Se você está buscando uma maneira eficaz de analisar o desempenho de diversas empresas no mercado de ações, você veio ao lugar certo. Neste tutorial, vamos aprender a construir um dashboard completo que permite comparar o desempenho e o risco-retorno de várias empresas de forma visual e intuitiva.
Vídeo no Youtube
Configurações Iniciais
Para começar, vamos configurar o ambiente de desenvolvimento e preparar nosso repositório. Certifique-se de ter todas as bibliotecas necessárias instaladas, como pandas, numpy, plotly, entre outras.
import streamlit as st
import pandas as pd
import numpy as np
import yfinance as yf
import plotly.express as px
from datetime import datetime
from streamlit_extras.metric_cards import style_metric_cards
from streamlit_extras.grid import grid
Criando o Menu Lateral
Nosso dashboard terá um menu lateral que permitirá selecionar as empresas que desejamos analisar. Vamos definir as opções disponíveis e preparar a interface para exibir essas escolhas.
def build_sidebar():
st.image("images/logo-250-100-transparente.png")
ticker_list = pd.read_csv("tickers_ibra.csv", index_col=0)
tickers = st.multiselect(label="Selecione as Empresas", options=ticker_list, placeholder='Códigos')
tickers = [t+".SA" for t in tickers]
start_date = st.date_input("De", format="DD/MM/YYYY", value=datetime(2023,1,2))
end_date = st.date_input("Até", format="DD/MM/YYYY", value="today")
if tickers:
prices = yf.download(tickers, start=start_date, end=end_date)["Adj Close"]
if len(tickers) == 1:
prices = prices.to_frame()
prices.columns = [tickers[0].rstrip(".SA")]
prices.columns = prices.columns.str.rstrip(".SA")
prices['IBOV'] = yf.download("^BVSP", start=start_date, end=end_date)["Adj Close"]
return tickers, prices
return None, None
Criando o Corpo do Dashboard
A parte principal do nosso dashboard será composta por gráficos que mostram o desempenho e o risco-retorno das empresas selecionadas. Vamos criar visualizações interativas que permitem uma análise detalhada dos dados.
def build_main(tickers, prices):
weights = np.ones(len(tickers))/len(tickers)
prices['portfolio'] = prices.drop("IBOV", axis=1) @ weights
norm_prices = 100 * prices / prices.iloc[0]
returns = prices.pct_change()[1:]
vols = returns.std()*np.sqrt(252)
rets = (norm_prices.iloc[-1] - 100) / 100
mygrid = grid(5 ,5 ,5 ,5 ,5 , 5, vertical_align="top")
for t in prices.columns:
c = mygrid.container(border=True)
c.subheader(t, divider="red")
colA, colB, colC = c.columns(3)
if t == "portfolio":
colA.image("images/pie-chart-dollar-svgrepo-com.svg")
elif t == "IBOV":
colA.image("images/pie-chart-svgrepo-com.svg")
else:
colA.image(f'https://raw.githubusercontent.com/thefintz/icones-b3/main/icones/{t}.png', width=85)
colB.metric(label="retorno", value=f"{rets[t]:.0%}")
colC.metric(label="volatilidade", value=f"{vols[t]:.0%}")
style_metric_cards(background_color='rgba(255,255,255,0)')
col1, col2 = st.columns(2, gap='large')
with col1:
st.subheader("Desempenho Relativo")
st.line_chart(norm_prices, height=600)
with col2:
st.subheader("Risco-Retorno")
fig = px.scatter(
x=vols,
y=rets,
text=vols.index,
color=rets/vols,
color_continuous_scale=px.colors.sequential.Bluered_r
)
fig.update_traces(
textfont_color='white',
marker=dict(size=45),
textfont_size=10,
)
fig.layout.yaxis.title = 'Retorno Total'
fig.layout.xaxis.title = 'Volatilidade (anualizada)'
fig.layout.height = 600
fig.layout.xaxis.tickformat = ".0%"
fig.layout.yaxis.tickformat = ".0%"
fig.layout.coloraxis.colorbar.title = 'Sharpe'
st.plotly_chart(fig, use_container_width=True)
Configurando a Página
Finalmente, vamos configurar a página e chamar as funções build_sidebar()
e build_main()
st.set_page_config(layout="wide")
with st.sidebar:
tickers, prices = build_sidebar()
st.title('Python para Investidores')
if tickers:
build_main(tickers, prices)
Salvando as Alterações no GitHub
Após concluir a construção do dashboard, vamos salvar nossas alterações no GitHub para facilitar o compartilhamento e a colaboração com outros usuários.
Fazendo o Deploy do Dashboard no Streamlit.io
Por fim, vamos implantar nosso dashboard na nuvem usando o Streamlit.io. Isso nos permitirá acessar e compartilhar nossa análise de ações de qualquer lugar, a qualquer momento.
Com este tutorial, você estará pronto para construir seu próprio dashboard de análise de ações do zero, permitindo uma análise eficiente e visualmente atraente do mercado financeiro. Aproveite e comece a explorar as possibilidades que essa ferramenta oferece para tomar decisões informadas e estratégicas nos seus investimentos.