Métodos de Monte Carlo são algoritmos computacionais que se baseiam em amostras aleatórias de uma distribuição para obter resultados numéricos . No post de hoje vamos criar essa distribuição com base em dois parâmetros: média e desvio padrão dos retornos, de forma a obter o preço esperado de um ativo usando o Python.
# Importa as bibliotecas import pandas as pd import math import numpy as np import pandas_datareader.data as pdr from matplotlib import pyplot as plt !pip install yfinance --upgrade --no-cache-dir import yfinance as yf yf.pdr_override()
# Ativos symbols = ['ITUB4.SA'] # Importa os preços preco = pdr.get_data_yahoo(symbols)['Adj Close'] # Obtém o número de observações do tempo tempo = (preco.index[-1] - preco.index[0]).days # Média dos retornos media_retorno = preco.pct_change().mean() # Desvio padrão dos retornos desvio_retorno = preco.pct_change().std() # A partir dos inputs, iremos gerar os valores aleatórios da simulação print ("Retorno esperado : ", str(round(media_retorno, 4))) print ("Desvio padrão : ", str(round(desvio_retorno, 4)))
# Gera valores aleatório para 1 ano em dias úteis (252 dias) assumindo distribuição normal retorno_diario_sim = np.random.normal(media_retorno, desvio_retorno, 252) + 1 # A partir do valores aleatórios futuros dos retornos, aplicamos no último valor do preço da ação price_series = [preco[-1]] for j in retorno_diario_sim: price_series.append(price_series[-1] * j) plt.plot(price_series)
plt.figure(figsize = (15, 7)) # Cria várias simulações numero_processos = 3000 precos_fechamento = [] for i in range(numero_processos): retorno_diario = np.random.normal(media_retorno, desvio_retorno, 252) + 1 serie_precos = [preco[-1]] for j in retorno_diario: serie_precos.append(serie_precos[-1] * j) # anexa o último valor do preço precos_fechamento.append(serie_precos[-1]) # plota plt.plot(serie_precos) plt.show() plt.figure(figsize = (15, 7)) # plota histograma plt.hist(precos_fechamento,bins=40)
# Analisa o resultado médio de todos os preços simulados media_final = round(np.mean(precos_fechamento),2) print("Preço Esperado: ", str(media_final))
______________________________________
Quer saber mais?
Veja nosso curso de Python para Investimentos.