Matemática Financeira e Python: Aprofundando Black-Scholes – PARTE II
Este artigo é uma continuação da primeira parte intitulada "Investindo com Inteligência: A Matemática Financeira Simplificada com Python", que demonstrou a precificação de opções financeiras em investimentos com ações através da fórmula Black-Scholes.
Naquela parte foi apresentado um exemplo fictício da compra de um lote de ações de uma empresa em expansão elevada de mercado, juntamente com um contrato de Opção de Compra (Call Option) para execução no vencimento de um ano, tudo isso, planejado e escrito através de um script em Python como forma de apoio técnico à decisão tomada pela Empresa X.
Já nesta segunda parte, avançaremos um pouco mais nos conceitos que norteiam a fórmula Black-Scholes, em suas variáveis relevantes e como elas se relacionam entre si e no resultado da análise.
Será apresentado um novo script em Python, abrangente e atualizado, demonstrando o fluxo temporal do investimento, no intuito de oferecer uma visão mais clara e objetiva do fluxo de caixa e do patrimônio da Empresa X.
Portanto, o objetivo desta segunda parte, está na apresentação dos conceitos básicos da fórmula Black-Scholes e da demonstração dos resultados por meio do Relatório Gerencial proveniente do novo script escrito em Python.
Explicando a Fórmula de Black-Scholes de Forma Simples
A fórmula de Black-Scholes tem esse nome em homenagem aos criadores Fischer Black e Myron Scholes e pode às vezes ser chamada de Black-Scholes-Merton, porque Robert Merton também contribuiu significativamente para a sua formulação.
O que levou seus criadores a desenvolverem essa fórmula foi a inexistência até então de uma solução para a precificação no mercado de opções, o que era feito praticamente por “adivinhação”. O problema era como calcular o valor justo de uma opção no momento da compra ou da venda de um ativo no futuro, dados as incertezas do mercado, ficava difícil calcular com precisão esse ativo negociado.
Como isso foi resolvido? O “pulo do gato” desses experts foi combinar conceitos de finanças e estatística de tal maneira através de uma fórmula matemática que pudesse “eliminar” as incertezas do mercado ou o “risco” em cenários complexos.
A fórmula Matemática do Black-Scholes
Legenda:
- V: Valor da opção. É o que queremos calcular.
- S: Preço atual do ativo subjacente (exemplo: preço da ação hoje).
- t: Tempo até o vencimento da opção.
- r: Taxa de juros livre de risco (como o retorno de um título público seguro).
- σ: Volatilidade do preço do ativo, ou seja, o quanto o preço oscila no tempo.
Com a fórmula é possível calcular um preço justo com base em dados objetivos, tornando o mercado de opções mais transparente eficiente.
Também calcula a probabilidade de o preço do ativo ultrapassar o preço de exercício da opção, eliminando os riscos já que não depende das preferências individuais dos investidores, e, de fácil aplicação pois de posse dos dados como preço atual, volatilidade e taxa de juros, o preço da opção é calculado rapidamente.
O Cenário do Investimento
A empresa X deseja investir em ações da Empresa Y, que está agora em ascensão. O preço das ações da Empresa Y é de R$ 100,00, e a Empresa X acredita que, daqui a um ano, o valor será maior do que R$ 110,00, o preço que ela está disposta a pagar.
Dado as incertezas (risco) do mercado, a Empresa X resolve investir em um contrato de opção de compra, que é um tipo de seguro financeiro garantidor do investimento, garantindo o direito de comprar as ações negociadas ao preço predeterminado de R$ 110,00 na data de vencimento.
No vencimento a Empresa X venderá suas ações inicialmente compradas e exercerá a opção de compra de outro lote de ações pelo preço vigente da época. Não fará novo contrato de opção de compra.
Para fins de resultados, no vencimento do contrato, o preço da ação chegou a R$ 120,00, acima do projetado (R$ 110,00) e o relatório gerencial criado a partir do script em Python, demonstrará toda a evolução dos fatos.
Novo Script em Python evidenciando a fórmula Black-Scholes e o Relatório Gerencial
import numpy as np
from scipy.stats import norm
# Função para calcular o preço da opção de compra usando a fórmula de Black-Scholes
def calculate_call_price(S, K, T, r, sigma):
"""
Calcula o preço de uma opção de compra europeia usando a fórmula de Black-Scholes.
Parâmetros:
S: Preço atual da ação (ativo subjacente)
K: Preço de exercício da opção
T: Tempo até o vencimento (em anos)
r: Taxa de juros livre de risco (anualizada)
sigma: Volatilidade anualizada do ativo subjacente
Retorna:
call_price: Preço da opção de compra
"""
# Calculando d1, um parâmetro intermediário baseado no preço atual, no preço de exercício,
# na taxa de juros, na volatilidade e no tempo até o vencimento
d1 = (np.log(S / K) + (r + 0.5 * sigma**2) * T) / (sigma * np.sqrt(T))
# Calculando d2, que é d1 ajustado pela volatilidade e pelo tempo
d2 = d1 - sigma * np.sqrt(T)
# Calculando o preço da opção de compra (call)
# Usamos a fórmula: C = S * N(d1) - K * e^(-rT) * N(d2)
call_price = S * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
return call_price
# Parâmetros do investimento
S = 100 # Preço atual da ação (ativo subjacente)
K = 110 # Preço de exercício da opção
T = 1 # Tempo até o vencimento (1 ano)
r = 0.05 # Taxa de juros livre de risco (5% ao ano)
sigma = 0.2 # Volatilidade anualizada (20%)
expected_final_price = 120 # Preço esperado da ação no final do ano
# Calculando o preço da opção de compra no ano inicial usando a função
call_price = calculate_call_price(S, K, T, r, sigma)
# Relatório Gerencial para detalhar o fluxo de caixa e patrimônio
print("==== RELATÓRIO GERENCIAL DE INVESTIMENTO ====")
# Ano Inicial
print(f"1. Ano Inicial")
print(f" - Preço da ação comprada: R$ {S:.2f}") # Preço da ação no ano inicial
print(f" - Custo da opção de compra: R$ {call_price:.2f}") # Custo para comprar a opção
print(f" - Total desembolsado no ano inicial: R$ {S + call_price:.2f}") # Desembolso total no início
# Ano de Vencimento
final_action_value = expected_final_price # Preço final da ação no mercado após 1 ano
cash_in = final_action_value # Receita gerada pela venda da ação inicial
cash_out_option = K # Custo para exercer a opção de compra
# Calculando o fluxo de caixa no ano de vencimento
cash_flow = cash_in - cash_out_option # Receita menos custo para exercer a opção
total_initial_outflow = S + call_price # Total desembolsado no início
net_cash_position = cash_flow - total_initial_outflow # Caixa líquido final
new_asset_value = expected_final_price # Valor do novo ativo adquirido no imobilizado
# Exibindo o fluxo no ano de vencimento
print("\n2. Ano de Vencimento")
print(f" - Preço da ação no mercado: R$ {expected_final_price:.2f}") # Preço da ação no vencimento
print(f" - Receita da venda da ação inicial: R$ {cash_in:.2f}") # Receita da venda
print(f" - Custo para exercer a opção (nova compra): R$ {cash_out_option:.2f}") # Custo da nova compra
print(f" - Fluxo de caixa no ano de vencimento: R$ {cash_flow:.2f}") # Fluxo líquido no vencimento
print(f" - Saldo do caixa (líquido): R$ {net_cash_position:.2f}") # Saldo do caixa ao final
print(f" - Valor do novo ativo no imobilizado: R$ {new_asset_value:.2f}") # Valor do novo ativo no patrimônio
# Resultado Final
total_wealth = net_cash_position + new_asset_value # Soma do caixa líquido com o patrimônio final
print("\n3. Resultado Geral")
print(f" - Caixa final: R$ {net_cash_position:.2f}") # Caixa líquido final
print(f" - Valor total do patrimônio (caixa + imobilizado): R$ {total_wealth:.2f}") # Resultado geral
Análise do Script e do Relatório Gerencial
O script está dividido em três partes: Ano Inicial, Ano de Vencimento e Resultado Gerencial trazendo o detalhamento dos fatos e fluxo de caixa.
Também, os valores do Fluxo de Caixa e do Patrimônio Imobilizado estão claramente definidos e separados para facilitar o entendimento.
As variáveis são apresentadas, calculadas e exibidas textualmente.
Relatório Gerencial do Investimento
1. Ano Inicial
- Preço da ação comprada: R$ 100.00
- Custo da opção de compra: R$ 6.04
- Total desembolsado no ano inicial: R$ 106.04
2. Ano de Vencimento
- Preço da ação no mercado: R$ 120.00
- Receita da venda da ação inicial: R$ 120.00
- Custo para exercer a opção (nova compra): R$ 110.00
- Fluxo de caixa no ano de vencimento: R$ 10.00
- Saldo do caixa (líquido): R$ -96.04
- Valor do novo ativo no imobilizado: R$ 120.00
3. Resultado Geral
- Caixa final: R$ -96.04
- Valor total do patrimônio (caixa + imobilizado): R$ 23.96
Conclusão
Conforme se vê, o relatório gerencial proveniente do script em Python demonstrou toda a evolução do Fluxo de Caixa e do Patrimônio Imobilizado da Empresa X, em consonância com o código idealizado pelo desenvolvedor e demonstrando a eficácia da linguagem Python em decisões de investimento negociados através da opção de compra no mercado financeiro.
linkedin.com/in/izairton-oliveira-de-vasconcelos-a1916351