σμ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 SciPy›Módulo 1 · Ajustar e encontrar›Tópico 1.4·~50 minIntermediário

Minimização e busca de raízes

Posição no roteiroMódulo 1 de 3 · Tópico 4 de 6
1.4 Minimização e busca de raízes
—Nota do lab— / 100XP total—Sequência—

Duas tarefas: achar o ponto mais baixo, achar onde uma curva cruza o zero

O scipy.optimize resolve dois tipos de problemas. O primeiro é minimizar uma função f(x)f(x)f(x), isto é, achar a entrada com a menor saída. Chama-se minimize(f, x0), em que x0 é seu palpite inicial. O método BFGS segue a inclinação de fff para baixo. Nelder-Mead não precisa de inclinação e só compara valores. SLSQP também aceita limites e restrições, como pesos que devem somar 1. A resposta é só um mínimo local, o fundo do vale onde você começou, e outro x0 pode dar outra resposta. Confira sempre res.success.

O segundo problema é achar raízes: resolver g(x)=0g(x)=0g(x)=0. brentq(g, a, b) precisa de um intervalo com sinais opostos de ggg nas pontas, e então com certeza acha uma raiz dividindo o intervalo ao meio repetidamente. Após nnn divisões o intervalo tem largura (b−a)/2n(b-a)/2^n(b−a)/2n. newton(g, x0, fprime) usa a inclinação de ggg e é bem mais rápido, mas precisa de um bom início e pode saltar longe quando a inclinação é quase plana. Em finanças, o rendimento até o vencimento de um título é uma raiz: é a taxa yyy que iguala a fórmula de preço do título ao seu preço de mercado. Um passo de Newton é ynovo=y−g(y)/g′(y)y_{\text{novo}}=y-g(y)/g'(y)ynovo​=y−g(y)/g′(y).

ynew=y−g(y)g′(y),g(y)=51+y+105(1+y)2−98,width after n halvings=b−a2ny_{\text{new}}=y-\frac{g(y)}{g'(y)},\qquad g(y)=\frac{5}{1+y}+\frac{105}{(1+y)^{2}}-98,\qquad \text{width after }n\text{ halvings}=\frac{b-a}{2^{n}}ynew​=y−g′(y)g(y)​,g(y)=1+y5​+(1+y)2105​−98,width after n halvings=2nb−a​(1)
O rendimento de um título de dois anosUm título paga 555 após um ano e 105105105 após dois anos, e custa 989898. Comece em y=6%y=6\%y=6%. A fórmula de preço dá 98,1798{,}1798,17, então g=0,17g=0{,}17g=0,17. A inclinação é g′=−5/1,062−210/1,063=−180,8g'=-5/1{,}06^{2}-210/1{,}06^{3}=-180{,}8g′=−5/1,062−210/1,063=−180,8. Um passo de Newton dá y=0,06−0,17/(−180,8)=6,092%y=0{,}06-0{,}17/(-180{,}8)=6{,}092\%y=0,06−0,17/(−180,8)=6,092%, e brentq no intervalo [0;0,5][0;0{,}5][0;0,5] confirma a raiz 6,0923%6{,}0923\%6,0923%. Para a bisseção em [0;1][0;1][0;1] ficar a menos de 0,0010{,}0010,001 é preciso 2n≥10002^{n}\ge10002n≥1000, logo n=10n=10n=10 divisões. Para um mínimo, dois ativos com volatilidades 202020 e 101010 e correlação 0,20{,}20,2 têm covariância 404040, então o peso de variância mínima do primeiro é (100−40)/(400+100−80)=0,143(100-40)/(400+100-80)=0{,}143(100−40)/(400+100−80)=0,143. Em dados reais, SPY e TLT em 5 4045\,4045404 dias desde fevereiro de 2005 têm volatilidades de 19,0%19{,}0\%19,0% e 14,6%14{,}6\%14,6% ao ano e correlação −0,30-0{,}30−0,30. O peso de variância mínima no SPY é de 40%40\%40%, com volatilidade de 9,7%9{,}7\%9,7%. Para uma função com dois vales, como x4−3x2+xx^{4}-3x^{2}+xx4−3x2+x, minimize a partir de x0=2x_0=2x0​=2 para em 1,131{,}131,13 e a partir de x0=−2x_0=-2x0​=−2 em −1,30-1{,}30−1,30, que é o mais baixo.
  • Minimizar ou resolver: minimize acha um ponto baixo, brentq e newton acham onde uma função vale zero.
  • Um intervalo é uma garantia: brentq sempre converge se os sinais diferem, enquanto newton é mais rápido mas exige um bom início.
  • Um mínimo pode ser local: teste vários pontos de partida e leia res.success antes de confiar em res.x.

Lab: o que é avaliado

  • Um passo de Newton15 pts
  • Divisões da bisseção10 pts
  • Um peso de variância mínima15 pts
  • A ferramenta certa para cada trabalho15 pts
  • Um fluxo de volatilidade implícita10 pts
  • Um mínimo possivelmente local10 pts
  • Por que um intervalo e por que Newton pode falhar25 pts
0/ 7 respondidas
Tarefas
1Resposta numérica15 ptsSem resposta

Para o título acima, em y=0,06y=0{,}06y=0,06 tem-se g=0,1666g=0{,}1666g=0,1666 e g′=−180,77g'=-180{,}77g′=−180,77. Qual é o novo palpite y−g/g′y-g/g'y−g/g′, em percentual? Dê três casas decimais.

y=y =y=aceito: ± 0.003
2Resposta numérica10 ptsSem resposta

Você isola uma raiz em [0;1][0;1][0;1]. Quantas divisões nnn são necessárias para o intervalo ter no máximo 0,0010{,}0010,001 de largura, isto é, 2n≥10002^{n}\ge10002n≥1000?

n=n =n=aceito: ± 0.01
3Resposta numérica15 ptsSem resposta

Dois ativos têm volatilidades 202020 e 101010 e covariância 404040. O peso do primeiro que minimiza a variância é w=(σb2−c)/(σa2+σb2−2c)w=(\sigma_b^{2}-c)/(\sigma_a^{2}+\sigma_b^{2}-2c)w=(σb2​−c)/(σa2​+σb2​−2c). Quanto vale www? Dê três casas decimais.

w=w =w=aceito: ± 0.002
4Associar15 ptsSem resposta

Associe cada ferramenta à situação em que ela se encaixa melhor.

Escolha o par de cada item da esquerda.

brentq
newton
minimize (SLSQP)
minimize (Nelder-Mead)
5Ordenar os passos10 ptsSem resposta

Coloque em ordem os passos para obter uma volatilidade implícita a partir do preço de uma opção.

Arraste para reordenar, ou foque um item, Espaço para levantá-lo, setas para movê-lo e Espaço para soltá-lo.

  1. 1Reprecificar a opção com a resposta para conferir
  2. 2Chamar brentq no intervalo
  3. 3Escolher uma volatilidade baixa e uma alta cujos erros tenham sinais opostos
  4. 4Escrever o erro de preço como função da volatilidade
6Escolha10 ptsSem resposta

minimize iniciado em x0=2x_0=2x0​=2 numa curva com dois vales devolveu x=1,13x=1{,}13x=1,13 com success=True. Você suspeita de um vale mais fundo. Qual é o melhor próximo passo?

7Explicar com palavras25 ptsSem resposta

Em uma ou duas frases, explique por que brentq pede dois pontos de sinais opostos e por que o método de Newton pode falhar embora seja mais rápido.

Modo matemáticaEntrada por teclado ou LaTeXTarefa 1 de 7 · Ctrl ⏎ para verificar

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