A simulação de Monte Carlo é uma técnica estatística utilizada para avaliar e quantificar riscos em uma ampla variedade de aplicações. Uma dessas aplicações é o gerenciamento de portfólio, onde a simulação de Monte Carlo é usada para avaliar o risco e o retorno de um portfólio de investimentos.
Neste artigo, vamos aprender a criar uma simulação de Monte Carlo para analisar o risco de um portfólio de investimentos. Vamos usar Python como nossa linguagem de programação e a biblioteca NumPy para gerar números aleatórios.
A simulação de Monte Carlo é uma técnica que envolve o uso de números aleatórios para simular eventos ou processos que envolvem incerteza. Ela é usada para gerar uma distribuição de probabilidades para as possíveis soluções de um problema, permitindo que sejam avaliados os riscos e os retornos associados a cada solução.
A técnica foi nomeada em homenagem à cidade de Monte Carlo, em Mônaco, que é famosa por seu cassino e jogos de azar. A simulação de Monte Carlo foi desenvolvida originalmente para resolver problemas em física nuclear durante a Segunda Guerra Mundial, mas hoje em dia é amplamente utilizada em finanças, engenharia, ciência da computação e outras áreas.
O gerenciamento de portfólio é o processo de construção e gestão de uma carteira de investimentos que atenda aos objetivos de um investidor. O objetivo é maximizar o retorno esperado do portfólio enquanto se gerencia o risco associado.
A análise de risco é uma parte importante do gerenciamento de portfólio. Os investidores querem saber qual é a probabilidade de que um determinado portfólio perca dinheiro em um determinado período de tempo. Eles também querem saber qual é a volatilidade do portfólio, ou seja, qual é a amplitude das flutuações nos retornos do portfólio ao longo do tempo.
Para realizar a simulação de Monte Carlo para análise de risco de um portfólio de investimentos, precisamos seguir os seguintes passos:
Para implementar a simulação de Monte Carlo em Python, precisamos primeiro coletar os dados de retorno de cada ativo no portfólio e calcular o retorno esperado e o desvio padrão para cada ativo. Neste exemplo, vamos criar um portfólio hipotético com três ativos: ações, títulos e imóveis. Os dados de retorno para cada ativo serão representados por matrizes numpy, onde cada linha representa um ano e cada coluna representa um cenário.
1import numpy as np
2
3# dados de retorno para cada ativo
4returns_stocks = np.array([[0.05, 0.10, -0.03],
5 [-0.02, 0.06, 0.01],
6 [0.07, -0.01, 0.02]])
7returns_bonds = np.array([[0.03, -0.01, 0.02],
8 [0.02, 0.04, -0.01],
9 [-0.01, 0.03, 0.05]])
10returns_real_estate = np.array([[-0.02, 0.03, 0.04],
11 [0.01, 0.02, 0.03],
12 [-0.03, -0.01, 0.02]])
13
14# retorno esperado e desvio padrão para cada ativo
15mean_stocks, std_stocks = np.mean(returns_stocks, axis=0), np.std(returns_stocks, axis=0)
16mean_bonds, std_bonds = np.mean(returns_bonds, axis=0), np.std(returns_bonds, axis=0)
17mean_real_estate, std_real_estate = np.mean(returns_real_estate, axis=0), np.std(returns_real_estate, axis=0)
18
O próximo passo é definir o horizonte de tempo para a simulação e gerar um grande número de cenários aleatórios de retornos para cada ativo, usando uma distribuição normal.
1# definir o horizonte de tempo para a simulação
2years = 10
3
4# gerar 10.000 cenários aleatórios de retornos para cada ativo
5scenarios_stocks = np.random.normal(mean_stocks, std_stocks, size=(years, 10000))
6scenarios_bonds = np.random.normal(mean_bonds, std_bonds, size=(years, 10000))
7scenarios_real_estate = np.random.normal(mean_real_estate, std_real_estate, size=(years, 10000))
8
Com os cenários aleatórios de retornos gerados, podemos usar esses cenários para calcular os retornos para o portfólio em cada cenário. Neste exemplo, vamos assumir que o portfólio é composto por 50% de ações, 30% de títulos e 20% de imóveis.
1# peso de cada ativo no portfólio
2weights = np.array([0.5, 0.3, 0.2])
3
4# calcular os retornos para o portfólio em cada cenário
5portfolio_returns = np.sum(weights[0] * scenarios_stocks +
6 weights[1] * scenarios_bonds +
7 weights[2] * scenarios_real_estate, axis=1)
8
Finalmente, podemos calcular a média e o desvio padrão dos retornos do portfólio para obter a distribuição de probabilidades dos retornos do portfólio
1import matplotlib.pyplot as plt
2
3# plotar um histograma dos retornos do portfólio
4plt.hist(portfolio_returns, bins=50)
5plt.xlabel("Retornos do portfólio")
6plt.ylabel("Frequência")
7plt.show()
8
Podemos usar essas informações para avaliar o risco do portfólio e tomar decisões de investimento informadas. Por exemplo, podemos calcular a probabilidade de que o retorno do portfólio seja negativo em um determinado período de tempo.
1# calcular a probabilidade de retorno negativo do portfólio em 5 anos
2negative_returns = portfolio_returns < 0
3prob_negative_returns = np.mean(negative_returns)
4
5print("Probabilidade de retorno negativo em 5 anos:", prob_negative_returns)
6
Neste exemplo, podemos ver que a probabilidade de retorno negativo do portfólio em 5 anos é de cerca de 9%. Isso nos permite avaliar o risco do portfólio e tomar decisões informadas sobre como ajustar o portfólio para reduzir o risco.
Este é apenas um exemplo simples de como implementar uma simulação de Monte Carlo para análise de riscos em gerenciamento de portfólio. Existem muitas variações e aprimoramentos possíveis para essa técnica, dependendo do tipo de ativos incluídos no portfólio e da complexidade das relações entre esses ativos. Para aprofundar seus conhecimentos em simulação de Monte Carlo e gerenciamento de portfólio, recomendamos os seguintes recursos: