Modelo Black-Scholes em Python

Modelo Black-Scholes em Python

Código e exemplos

O modelo Black-Scholes (BS), também conhecido como modelo Black-Scholes-Merton, é um modelo matemático para precificar um contrato de opções.

Vamos utilizar a equação de Black-Sholes (BC) para calcular o preço de uma call da PETR3 em python. Primeiro, vejamos abaixo a equação que usaremos:

$$C=\mathcal{N}(d_1)S_t - \mathcal{N}(d_2)Ke^{-rt},$$

$$d_1=\frac{\ln\frac{S_t}{K}+(r+\frac{\sigma^2}{2}t)}{\sigma\sqrt{t}},$$

$$d_2=d_1-\sigma\sqrt{t},$$

no qual:

\(C\): Preço da call,

\(\mathcal{N}(\cdot)\): Função distribuição acumulada da distribuição normal,

\(S_{t} \): Preço à vista do ativo,

\(K\): Preço do strike,

\(r\): Taxa de juros livre de risco,

\(t\): Tempo até o vencimento,

\(\sigma\): Volatilidade do ativo.

import numpy as np
from scipy.stats import norm

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

No nosso primeiro exemplo, as variáveis da função acima têm os seguintes valores:

\(S_t\)=23.24 é o preço da PETR3,

\(K=25\) é o strike da opção (acima do preço de mercado da ação)

\(r=0.000072655\) é o CDI ao dia,

\(t=36\) é vencimento em dias,

\(\sigma = 0.031969302\) é desvio padrão da ação dos últimos quatro anos.

BS(S = 23.24, K = 25, r = 0.000072655, t = 36, sigma = 0.031969302)
# 1.1150201560237178

Segundo o modelo, o preço da opção seria 1.92 BRL. Agora vamos calcular o preço de um call com strike abaixo do preço de mercado da ação \(S_t=21.75\):

BS(S = 23.24, K = 21.75, r = 0.000072655, t = 36, sigma = 0.031969302)
# 2.598957375581266

Segundo o modelo, o preço da opção seria 2.60 BRL.

Esse método só dá uma referência, pois o preço de mercado pode ser bem diferente do calculado e não quer dizer que esteja cara ou barata. Nesse caso, só quer dizer que o mercado está precificando uma volatilidade maior.

Até a próxima!