Quinta-feira, Novembro 29, 2007

A fórmula de Black-Scholes para precificação de opções

Depois de inúmeros posts sobre fundamentos de cálculo de juros e probabilidades, está na hora de finalmente vermos como se calcula o valor de uma opção. Sem mais delongas, a fórmula de Black-Scholes para opções de compra:

C = N(d1).S - exp(-R.T).N(d2).K

d1 = (ln(S/K) + (R+V*V/2)*T) / (V.sqrt(T))
d2 = d1 - V.sqrt(T)

onde C é o valor da opção de compra, S é o valor atual da ação (spot), K é o valor-alvo da opção (strike), R é a taxa de juros, V é a volatilidade, T é o tempo que falta até a expiração. Lembrando que R, T e V devem estar na mesma escala (normalmente, anual).

As variáveis d1 e d2 são cálculos intermediarios, mostrados separadamente para deixar a fórmula mais legível, e porque é a praxe. N() é a distribuição normal cumulativa (que geralmente é igual à probabilidade do parâmetro), exp() é a função exponencial (número "e" elevado a uma potência), e ln() é o logaritmo natural. sqrt() é a raiz quadrada.

Nesta fórmula aparecem todos os elementos de que falamos nos posts passados:

* a taxa de juros-base da economia, expressa pela uma potência de "e" por ser capitalização contínua.

* a correção da taxa média de retorno pela expressão (volatilidade*volatilidade/2), pois a volatilidade deprime o retorno médio;

* a conversão de uma volatilidade anual para outra grandeza de tempo, multiplicando-se pela raiz quadrada do tempo.

* o uso de distribuição normal acumulada para calcular as probabilidades da opção expirar com valor.

Nota-se que opções exigem uma matemática mais "nervosa" que outras modalidades de investimento. A dedução dessas equações é ainda mais nervosa pois envolve equações diferenciais parciais. Felizmente não precisamos lidar com isso. Na verdade, nem precisamos fazer os cálculos acima. Há inúmeras páginas na Internet com calculadora B&S, como esta: http://www.blobek.com/black-scholes.html.

Para matar a cobra e mostrar o pau, vamos calcular uma opção de acordo com o fechamento de hoje. Vale do Rio Doce (VALE5) fechou com a cotação de 52.06 (na verdade fechou a 51,90 no aftermarket, mas vamos considerar o fechamento oficial, pois opções não têm aftermarket).

A volatilidade anual da Vale, calculada de acordo com o último mês, é de 46,92%. A taxa de juros atual é 11,75% ao ano. A opção VALEL50, com strike de 49,66, expira dia 17/12.

Jogando tudo isso na calculadora, o resultado é 3,64. Isso quer dizer que o valor "justo" da opção é 3,64, considerando as seguintes hipóteses:

* que as ações vão crescer, em média, não mais que a taxa de juros livre de risco;

* que nem comprador pague ágio, nem vendedor venda no prejuízo;

* que os retornos da ação são aleatórios e seguem uma distribuição normal.

No entanto, VALEL50 fechou hoje cotada à 3,97. O que isso quer dizer?

Pode querer dizer que qualquer dos fatores citados acima (sem ágio, rendimentos aleatórios e tendentes à taxa de juros) podem não ser verdade.

Mas como não existe forma melhor do que B&S para avaliar opções, os negociadores de opções preferem falar em VOLATILIDADE IMPLÍCITA. Ou seja, a volatilidade que faz a conta fechar com o preço praticado pelo mercado.

Fazendo algumas tentativas na calculadora Web, vejo que uma volatilidade em torno de 51,70% dá o valor final da opção de 3,97. Infelizmente, não existe fórmula fechada para descobrir volatilidade a partir de um preço de mercado. Só resta a tentativa-e-erro.

A interpretação desse fato é que o mercado estima que a volatilidade futura da Vale (51,70%) é maior que a passada (46,92%). Sendo a ação mais volátil, a opção vale mais.

Naturalmente, essa "sensação" de volatilidade advém do fato de muita gente estar comprando o seu "bilhete de loteria" VALEL50 esperando que ele suba muito. Os compradores pressionam a demanda, o preço sobe.

Para finalizar, vamos fazer a memória do primeiro cálculo B&S, que usou a volatilidade passada da Vale.

d1 = (ln(S/K) + (R+V*V/2)*T) / (V.sqrt(T))

d1 = (ln(52,06/49,66) + (0.1175+0.4692*0.4692/2)*(18/365)) / (0.4692*sqrt(18/365))

d1 = 0.56067792

d2 = d1 - V.sqrt(T)

d2 = 0.56067792 - 0.4692*sqrt(18/365)

d2 = 0.45648269

C = N(d1).S - exp(-R.T).N(d2).K

C = N(0.560678762)*52,06 - exp(-0.1175*(18/365))*N(0.456483535)*49,66

Para calcular N(x), usei a função NORMSDIST() do OpenOffice Spreadsheet:

C = 0.71249173*52,06 - 0,994222235*0.67597854*49,66

C = 37,09 - 33,38

C = 3,71

O valor é próximo ao da calculadora Web (3,64). Tirando a prova dos nove com a minha calculadora feita em Python, verifico que o valor dá 3,65 (bate com Web), mas vai a 3,72 (bate com cálculo manual) se adicionarmos um dia a mais de prazo.

Isto aconteceu porque já tinha passado da meia-noite e no Python eu coloco a data de expiração, não o número de dias. Assim ele estava considerando 17 dias e não 18. Adicionando um dia, fica 18 e bate com o cálculo manual.

Provavelmente a calculadora Web também desconta um dia, daí ter fechado com a calculadora Python depois da meia-noite... Também verifiquei seu código e vi que há alguns arredondamentos no meio do cálculo, o que considero um erro.

No próximo post, falaremos das "gregas": delta, gama e theta, sem apresentar fórmulas porque são gigantescas (em particular a do theta). A calculadora Web sugerida já calcula as gregas, portanto você já pode brincar com elas e tentar descobrir o que significam.
blog comments powered by Disqus