Seis ações da B3, oito anos e meio de pregões e um teste honesto: a carteira "ótima" de Markowitz é escolhida só com dados até 2023 e depois enfrenta 2024 a 2026 sem nenhum retoque. O retorno prometido evapora. A previsão de risco do GARCH, não.
2.113 pregões (jan/2018 a jul/2026, Yahoo Finance, proventos reinvestidos) · treino: 1.486 pregões até dez/2023 · teste: 626 pregões jamais usados na otimização · taxa livre de risco: CDI diário real do BCB · todos os números desta página saem dos artefatos gerados por src/analysis.py.
Finanças quantitativas começam com uma má notícia: retornos diários têm caudas gordas (extremos acontecem muito mais do que a curva normal admite) e a variância muda com o tempo, formando períodos calmos e períodos nervosos. Ignorar isso quebra tudo que vem depois: precificação de risco, tamanho de posição, VaR.
Três perguntas que este estudo responde com dados. Escolha e veja se o mercado concorda com você.
Carteira de 6 papéis líquidos de setores diferentes: PETR4 (petróleo), ITUB4 (bancos), AXIA3 (energia), RENT3 (aluguel de carros), TIMS3 (telecom) e EMBJ3 (aeronáutica). Preços ajustados por proventos, de jan/2018 a jul/2026. E a regra de ouro herdada do machine learning: tudo que decide pesos e parâmetros enxerga só até dez/2023; 2024-2026 fica trancado para o teste.
Preços em base 100 com proventos reinvestidos, semanais. Escala logarítmica: cada linha de grade dobra o valor, então inclinações iguais significam retornos percentuais iguais.
O COVID (mar/2020) derrubou tudo de uma vez, RENT3 e EMBJ3 perderam ~70% em semanas. Dali em diante os destinos divergem: PETR4 multiplicou por quase 9 com dividendos, RENT3 anda de lado até hoje. É essa dispersão que a otimização de carteira tenta explorar, e é nela que mora a armadilha da seção 05.
Em séries temporais, embaralhar dados vaza o futuro para dentro do treino. Aqui o corte é uma data: 1.486 pregões de treino (2018-2023), 626 de teste (2024-2026). Nenhum parâmetro, peso ou hiperparâmetro enxerga o teste.
Sharpe precisa de taxa livre de risco. Em vez de um número fixo, o pipeline baixa o CDI diário do BCB (série SGS 12): 7,48% a.a. médios no treino, 12,97% a.a. no teste. Régua alta: em 2024-2026, renda fixa pagou muito.
Retornos simples para agregar carteira (média ponderada exata) e log-retornos para o GARCH (aditivos no tempo). A análise original somava log-retornos ponderados, uma aproximação que este pipeline corrige.
Para cada ação, um grid de 48 especificações disputa por BIC: famílias GARCH, GJR-GARCH e EGARCH (as duas últimas capturam o efeito alavancagem), ordens (p,q) até 2, e quatro distribuições para os choques. O diagnóstico exige resíduos padronizados sem estrutura (Ljung-Box).
| Ação | Modelo vencedor (BIC) | Distribuição | Persistência | Meia-vida do choque | Vol prevista (1 dia à frente, anualizada) |
|---|---|---|---|---|---|
| PETR4 | EGARCH(1,1) | Student-t | 0,976 | 29 dias | 24,9% |
| ITUB4 | GARCH(1,1) | Student-t | 0,985 | 45 dias | 21,1% |
| AXIA3 | EGARCH(1,1) | Student-t | 0,989 | 64 dias | 28,6% |
| RENT3 | GJR-GARCH(1,1) | Student-t | 0,952 | 14 dias | 32,9% |
| TIMS3 | GARCH(1,1) | Student-t | 0,943 | 12 dias | 28,4% |
| EMBJ3 | EGARCH(2,1) | Student-t | 0,991 | 77 dias | 40,7% |
Três leituras: a Student-t venceu nas 6 (caudas gordas não são opcionais); modelos assimétricos venceram em 4 de 6 (efeito alavancagem); persistência entre 0,94 e 0,99 significa que um choque leva de 12 a 77 pregões para perder metade do efeito. Honestidade estatística: nos resíduos da PETR4 sobra estrutura (Ljung-Box p=0,005 nos quadrados), petróleo é difícil mesmo; nas demais o diagnóstico passa.
Volatilidade condicional anualizada da carteira otimizada, estimada por EGARCH(1,1)-t, médias semanais.
O eixo conta a história macro: pânico do COVID levou a vol da carteira a 139% a.a. (mar/2020), a eleição de 2022 aparece como um degrau de 39%, e 2024-2026 roda na faixa de 20-25%. É essa memória longa que o GARCH converte em previsão de risco do dia seguinte, e que a seção 06 põe à prova.
Com curtose de 5,7 a 25,5, choques "impossíveis" para a normal são rotina. A t estimada engorda as caudas e evita que o modelo trate crise como erro de medição.
Nos dois, retorno negativo pesa mais na variância de amanhã que retorno positivo igual. É o efeito alavancagem, marca registrada de ações, e os dados escolheram esses modelos sozinhos, via BIC.
Hoje, a previsão 1 passo à frente (21% a 41% a.a.) roda abaixo da vol incondicional de cada papel: o mercado de meados de 2026 está mais calmo que a média da era 2018-2026, e o modelo sabe disso.
Com médias e covariâncias do treino, a otimização (SLSQP, sem venda a descoberto, teto de 35% por papel) encontra as carteiras que nenhuma combinação aleatória domina. A análise original sorteava 5.000 carteiras e escolhia a melhor; aqui o sorteio vira só a nuvem de fundo, e o otimizador acha a fronteira exata.
Nuvem: 600 carteiras aleatórias. Curva preta: fronteira eficiente exata. Reta tracejada: linha do mercado de capitais partindo do CDI (7,5% a.a.). Formas pretas: as três carteiras que vão para o teste.
Repare que a nuvem aleatória nem encosta na fronteira: com 6 ativos, o acaso raramente produz uma carteira eficiente, e a distância cresce com mais ativos. O triângulo (max Sharpe) toca a reta tracejada: é a carteira tangente, "a melhor do passado". Guarde essa frase.
Pesos por papel. A max Sharpe abraça os campeões do treino; a mínima variância abraça os estáveis; a inicial é a alocação ingênua do estudo original.
Regressão dos retornos diários contra o índice (2018-2026). A linha marca β = 1, o próprio mercado.
A mínima variância carregou justamente os betas baixos (TIMS3 0,70 e ITUB4 0,97): beta da carteira min var fica perto de 0,85, contra ~1,26 da max Sharpe. Metade da história de 2024-2026 está aqui: quem dependia menos do mercado sofreu menos quando a régua do CDI subiu.
Os pesos congelam em 31/12/2023. Daí em diante, cada carteira só coleta o que o mercado der. É o equivalente financeiro do conjunto de teste em ML, e o resultado desmonta a intuição de que otimizar o passado garante o futuro.
Riqueza acumulada (proventos reinvestidos, rebalanceamento diário, sem custos). A faixa azul-clara é o período de teste: pesos fixados antes de ela começar.
No treino, a max Sharpe (azul) esmaga: 4,66x contra 2,36x da min var. Na faixa de teste os papéis se invertem: a min var avança +77% e a max Sharpe, +24%. A inicial (quase 1/N) cresce +73% e o IBOV, +30%. A vantagem "ótima" era, em boa parte, ajuste fino ao passado.
| 2024-2026 (teste) | Max Sharpe | Mín. variância | Carteira inicial | IBOV | CDI |
|---|---|---|---|---|---|
| Retorno anualizado | 8,9% | 25,8% | 24,7% | 11,1% | 13,0% |
| Volatilidade anualizada | 20,8% | 17,7% | 18,0% | 15,2% | ~0% |
| Sharpe (vs CDI) | -0,07 | 0,70 | 0,64 | -0,03 | 0,00 |
| Máx. drawdown | -20,5% | -17,7% | -18,0% | -15,3%* | 0% |
| Pior dia | -5,1% | -3,6% | -4,0% | -4,3% | · |
| Sharpe no treino (2018-23) | 0,71 | 0,41 | 0,53 | 0,21 | 0,00 |
* O IBOV tem o menor drawdown por ser o mais diversificado, mas rendeu menos que o CDI no período. Leitura completa: só as carteiras com Sharpe positivo criaram valor acima da renda fixa em 2024-2026, e nenhuma delas é a max Sharpe.
Máximo Sharpe depende de retornos esperados estimados por médias históricas, e médias de 6 anos têm erro enorme. O otimizador amplifica exatamente esse erro: compra o que subiu por sorte. Covariâncias, base da min var, são ordens de grandeza mais estáveis.
PETR4 e RENT3 (70% da max Sharpe) vinham do melhor ciclo da década: petróleo caro e juro baixo. Em 2024-2026 o ciclo virou: juro alto puniu RENT3 e segurou PETR4, e os "sem graça" ITUB4 e TIMS3 lideraram.
É overfitting em versão financeira: desempenho de treino não é promessa de teste. A diferença é que em finanças o "dataset novo" custa dinheiro de verdade, por isso a validação temporal precisa vir antes da alocação.
Se prever retorno é quase impossível, prever risco não é. O EGARCH(1,1)-t da carteira, com parâmetros congelados em 2023, gera a cada dia do teste uma fronteira de perda: o VaR 95% de 1 dia. A pergunta de auditoria: a realidade respeitou a fronteira na frequência prometida?
Cinza: retorno diário da carteira max Sharpe em 2024-2026. Azul: fronteira de perda (-VaR 95%) prevista na véspera. Pontos vermelhos: as violações, dias em que a perda furou a previsão.
A fronteira azul respira com o mercado: aperta nos períodos calmos (perto de -2%) e abre nos nervosos (até -4,0%, em maio/2026). É isso que um limite de risco estático não faz, e é por isso que mesas de risco usam VaR condicional, não desvio-padrão histórico.
Um resumo executivo da disputa entre as carteiras, e as lições de modelagem que valem para qualquer série temporal.
| Critério | Max Sharpe | Mín. variância | Carteira inicial (1/N) |
|---|---|---|---|
| O que usa do passado | médias + covariâncias | só covariâncias | nada |
| Sensível a erro de estimação | muito (amplifica) | pouco | zero |
| Sharpe treino → teste | 0,71 → -0,07 | 0,41 → 0,70 | 0,53 → 0,64 |
| Concentração | 2 papéis = 70% | 2 papéis = 70%, nos defensivos | máx. 20% |
| Quando faz sentido | com views robustas de retorno (ex.: Black-Litterman, shrinkage) | quase sempre: é o "piso de risco" da fronteira | como baseline obrigatório |
O mesmo dataset que aprovou o VaR-GARCH no Kupiec reprovou a carteira otimizada por médias históricas. Modele o que tem estrutura (a variância) e seja humilde com o que não tem (a média).
Dentro da amostra, a carteira de máximo Sharpe vence por construção. A conclusão só virou conhecimento quando 2024-2026 ficou trancado fora da otimização, a mesma disciplina de treino/teste do machine learning.
Maximizar uma função de médias ruidosas seleciona exatamente o ruído mais favorável (o "vencedor por sorte"). Minimizar variância usa momentos mais estáveis, e por isso a min var e a 1/N são tão difíceis de bater fora da amostra.
A Student-t venceu a normal nas 6 ações e nos dois modelos de carteira. Com curtose de até 25, dimensionar risco pela normal subestima exatamente os dias que quebram gestoras.
O efeito alavancagem (EGARCH/GJR em 4 de 6 papéis) é mensurável e melhora a previsão de vol. Um GARCH simétrico ignora a assimetria emocional do mercado.
Dois tickers mudaram de nome no meio do caminho (ELET3 → AXIA3, EMBR3 → EMBJ3), o CDI virou insumo diário e o pregão parcial de hoje precisa ser descartado. Pipeline de finanças se escreve para o dado que muda embaixo de você.
python src/analysis.py refaz tudo (dados, grid GARCH, otimização, backtest, VaR) e grava os artefatos; python src/build_charts.py --splice regenera os gráficos desta página. O notebook original de 2024 (avaliação do PADS/Insper) segue no repositório como ponto de partida histórico.