Visualizando Portfólios Financeiros com Dash e Plotly

O acompanhamento de investimentos envolve análise de preços, retorno histórico, risco e correlação entre ativos. Dashboards interativos permitem que essas informações sejam exploradas dinamicamente, oferecendo visão clara para tomada de decisões estratégicas.

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:


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

Postagens mais visitadas deste blog

Python para Computação Quântica: Introdução com Qiskit

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Estrutura Básica de um Programa C# com exemplos