Otimização de Portfólio — MPT, Fronteira Eficiente e Modelos de Fator
Teoria Moderna de Portfólios (Markowitz), fronteira eficiente, CAPM, modelos de fator (Fama-French), Black-Litterman e otimização com restrições práticas.
Otimização de portfólio é a ciência de alocar capital entre ativos para maximizar retorno esperado dado um nível de risco — ou minimizar risco dado um retorno alvo. Harry Markowitz formalizou o problema em 1952 (Nobel em 1990), criando a base matemática que fundamenta a gestão de ativos moderna.
Papers de referência: arXiv q-fin.PM — Portfolio Management | q-fin.RM — Risk Management
Teoria Moderna de Portfólios (MPT)
O insight de Markowitz
Antes de Markowitz, investidores selecionavam ativos individualmente pelo binômio retorno/risco. Markowitz demonstrou que o risco de um portfólio não é a média dos riscos individuais — ele depende da correlação entre ativos.
Resultado fundamental: é possível reduzir o risco do portfólio combinando ativos que não se movem perfeitamente juntos, sem sacrificar retorno esperado. Isso é diversificação.
Retorno e risco do portfólio
Para um portfólio com pesos w = (w₁, w₂, ..., wₙ):
Retorno esperado:
E[Rₚ] = Σ wᵢ × E[Rᵢ] = wᵀμ
Variância (risco²):
σ²ₚ = Σᵢ Σⱼ wᵢwⱼ Cov(Rᵢ, Rⱼ) = wᵀΣw
Onde:
- μ: vetor de retornos esperados
- Σ: matriz de covariância dos retornosO efeito da correlação:
Para 2 ativos com pesos iguais (50/50):
σ²ₚ = 0.25σ₁² + 0.25σ₂² + 2×0.25×Cov(R₁,R₂)
Se correlação = 1: σₚ = (σ₁+σ₂)/2 — sem diversificação
Se correlação = 0: σₚ < (σ₁+σ₂)/2 — diversificação parcial
Se correlação = -1: σₚ pode = 0 — diversificação perfeitaFronteira Eficiente
O problema de otimização:
Minimizar: wᵀΣw (minimizar risco)
Sujeito a: wᵀμ = μ_alvo (atingir retorno alvo)
Σwᵢ = 1 (pesos somam 100%)
wᵢ ≥ 0 (sem short selling, se desejado)A solução para todos os possíveis retornos-alvo gera a fronteira eficiente: o conjunto de portfólios que oferecem o maior retorno para cada nível de risco.
import numpy as np
from scipy.optimize import minimize
def portfolio_variance(weights, cov_matrix):
return weights @ cov_matrix @ weights
def portfolio_return(weights, returns):
return weights @ returns
def efficient_frontier(mu, Sigma, num_points=100):
n = len(mu)
results = []
for target_return in np.linspace(mu.min(), mu.max(), num_points):
constraints = [
{"type": "eq", "fun": lambda w: np.sum(w) - 1},
{"type": "eq", "fun": lambda w, r=target_return: portfolio_return(w, mu) - r}
]
bounds = [(0, 1)] * n
result = minimize(
portfolio_variance, x0=np.ones(n)/n,
args=(Sigma,), method="SLSQP",
constraints=constraints, bounds=bounds
)
if result.success:
vol = np.sqrt(result.fun)
results.append({"return": target_return, "vol": vol, "weights": result.x})
return resultsPortfólio de Mínima Variância (MVP)
O ponto mais à esquerda da fronteira eficiente — menor risco possível independente do retorno.
Portfólio Tangente (Market Portfolio)
O portfólio na fronteira eficiente com maior Sharpe Ratio (retorno por unidade de risco).
CAPM — Capital Asset Pricing Model
William Sharpe (Nobel 1990) derivou o CAPM a partir da MPT com a premissa de que todos os investidores mantêm a fronteira eficiente:
E[Rᵢ] = Rf + βᵢ × (E[Rm] - Rf)
Onde:
- Rf: taxa livre de risco
- βᵢ = Cov(Rᵢ, Rm) / Var(Rm): sensibilidade ao mercado
- E[Rm] - Rf: prêmio de risco do mercadoInterpretação do beta:
- β = 1: ativo se move com o mercado
- β > 1: ativo amplifica movimentos do mercado (mais arriscado)
- β < 1: ativo atenua movimentos do mercado (mais defensivo)
- β < 0: ativo se move contra o mercado (hedge natural)
Alpha (α) = retorno acima do esperado pelo CAPM:
α = Rᵢ - [Rf + βᵢ(Rm - Rf)]Modelos de Fator Multi-fator
O CAPM usa apenas um fator (mercado). Pesquisa empírica encontrou outros fatores que explicam retornos.
Fama-French Three-Factor (1992)
E[Rᵢ] = Rf + βᵢ×MKT + sᵢ×SMB + hᵢ×HML
- MKT: prêmio de mercado (market risk)
- SMB (Small Minus Big): ações pequenas superam grandes
- HML (High Minus Low): ações de valor (alto P/B) superam crescimentoCarhart Four-Factor (1997)
Adiciona o fator Momentum (WML — Winners Minus Losers): ações que subiram nos últimos 12 meses tendem a continuar subindo.
Fama-French Five-Factor (2015)
Adiciona RMW (Rentabilidade Robusta) e CMA (Investimento Conservador).
Factor Investing (Smart Beta)
ETFs que capturam fatores sistematicamente:
| Fator | Prêmio histórico | ETF exemplo |
|---|---|---|
| Value | +3-4% a.a. | IVE, VTV |
| Small Cap | +2-3% a.a. | IWM, VBR |
| Momentum | +4-5% a.a. | MTUM, IWMO |
| Quality | +2-3% a.a. | QUAL, IUSQ |
| Low Volatility | +1-2% a.a. | USMV, ACWV |
Black-Litterman Model
Problema prático da MPT: pequenas mudanças nos retornos esperados geram alocações extremas e instáveis.
Black-Litterman (Goldman Sachs, 1990) combina:
- Prior market equilibrium: retornos implícitos derivados da capitalização de mercado
- Views do gestor: visões sobre retornos esperados de ativos específicos
- Resultado: retornos esperados ajustados que geram alocações estáveis
# Framework simplificado de Black-Litterman
import numpy as np
def black_litterman(Sigma, w_eq, tau, P, Q, Omega):
"""
Sigma: matriz de covariância
w_eq: pesos do portfólio de equilíbrio
tau: escalar de incerteza (típico: 0.05)
P: matriz de views (k × n)
Q: vetor de retornos das views (k × 1)
Omega: covariância da incerteza nas views
"""
# Retorno de equilíbrio implícito
lambda_risk = 2.5 # aversão ao risco do mercado
pi = lambda_risk * Sigma @ w_eq
# Posterior BL
M = np.linalg.inv(np.linalg.inv(tau*Sigma) + P.T @ np.linalg.inv(Omega) @ P)
mu_bl = M @ (np.linalg.inv(tau*Sigma) @ pi + P.T @ np.linalg.inv(Omega) @ Q)
return mu_blMétricas de performance
| Métrica | Fórmula | O que avalia |
|---|---|---|
| Sharpe Ratio | (Rₚ - Rf) / σₚ | Retorno por unidade de risco total |
| Sortino Ratio | (Rₚ - Rf) / σ_downside | Penaliza apenas volatilidade negativa |
| Calmar Ratio | CAGR / Max Drawdown | Retorno por unidade de drawdown |
| Information Ratio | α / Tracking Error | Alpha por unidade de risco ativo |
| Maximum Drawdown | Maior queda pico a vale | Risco de perdas extremas |
Risco e gerenciamento
Value at Risk (VaR)
"Com 95% de confiança, a perda máxima em 1 dia não excede X":
import numpy as np
def var_historico(retornos, confianca=0.95, horizonte=1):
"""VaR por simulação histórica"""
quantil = np.percentile(retornos, (1 - confianca) * 100)
return -quantil * np.sqrt(horizonte)
retornos_diarios = np.log(precos).diff().dropna()
var_95 = var_historico(retornos_diarios, 0.95)
print(f"VaR (95%, 1 dia): {var_95:.2%}")CVaR / Expected Shortfall
Média das perdas além do VaR — métrica coerente de risco, preferida por reguladores (Basel III):
def cvar(retornos, confianca=0.95):
var = np.percentile(retornos, (1 - confianca) * 100)
tail_losses = retornos[retornos <= var]
return -tail_losses.mean()Risk Parity
Abordagem alternativa: alocar de forma que cada ativo contribua igualmente para o risco do portfólio, não para o capital.
from scipy.optimize import minimize
def risk_contribution(weights, cov_matrix):
port_var = weights @ cov_matrix @ weights
marginal_risk = cov_matrix @ weights
risk_contrib = weights * marginal_risk / port_var
return risk_contrib
def risk_parity_objective(weights, cov_matrix):
rc = risk_contribution(weights, cov_matrix)
target = np.ones(len(weights)) / len(weights) # contribuição igual
return np.sum((rc - target)**2)Ray Dalio (Bridgewater) popularizou risk parity com o "All Weather Portfolio".
Conexões com outras seções
- Precificação de Opções — opções como instrumento de hedge de portfólio
- Arbitragem Estatística — estratégias market-neutral que complementam portfólios
- Séries Temporais com ML — previsão de retornos e covariâncias para otimização dinâmica
- Econometria — estimação de retornos esperados e matriz de covariância
- IA para Carteiras — aplicação de ML na gestão de portfólios
Aviso Legal: Conteúdo educativo. Modelos de otimização de portfólio dependem de estimativas de retornos esperados e covariâncias que são incertas. Resultados históricos não garantem performance futura. Não constitui recomendação de investimento.
Precificação de Opções — Black-Scholes, Gregas e Volatilidade Estocástica
Fundamentos de precificação de opções: modelo Black-Scholes, gregas (delta, gamma, vega, theta), volatilidade implícita, smile de volatilidade e modelos estocásticos como Heston.
Arbitragem Estatística — Pairs Trading, Cointegração e Mean Reversion
Fundamentos de arbitragem estatística: pairs trading, cointegração, modelos de spread, estratégias de mean reversion e implementação em Python.