Visualizando Portfólios Financeiros com Dash e Plotly
Neste artigo, vamos construir um dashboard completo de portfólio financeiro usando Python, Plotly e Dash, cobrindo desde a coleta de dados até gráficos interativos.
1. Por que Visualizar Portfólios
Visualizar portfólios permite:
Comparar desempenho de diferentes ativos.
Monitorar variações de retorno e volatilidade.
Avaliar alocação de capital.
Identificar correlação entre ativos, útil para diversificação.
Tomar decisões baseadas em dados reais e atualizados.
2. Preparando o Ambiente
Instale as bibliotecas necessárias:
pip install pandas numpy yfinance plotly dash
pandas / numpy → manipulação de dados.
yfinance → coleta de preços históricos.
plotly → gráficos interativos.
dash → framework para criar dashboards web interativos.
3. Coletando Dados de Ativos
Vamos criar um portfólio com PETR4, VALE3 e ITUB4.
import yfinance as yf
import pandas as pd
ativos = ["PETR4.SA", "VALE3.SA", "ITUB4.SA"]
dados = yf.download(ativos, start="2022-01-01", end="2023-12-31")["Adj Close"]
print(dados.head())
4. Calculando Retornos e Volatilidade
# Retornos diários
retornos = dados.pct_change().dropna()
# Retorno acumulado
retorno_acumulado = (1 + retornos).cumprod()
# Volatilidade anualizada
volatilidade = retornos.std() * (252 ** 0.5)
# Retorno anualizado médio
retorno_medio = retornos.mean() * 252
print("Retorno anualizado médio:\n", retorno_medio)
print("Volatilidade anualizada:\n", volatilidade)
5. Construindo Gráficos com Plotly
5.1 Retorno Acumulado
import plotly.graph_objs as go
fig = go.Figure()
for ativo in retorno_acumulado.columns:
fig.add_trace(go.Scatter(
x=retorno_acumulado.index,
y=retorno_acumulado[ativo],
mode='lines',
name=ativo
))
fig.update_layout(
title="Retorno Acumulado do Portfólio",
xaxis_title="Data",
yaxis_title="Retorno Acumulado",
template="plotly_dark"
)
fig.show()
5.2 Alocação de Ativos (Pie Chart)
import plotly.express as px
pesos = [0.4, 0.35, 0.25] # exemplo de alocação
fig_pie = px.pie(
names=ativos,
values=pesos,
title="Alocação de Ativos no Portfólio"
)
fig_pie.show()
5.3 Heatmap de Correlação
fig_corr = px.imshow(
retornos.corr(),
text_auto=True,
title="Correlação entre Ativos"
)
fig_corr.show()
📌 O heatmap ajuda a visualizar como os ativos se movem juntos, auxiliando na diversificação.
6. Criando o Dashboard com Dash
6.1 Estrutura básica do Dash
from dash import Dash, dcc, html
app = Dash(__name__)
app.layout = html.Div([
html.H1("Dashboard de Portfólio Financeiro", style={"textAlign": "center"}),
dcc.Graph(figure=fig), # Retorno Acumulado
dcc.Graph(figure=fig_pie), # Alocação de Ativos
dcc.Graph(figure=fig_corr) # Heatmap de Correlação
])
if __name__ == "__main__":
app.run_server(debug=True)
📌 Ao executar, o dashboard será acessível via localhost, com gráficos interativos que podem ser explorados dinamicamente.
7. Tornando o Dashboard Interativo
Podemos adicionar dropdowns para selecionar ativos ou intervalos de datas:
from dash.dependencies import Input, Output
app.layout = html.Div([
html.H1("Dashboard Interativo de Portfólio"),
dcc.Dropdown(
id="ativos_dropdown",
options=[{"label": ativo, "value": ativo} for ativo in ativos],
value=ativos,
multi=True
),
dcc.Graph(id="grafico_retorno"),
])
@app.callback(
Output("grafico_retorno", "figure"),
Input("ativos_dropdown", "value")
)
def atualizar_grafico(selected_ativos):
fig = go.Figure()
for ativo in selected_ativos:
fig.add_trace(go.Scatter(
x=retorno_acumulado.index,
y=retorno_acumulado[ativo],
mode="lines",
name=ativo
))
fig.update_layout(title="Retorno Acumulado", template="plotly_dark")
return fig
if __name__ == "__main__":
app.run_server(debug=True)
📌 Agora o usuário pode selecionar quais ativos visualizar dinamicamente, tornando o dashboard muito mais interativo.
8. Boas Práticas
Atualização de dados automática: usar APIs para preços em tempo real.
Normalização de valores: facilita comparação entre ativos de preços diferentes.
Métricas de risco: adicionar indicadores como VaR, drawdown, beta.
Responsividade: organizar gráficos e filtros para diferentes telas.
Interatividade avançada: sliders de datas, filtros por classe de ativo e hover tooltips.
9. Conclusão
Com Dash e Plotly, podemos criar dashboards interativos que permitem:
Monitorar retorno acumulado e diário do portfólio.
Visualizar alocação de ativos de forma clara.
Analisar correlações para otimização de diversificação.
Tomar decisões de investimento baseadas em dados atualizados e interativos.
Python torna possível integrar análise financeira e visualização em uma única aplicação, aumentando a eficiência e clareza na gestão de portfólios.

Comentários
Postar um comentário