σμ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ᵀμ = μ*∫Σ∂∞λ
σμ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 AcademyRoteiros
Ctrl K
AO
+1,2 mil alunos
EntrarParticipar ↗
Roteiros
AO
+1,2 mil alunos
Entrar
  • English
  • Français
  • Español
  • العربية
  • Português
  • Deutsch
  • 日本語
  • 中文
Roteiro de Python›Módulo 4 · Precificação de renda fixa e opções›Tópico 4.6·~40 minIntermediário

Payoffs de opções

Posição no roteiroMódulo 4 de 11 · Tópico 6 de 16
4.6 Payoffs de opções
—Nota do lab— / 100XP total—Sequência—

Um direito, não uma obrigação

Uma opção dá ao titular o direito, mas não a obrigação, de negociar um ativo a um preço fixo (o preço de exercício, ou strike) numa data ou antes dela (o vencimento). Uma call é o direito de comprar, uma put o direito de vender. No vencimento o titular só usa o direito quando compensa. Uma call com strike 100 e a ação a 110 permite comprar por 100 o que vale 110: um pagamento de 10. Com a ação a 90 simplesmente nada se faz e o pagamento é 0, nunca negativo. Essa unilateralidade é o que dá valor às opções.

call payoff = max(S - K, 0) put payoff = max(K - S, 0)
import numpy as np

spot = np.array([80, 90, 100, 110, 120.0])      # possible prices of the stock at expiry
strike = 100

call = np.maximum(spot - strike, 0)              # np.maximum works element by element: no loop, no if
put = np.maximum(strike - spot, 0)
print(call.tolist())     # [0.0, 0.0, 0.0, 10.0, 20.0]
print(put.tolist())      # [20.0, 10.0, 0.0, 0.0, 0.0]

O lucro é o pagamento menos o prêmio

A opção tem um preço hoje, o prêmio, então o que você ganha é o pagamento menos o que pagou. Uma call comprada por 6 perde 6 sempre que a ação termina abaixo do strike e empata em strike + prêmio = 106. Combinando opções constroem-se outros formatos. Um straddle comprado (call mais put no mesmo strike) lucra com um grande movimento para qualquer lado e perde os dois prêmios se a ação ficar parada. Uma trava de alta com calls (comprada em call a 100, vendida em call a 110) custa menos mas limita o ganho à diferença dos strikes: você abre mão da alta acima de 110 para reduzir o custo.

call_pnl = call - 6                                        # bought for a premium of 6
print(call_pnl.tolist())                                   # [-6.0, -6.0, -6.0, 4.0, 14.0]   break-even at 106

straddle = call + put - (4.0 + 3.5)                        # a call (4.0) and a put (3.5) at the same strike
print(straddle.tolist())                                   # [12.5, 2.5, -7.5, 2.5, 12.5]   wins on a move up or down

spread = np.maximum(spot - 100, 0) - np.maximum(spot - 110, 0) - (6.0 - 2.0)   # long the 100 call, short the 110 call
print(spread.tolist())                                     # [-4.0, -4.0, -4.0, 6.0, 6.0]   loss and gain are both capped
short_call = 6 - call                 # the seller of the call keeps the premium and pays the payoff
print(short_call.tolist())             # [6.0, 6.0, 6.0, -4.0, -14.0]   the exact mirror of the buyer's loss and gain
print(float(np.maximum(112 - 100, 0)))      # 12.0   a single price works as well as an array
Pagamentos não são preçosUm diagrama de pagamentos mostra apenas o valor no vencimento. O preço hoje, antes do vencimento, é maior que o pagamento porque a ação ainda pode se mover a seu favor: esse extra é o valor no tempo, e os próximos tópicos o precificam. O pagamento também é escrito do ponto de vista do titular; o vendedor da opção tem exatamente o lucro e a perda opostos.
  • Pagamento da call max(S - K, 0), da put max(K - S, 0): np.maximum(..., 0) faz isso num array inteiro.
  • Lucro = pagamento - prêmio; um straddle (call + put) aposta em um grande movimento, uma trava de alta limita custo e ganho.
  • Os pagamentos são valores no vencimento; o preço de hoje é maior pelo valor no tempo, que os próximos tópicos precificam.

A seguir: a paridade put-call, a ligação exata entre o preço de uma call e o de uma put.

Lab: o que é avaliado

  • Pagar o direito de comprar com call_payoff25 pts
  • Pagar o direito de vender com put_payoff25 pts
  • Apostar em um grande movimento para qualquer lado com long_straddle_pnl25 pts
  • Limitar o custo e o ganho com bull_call_spread_pnl25 pts
Explorador · lab-71-1
▾ lab-71-1
…
bash · no navegador
learner@quantcraft:~/lab-71-1$
Python ainda não carregadoPythonLn 1, Col 1Spaces: 4UTF-8

Redefinir este tópico?

Tudo em lab-71-1 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