σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyRoadmapsRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
RoadmapsRoteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
σμimplied vol · KKmax(S−K,0)udβρᵢⱼfat tailsPnL · drawdownyield · TdSₜ = μSₜ dt + σSₜ dWₜC = S·N(d₁) − K·e⁻ʳᵀ·N(d₂)σₚ² = wᵀΣwd₁ = [ln(S/K) + (r + σ²⁄2)T] ⁄ σ√T∂V/∂t + ½σ²S²·∂²V/∂S² + rS·∂V/∂S − rV = 0Sharpe = (Rₚ − R_f) ⁄ σₚVaR₉₉ = μ − 2.33σρ = Cov(X,Y) ⁄ σₓσᵧE[Rₚ] = Σ wᵢ·E[Rᵢ]φ(x) = e^(−x²/2) ⁄ √2πE[Rᵢ] = R_f + βᵢ(E[Rₘ] − R_f)dXₜ = θ(μ − Xₜ)dt + σ dWₜσ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁C − P = S − K·e⁻ʳᵀΔ = ∂V/∂S Γ = ∂²V/∂S²p = (e^(rΔt) − d) ⁄ (u − d)rₜ = ln(Pₜ ⁄ Pₜ₋₁)E[Xₜ₊₁ | ℱₜ] = Xₜf* = (bp − q) ⁄ bz = (x − μ) ⁄ σP(N=k) = λᵏe^(−λ) ⁄ k!Θ = −∂V/∂Tν = S·φ(d₁)·√Tmin wᵀΣw s.t. wᵀμ = μ*∫Σ∂∞λ
uantCraft AcademyRoadmapsRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
RoadmapsRoteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Roteiro de Optimization›Módulo 5 · Otimização na prática›Tópico 5.2·~1 h 40 minAvançado

Projeto final: otimização de carteira com restrições e limites de giro e custo

Posição no roteiroMódulo 5 de 5 · Tópico 2 de 2
5.2 Projeto final: otimização de carteira com restrições e limites de giro e custo
—Nota do lab— / 100XP total—Sequência—

Das peças a um otimizador que funciona

Uma carteira de variância mínima no papel não tem regras. Um mandato real é só comprado, totalmente investido e paga para negociar, e a única forma de ver o que essas regras fazem é construir o otimizador você mesmo e testá-lo em dias que ele não viu. Este projeto final usa três ideias da habilidade: a descida do gradiente para o laço, uma projeção para a regra de orçamento só comprado e um limite L1 sobre as negociações. Basta o NumPy e nenhum solver de biblioteca é permitido.

wₖ₊₁=Π(wₖ-η·2Σwₖ), η=1/(2λₘₐₓ(Σ))

A descida do gradiente projetada dá um passo de gradiente comum na variância wᵀΣw, cujo gradiente é 2Σw, e depois leva o resultado à carteira só comprada e totalmente investida mais próxima com a projeção Π. O passo 1/L, com L=2λₘₐₓ(Σ) o maior autovalor da hessiana, é sempre estável. A projeção sobre {w≥0, Σw=1} tem resposta exata: ordenar o vetor em ordem decrescente, tomar as somas acumuladas menos um, achar a última posição ρ em que o valor ordenado ainda supera sua soma acumulada dividida por k, fixar θ como essa soma acumulada dividida por ρ+1 e devolver max(v-θ,0). Todos os pesos são deslocados da mesma quantidade e os que ficariam negativos são cortados em zero.

w=w₀+α(wₜ-w₀), α=min(1, τ/(‖wₜ-w₀‖₁)), c ‖w-w₀‖₁

O giro é a norma L1 da negociação, ‖w-w₀‖₁. Para mantê-lo abaixo de um limite τ sem deixar de ser viável, anda-se apenas a fração α do caminho entre a carteira atual w₀ e o alvo wₜ do otimizador. Um ponto do segmento entre duas carteiras só compradas e totalmente investidas também é só comprado e totalmente investido, e a norma L1 cresce linearmente ao longo do segmento, então a negociação é exatamente min(folga,τ). Cada rebalanceamento custa então c vezes seu giro, que o backtest subtrai do primeiro dia do bloco de manutenção. Os pesos de um bloco só podem usar os dias anteriores a ele, e o resultado a relatar é a volatilidade e o retorno dos dias fora da amostra, líquidos e concatenados.

O que dizem os dados reaisPara doze grandes ações americanas desde 2010, com janela de 126 dias reestimada a cada 42 dias, custo de 10 pontos-base e 4058 dias fora da amostra, a carteira só comprada de variância mínima tem volatilidade de cerca de 13,4 % ao ano, retorno de cerca de 13,8 % e giro de cerca de 0,36 por rebalanceamento. Limitar o giro a 0,2 dá volatilidade de cerca de 13,6 %, retorno de cerca de 14,0 % e giro de 0,20: um pouco mais de risco, mas menos negociações e nenhuma perda de retorno líquido. Os pesos iguais têm volatilidade de cerca de 18,4 %, retorno de cerca de 21,4 % e nenhuma negociação. Eles rendem mais apenas porque essas doze sobreviventes, sobretudo Apple, Amazon e Nvidia, foram muito bem.
  • Descida do gradiente projetada: passo de gradiente 2Σw com passo 1/L e depois projeção no simplex.
  • Limite de giro: avançar a fração α=min(1,τ/folga) rumo ao alvo; a carteira continua viável.
  • Backtest honesto: estimar nos últimos window dias, manter por step dias, subtrair os custos e relatar os números fora da amostra concatenados.
Duas simplificações para lembrarO backtest ignora a deriva dos pesos dentro de um bloco (os pesos ficam fixos) e cobra um custo fixo por unidade de giro, enquanto o impacto real cresce com o tamanho negociado e a falta de liquidez. Ambos deixam os números um pouco generosos demais. Encare o exercício como um modelo limpo do equilíbrio entre risco, giro e custo, não como previsão de desempenho real.

Lab: o que é avaliado

  • Projeção no simplex20 pts
  • Descida do gradiente projetada25 pts
  • Um limite de giro15 pts
  • Um backtest móvel com custos25 pts
  • Comparar as políticas15 pts
Explorador · lab-op-11
▾ lab-op-11
▾ data
…
bash · no navegador
learner@quantcraft:~/lab-op-11$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

Tudo em lab-op-11 volta aos arquivos iniciais e o terminal é limpo. Sua solução atual será perdida — isso não pode ser desfeito.

Será redefinido
  • main.py → código inicial
  • Histórico do terminal e saída dos testes
  • Alterações não enviadas
Será mantido
  • Melhor nota do lab
  • Seu XP e sua sequência
  • Progresso da aula e anotações

Entre para executar o seu código.

Todas as aulas são gratuitas para ler. Crie uma conta ou entre para executar código, rodar os testes e enviar este lab.

  • IDE no navegador com terminal bash — nada para instalar
  • Correção instantânea, XP e o seu lugar no roteiro
Criar uma contaEntrar
OU
Continuar com o GitHub