Skip to content

Aplicação interativa para otimização de portfólio usando o modelo de Markowitz. Visualize a fronteira eficiente, realize backtests e gere relatórios detalhados de desempenho.

Notifications You must be signed in to change notification settings

brunogaliati/markowitz_backtest

Repository files navigation

Markowitz Backtest Interactive

Aplicação interativa para otimização de portfólio baseada no modelo de Markowitz, com funcionalidades de backtesting e geração de relatórios.

Markowitz Portfolio Optimization

Exemplo de Relatório Gerado

O sistema gera relatórios detalhados em PDF com as análises do portfólio:

Prévia do Relatório

Para visualizar o relatório completo: Baixar exemplo de relatório PDF

O relatório inclui análises detalhadas de desempenho, gráficos de retorno acumulado, matriz de correlação, e métricas de risco do portfólio otimizado.

Descrição

Esta aplicação permite:

  • Selecionar fundos de investimento para compor um portfólio
  • Visualizar a fronteira eficiente de Markowitz
  • Selecionar portfólios ótimos na fronteira eficiente
  • Realizar backtesting do portfólio selecionado
  • Analisar métricas de desempenho (retorno, volatilidade, Sharpe, drawdown)
  • Visualizar a matriz de correlação entre os ativos
  • Gerar relatórios em PDF com os resultados da análise

Requisitos

  • Python 3.8+
  • Bibliotecas listadas em requirements.txt
  • Arquivos de dados no formato correto (veja a seção "Dados Necessários")

Instalação

Opção 1: Instalação via pip

  1. Clone este repositório:

    git clone https://github.com/brunogaliati/markowitz_backtest.git
    cd markowitz_backtest
    
  2. Crie e ative um ambiente virtual:

    python -m venv venv
    venv\Scripts\activate  # Windows
    source venv/bin/activate  # Linux/Mac
    
  3. Instale as dependências:

    pip install -r requirements.txt
    

Opção 2: Executável para Windows

Baixe o executável mais recente da página de releases e execute-o diretamente.

Uso

Executando a aplicação

python main.py

Acesse a aplicação em seu navegador: http://localhost:8051

Fluxo de trabalho típico

  1. Selecione os fundos de investimento desejados no dropdown
  2. Configure os parâmetros de otimização:
    • Número de portfólios a simular
    • Taxa livre de risco (%)
    • Limite de alocação por ativo (%)
  3. Clique em "Executar Otimização"
  4. Visualize a fronteira eficiente e a matriz de correlação
  5. Clique em um ponto da fronteira eficiente para selecionar um portfólio
  6. Clique em "Executar Backtest" para analisar o desempenho histórico
  7. Analise os resultados e métricas de desempenho
  8. Gere um relatório PDF com os resultados

Dados Necessários

A aplicação requer três arquivos CSV na pasta data/:

  1. cadastro.csv - Cadastro dos fundos com colunas:

    • Codigo: código identificador do fundo
    • Nome: nome do fundo
  2. cotas.csv - Histórico de cotas dos fundos com colunas:

    • Codigo: código identificador do fundo
    • Data: data da cota (formato YYYY-MM-DD)
    • Cota: valor da cota
  3. cdi.csv - Histórico do CDI (benchmark) com colunas:

    • Data: data (formato YYYY-MM-DD)
    • CDI: valor do CDI diário

Nota importante: Os arquivos de dados (cadastro.csv, cdi.csv e especialmente cotas.csv) não estão incluídos neste repositório devido ao seu tamanho. O arquivo cotas.csv tem aproximadamente 61MB, excedendo os limites do GitHub para arquivos regulares. Para usar esta aplicação, você precisará obter esses arquivos separadamente e colocá-los na pasta data/.

Você pode usar os scripts download-data.py e download-cdi.py na pasta data/ para baixar esses arquivos, ou entrar em contato para obter os arquivos de amostra.

Estrutura do Projeto

markowitz_backtest/
├── main.py                  # Ponto de entrada da aplicação
├── requirements.txt         # Dependências do projeto
├── build_exe.py             # Script para criar executável
├── hook-src.py              # Hook para PyInstaller
├── data/                    # Diretório para arquivos de dados
│   ├── cadastro.csv         # Cadastro dos fundos
│   ├── cotas.csv            # Histórico de cotas
│   ├── cdi.csv              # Histórico do CDI
│   ├── download-data.py     # Script para download de dados
│   └── download-cdi.py      # Script para download do CDI
└── src/                     # Código-fonte
    ├── __init__.py
    ├── markowitz_backtest_interactive.py  # Interface Dash
    ├── portfolio_calculations.py          # Cálculos de portfólio
    ├── report_pdf.py                      # Geração de relatórios
    └── metrics_info.py                    # Informações sobre métricas

Funcionalidades Principais

  • Otimização de Markowitz: Calcula a fronteira eficiente com base nos retornos históricos
  • Visualização da Fronteira Eficiente: Gráfico interativo com portfólios simulados
  • Matriz de Correlação: Visualização da correlação entre os ativos selecionados
  • Backtesting: Análise do desempenho histórico do portfólio selecionado
  • Métricas de Desempenho: Cálculo de retorno, volatilidade, Sharpe, drawdown, etc.
  • Geração de Relatórios: Exportação dos resultados em formato PDF

Desenvolvimento

Criando um executável

Para criar um executável standalone:

python build_exe.py

O executável será gerado na pasta dist/.

Contribuições

Contribuições são bem-vindas! Por favor, sinta-se à vontade para enviar pull requests.

Licença

MIT

Contato

Bruno Galiati - GitHub

Agradecimentos

  • Modelo de Markowitz para otimização de portfólio
  • Dash e Plotly para a interface interativa
  • Pandas e NumPy para análise de dados

About

Aplicação interativa para otimização de portfólio usando o modelo de Markowitz. Visualize a fronteira eficiente, realize backtests e gere relatórios detalhados de desempenho.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages