Kaique Mitsuo Silva Yamamoto
Mercado financeiroFinanças Quantitativas

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.

Uma opção é um contrato que dá ao comprador o direito (mas não a obrigação) de comprar (call) ou vender (put) um ativo subjacente a um preço pré-determinado (strike) em ou até uma data específica (vencimento). A questão central: quanto vale esse direito?

A resposta matemática a essa pergunta transformou os mercados financeiros.

Papers de referência: arXiv q-fin.PR — Pricing of Securities | q-fin.MF — Mathematical Finance


O modelo Black-Scholes

Publicado em 1973 por Fischer Black e Myron Scholes (com contribuição fundamental de Robert Merton), o modelo Black-Scholes forneceu a primeira fórmula fechada para precificação de opções europeias.

Premissas

PremissaRealidade
Volatilidade constanteVolatilidade muda ao longo do tempo
Não há dividendosMuitos ativos pagam dividendos
Mercado contínuo e sem fricçõesHá bid-ask spread, custos de transação
Taxa livre de risco constanteTaxa varia
Preço segue Browniano GeométricoCaudas pesadas observadas empiricamente

Apesar das premissas irrealistas, Black-Scholes é o ponto de partida universal — todos os modelos mais sofisticados são extensões.

A fórmula

Preço de uma call europeia:

C = S₀ × N(d₁) - K × e^(-rT) × N(d₂)

Onde:
d₁ = [ln(S₀/K) + (r + σ²/2)T] / (σ√T)
d₂ = d₁ - σ√T

- S₀: preço atual do ativo
- K: strike price
- r: taxa livre de risco
- T: tempo até vencimento (em anos)
- σ: volatilidade do ativo
- N(x): CDF da normal padrão

Preço de uma put (pela paridade put-call):

P = K × e^(-rT) × N(-d₂) - S₀ × N(-d₁)
from scipy.stats import norm
import numpy as np

def black_scholes_call(S, K, r, T, sigma):
    d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma*np.sqrt(T)
    return S*norm.cdf(d1) - K*np.exp(-r*T)*norm.cdf(d2)

def black_scholes_put(S, K, r, T, sigma):
    d1 = (np.log(S/K) + (r + sigma**2/2)*T) / (sigma*np.sqrt(T))
    d2 = d1 - sigma*np.sqrt(T)
    return K*np.exp(-r*T)*norm.cdf(-d2) - S*norm.cdf(-d1)

# Exemplo: call com S=100, K=105, r=5%, T=1 ano, σ=20%
preco = black_scholes_call(100, 105, 0.05, 1.0, 0.20)
print(f"Preço da call: R$ {preco:.2f}")  # → R$ 8.02

As Gregas — sensibilidades da opção

As gregas medem como o preço da opção muda com cada variável. São ferramentas essenciais de gestão de risco para traders de opções.

Delta (Δ) — sensibilidade ao preço do ativo

Delta_call = N(d₁)      ∈ [0, 1]
Delta_put  = N(d₁) - 1  ∈ [-1, 0]

Interpretação: delta de 0.6 significa que a opção sobe R$0.60 para cada R$1 de alta no ativo subjacente.

Delta hedging: um market maker que vendeu uma call com delta 0.6 compra 60 ações para ter posição neutra ao delta. Essa posição precisa ser rebalanceada dinamicamente.

Gamma (Γ) — curvatura

Taxa de variação do delta em relação ao preço do ativo:

Gamma = N'(d₁) / (S × σ × √T)

Gamma positivo: o delta aumenta quando o ativo sobe (bom para o comprador da opção). Long gamma: compradores de opções têm gamma positivo; vendedores têm gamma negativo.

Risco de gamma: posições com alto gamma são perigosas para vendedores — pequenos movimentos do ativo geram grandes perdas.

Vega (ν) — sensibilidade à volatilidade

Vega = S × N'(d₁) × √T

Interpretação: vega de 0.20 significa que a opção sobe R$0.20 para cada 1% de aumento na volatilidade implícita.

Long vega: quem compra opções se beneficia de aumento de volatilidade.

Theta (Θ) — decaimento temporal

Quanto o valor da opção perde por dia que passa:

Theta = -[S × N'(d₁) × σ] / (2√T) - r × K × e^(-rT) × N(d₂)

Theta negativo: uma opção comprada perde valor com o passar do tempo (time decay). Uma opção com 30 dias para vencer perde valor mais rapidamente que uma com 180 dias.

Rho (ρ) — sensibilidade à taxa de juros

Menor das gregas na maioria dos contextos, mas relevante em opções de longa duração.

GregaSímboloMedeSinal para calls
DeltaΔ∂V/∂SPositivo
GammaΓ∂²V/∂S²Positivo
Vegaν∂V/∂σPositivo
ThetaΘ∂V/∂tNegativo
Rhoρ∂V/∂rPositivo

Volatilidade Implícita

A volatilidade implícita (IV) é a volatilidade que, inserida no modelo Black-Scholes, reproduz o preço de mercado da opção.

Inversão numérica:

from scipy.optimize import brentq

def implied_vol(market_price, S, K, r, T, option_type='call'):
    def objetivo(sigma):
        if option_type == 'call':
            bs_price = black_scholes_call(S, K, r, T, sigma)
        else:
            bs_price = black_scholes_put(S, K, r, T, sigma)
        return bs_price - market_price

    return brentq(objetivo, 0.001, 5.0)  # busca sigma entre 0.1% e 500%

O Smile (e Skew) de Volatilidade

Se Black-Scholes fosse perfeito, a IV seria constante para todos os strikes. Na realidade, observamos:

  • Smile: IV mais alta para opções muito dentro ou fora do dinheiro (comum em ações)
  • Skew: IV aumenta para strikes baixos (puts de proteção têm prêmio)
  • Smirk/sneer: assimetria com IV alta para downside

O skew de volatilidade reflete o medo do mercado: investidores pagam prêmio por proteção contra quedas bruscas (tail risk).


Modelos de Volatilidade Estocástica

Para capturar o smile, modelos avançados tratam a volatilidade como processo estocástico.

Modelo de Heston (1993)

O modelo mais utilizado na prática:

dS = μS dt + √v × S × dW₁
dv = κ(θ - v) dt + ξ√v × dW₂

Corr(dW₁, dW₂) = ρ

Onde:
- v: variância instantânea
- κ: velocidade de reversão à média
- θ: variância de longo prazo
- ξ: volatilidade da volatilidade (vol of vol)
- ρ: correlação (tipicamente negativa para ações)

Heston tem solução semi-analítica via transformada de Fourier — pode ser calibrado eficientemente aos preços de mercado.

Calibração: encontrar (κ, θ, ξ, ρ, v₀) que minimiza a distância entre preços do modelo e preços de mercado:

from scipy.optimize import minimize

def calibrar_heston(precos_mercado, strikes, maturidades, S, r):
    def objetivo(params):
        kappa, theta, xi, rho, v0 = params
        precos_modelo = heston_call_prices(S, strikes, maturidades, r, kappa, theta, xi, rho, v0)
        return np.sum((precos_modelo - precos_mercado)**2)

    resultado = minimize(objetivo, x0=[2.0, 0.04, 0.3, -0.7, 0.04],
                        bounds=[(0.1,10), (0.01,1), (0.01,2), (-0.99,-0.01), (0.01,1)])
    return resultado.x

SABR (2002)

Popular em mercados de taxa de juros:

dF = σ Fᵝ dW₁
dσ = α σ dW₂

Tem fórmula aproximada simples e captura bem o smile de vol.

Local Volatility (Dupire, 1994)

Em vez de estocasticidade, usa uma função σ(S, t) determinística que reproduz exatamente a superfície de volatilidade implícita observada no mercado.


Machine Learning para precificação

Pesquisa recente no arXiv mostra que ML pode superar Black-Scholes e Heston em alguns contextos:

  • Neural Networks: aprendem diretamente o mapeamento (strikes, maturidades, features) → preço
  • Gaussian Processes: quantificam incerteza na precificação
  • Deep Hedging: aprende estratégias de hedging ótimas sem modelo de preço explícito

Ver: Can ML Outperform Traditional Models for Option Pricing? (arXiv)


Superfície de volatilidade

A superfície de vol mapeia IV para todos os strikes e maturidades — o "mercado de volatilidade":

Dimensões:
- Eixo X: strike (ou moneyness = K/S)
- Eixo Y: maturidade
- Eixo Z: volatilidade implícita

O VIX (índice de medo) é derivado da superfície de vol do S&P500.

Conexões com outras seções


Referências:

Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento. Modelos de precificação envolvem premissas que podem não se sustentar em condições de mercado extremas.

On this page