Aplicação interativa para otimização de portfólio baseada no modelo de Markowitz, com funcionalidades de backtesting e geração de relatórios.
O sistema gera relatórios detalhados em PDF com as análises do portfólio:
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.
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
- Python 3.8+
- Bibliotecas listadas em
requirements.txt
- Arquivos de dados no formato correto (veja a seção "Dados Necessários")
-
Clone este repositório:
git clone https://github.com/brunogaliati/markowitz_backtest.git cd markowitz_backtest
-
Crie e ative um ambiente virtual:
python -m venv venv venv\Scripts\activate # Windows source venv/bin/activate # Linux/Mac
-
Instale as dependências:
pip install -r requirements.txt
Baixe o executável mais recente da página de releases e execute-o diretamente.
python main.py
Acesse a aplicação em seu navegador: http://localhost:8051
- Selecione os fundos de investimento desejados no dropdown
- Configure os parâmetros de otimização:
- Número de portfólios a simular
- Taxa livre de risco (%)
- Limite de alocação por ativo (%)
- Clique em "Executar Otimização"
- Visualize a fronteira eficiente e a matriz de correlação
- Clique em um ponto da fronteira eficiente para selecionar um portfólio
- Clique em "Executar Backtest" para analisar o desempenho histórico
- Analise os resultados e métricas de desempenho
- Gere um relatório PDF com os resultados
A aplicação requer três arquivos CSV na pasta data/
:
-
cadastro.csv
- Cadastro dos fundos com colunas:- Codigo: código identificador do fundo
- Nome: nome do fundo
-
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
-
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.
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
- 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
Para criar um executável standalone:
python build_exe.py
O executável será gerado na pasta dist/
.
Contribuições são bem-vindas! Por favor, sinta-se à vontade para enviar pull requests.
Bruno Galiati - GitHub
- Modelo de Markowitz para otimização de portfólio
- Dash e Plotly para a interface interativa
- Pandas e NumPy para análise de dados