Kaique Mitsuo Silva Yamamoto
Mercado financeiroFinanças Quantitativas

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 retornos

O 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 perfeita

Fronteira 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 results

Portfó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 mercado

Interpretaçã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 crescimento

Carhart 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:

FatorPrêmio históricoETF 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:

  1. Prior market equilibrium: retornos implícitos derivados da capitalização de mercado
  2. Views do gestor: visões sobre retornos esperados de ativos específicos
  3. 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_bl

Métricas de performance

MétricaFórmulaO que avalia
Sharpe Ratio(Rₚ - Rf) / σₚRetorno por unidade de risco total
Sortino Ratio(Rₚ - Rf) / σ_downsidePenaliza apenas volatilidade negativa
Calmar RatioCAGR / Max DrawdownRetorno por unidade de drawdown
Information Ratioα / Tracking ErrorAlpha por unidade de risco ativo
Maximum DrawdownMaior queda pico a valeRisco 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


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.

On this page