Método Monte Carlo com o Python

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.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Transfer Learning: mostrando porque o Python está na ponta do desenvolvimento

A aprendizagem por transferência (transfer learning) é o reuso de um modelo pré-treinado em um novo problema. Portanto, sua utilização torna-se um avanço enorme para a previsão de diferentes tipos de variáveis, principalmente para aquelas ordenadas no tempo. Mostramos nesta postagem o uso do Transfer Learning com o Python para o caso de Séries Temporais.

Criando Tabelas com o Python: mostrando o poder da linguagem sobre o Excel

Nos dias atuais, pessoas que trabalham com dados estão constantemente confrontados com um dilema: criar uma tabela não tão genial no Excel ou manter em um formato ainda pior, como um dataframe, mas mantendo a flexibilidade de obtenção dos dados. Podemos resolver esse grande problema, unindo a flexibilidade e beleza ao usar a biblioteca great_tables do Python.

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.