Realizando 10mil simulações em um investimento usando o método de Monte Carlo.


Eu adoro o mercado de ações, tanto que já criei um canal no Youtube para falar sobre investimentos e educação financeira, analise fundamentalista e etc...

Então vamos utilizar o Python para nos ajudar em análises de risco sobre um investimento, e que tal utilizar as seguradoras? 

Estou unindo o útil ao agradável aqui(para mim kk).

Utilizando o método de simulações de Monte Carlo,  iremos estimar os possíveis resultados de um evento.

Vamos simular 10 mil cenários sobre as 4  principais ações de seguradoras (BBSE3.SA, CXSE3.SA, IRBR3.SA, PSSA3.SA) nos próximos 10 anos 

A partir destes resultados vamos responder a duas perguntas, qual o máximo que posso perder nos próximos 3 anos com uma confiança de 95%? E qual a probabilidade de eu obter lucro?


import numpy as np
import matplotlib.pyplot as plt
import datetime as dt
import yfinance as yf  
from numpy import linalg as LA

# Lista de tickers das ações
lista_acoes = ['BBSE3.SA', 'CXSE3.SA', 'IRBR3.SA', 'PSSA3.SA']

# Data final é hoje, e a data inicial é 700 dias atrás
data_final = dt.datetime.now()
data_inicial = data_final - dt.timedelta(days=700)

# Coletando os preços ajustados do Yahoo Finance
precos = yf.download(lista_acoes, start=data_inicial, end=data_final)['Adj Close']

# Calculando os retornos diários
retornos = precos.pct_change().dropna()

# Matriz de covariância dos retornos
matriz_covariancia = retornos.cov()

# Pesos da carteira (igualitários)
pesos_carteira = np.full(len(lista_acoes), 1 / len(lista_acoes))

# Número de ações
numero_acoes = len(lista_acoes)

#defino as variaveis de premissa da simulação de monte carlo
simulacoes=10000
dias_projetados=252*3
capital_inicial=5000

# obter a Média dos retornos e transformar em uma matriz
media_retornos = retornos.mean(axis=0).to_numpy()
matriz_retorno_medio=media_retornos*np.ones(shape=(dias_projetados,numero_acoes))

#cria uma matriz triangular inferior, proveniente de uma decomposição de cholesky,
# usando como base a matriz de covariancia original, necessário usar devido a
# correlação das ações que a principio não seria identificado pelo codigo

chocho=LA.cholesky(matriz_covariancia)

#gerar as simulações (finalmente)
retorno_carteira=np.zeros([dias_projetados,simulacoes])
montante_final=np.zeros(simulacoes)

for simulacao in range(simulacoes):
    #cria uma matriz aleatoria, gerada por uma função de densidade de probabilidade
    Randon=np.random.normal(size=(dias_projetados,numero_acoes))

    retorno_possivel=matriz_retorno_medio+np.inner(Randon,chocho)

    retorno_carteira[: ,simulacao]=np.cumprod(np.inner(pesos_carteira,
retorno_possivel)+1)*capital_inicial

    montante_final[simulacao]=retorno_carteira[-1,simulacao]

#criar um grafico para melhorar a visualização

plt.plot(retorno_carteira, linewidth=1)
plt.ylabel('dinheiro')
plt.xlabel('dias')
plt.show()



#obter a porcentagem probabilistica dos montantes.
montante_99=str(np.percentile(montante_final,1))
Montante_95=str(np.percentile(montante_final,5))
Montante_mediano=str(np.percentile(montante_final,50))
cenarios_positivos=str((len(montante_final[montante_final>5000])/len(montante_final))
*100)+"%"
# Calcular a perda máxima com 95% de confiança
perda_maxima_95 = capital_inicial - float(Montante_95)

print(f'''ao investir R$5000,00 na carteira {lista_acoes}, podemos esperar esses
resultados para os próximos 3 anos, utilizando o método de Monte Carlo com 10 mil
simulações:

      Com 50% de probabilidade, o montante será maior que R${Montante_mediano};
      Com 95% de probabilidade, o montante será maior que R${Montante_95};
      Com 99% de probabilidade, o montante será maior que R${montante_99}.

      Em {cenarios_positivos} dos cenários, foi possível obter lucro nos próximos
3 anos.

      Com 95% de confiança, o máximo que você pode perder nos próximos 3 anos é
R${perda_maxima_95:.2f}.''')



Veja a execução




Atualmente o investimento em seguradoras parece promissor não é mesmo?

O método de simulação de Monte Carlo, como aplicado neste código, é uma ferramenta poderosa para analisar o comportamento futuro de um portfólio de investimentos, considerando incertezas e variabilidades. Ele é amplamente utilizado em finanças para prever riscos e retornos, calcular métricas como o Value at Risk (VaR) e estimar a probabilidade de lucro em diferentes cenários. Além disso, pode ser empregado na gestão de carteiras para otimizar alocações e avaliar estratégias de investimento.

Fora das finanças, o método é aplicável em áreas como planejamento financeiro pessoal, precificação de derivativos, análise de riscos em projetos, simulação de demanda e estoque, e modelagem de impactos ambientais. Sua flexibilidade permite lidar com incertezas e criar cenários que suportam decisões mais informadas e robustas. 


Comentários