Python para Simulação Monte Carlo em Investimentos
Com Python, essa abordagem se torna acessível e poderosa, permitindo que investidores e gestores de risco construam modelos sofisticados para prever resultados financeiros.
1. O que é a Simulação de Monte Carlo?
A Simulação de Monte Carlo é um método que utiliza números aleatórios para modelar sistemas complexos e incertos.
Na prática, significa que em vez de tentar prever exatamente o futuro, simulamos milhares de possíveis cenários para:
Estimar a distribuição de retornos de um ativo ou portfólio.
Avaliar métricas de risco, como Value at Risk (VaR).
Calcular probabilidades de perda ou ganho em investimentos.
2. Aplicações em Investimentos
A técnica é amplamente usada em finanças para:
Precificação de opções (modelos estocásticos de Black-Scholes).
Gestão de risco (probabilidade de perdas).
Simulação de portfólios (otimização e análise de retorno esperado).
3. Preparando o Ambiente
Instalando dependências:
pip install numpy pandas matplotlib yfinance
4. Coletando Dados de Ações
Usaremos a Petrobras (PETR4) como exemplo.
import yfinance as yf
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# Baixando dados históricos (2 anos)
dados = yf.download("PETR4.SA", period="2y", interval="1d")
# Calculando retornos diários
dados["Retorno"] = dados["Close"].pct_change()
media = dados["Retorno"].mean()
desvio = dados["Retorno"].std()
print("Retorno médio diário:", media)
print("Volatilidade diária:", desvio)
5. Simulação de Monte Carlo
Agora, vamos simular o preço futuro da ação com base no retorno médio e na volatilidade histórica.
5.1 Parâmetros da simulação
dias = 252→ número de pregões em um ano.simulacoes = 1000→ quantidade de cenários simulados.Usamos processo de passeio aleatório (random walk).
# Parâmetros
dias = 252
simulacoes = 1000
preco_inicial = dados["Close"][-1]
# Simulação
resultados = np.zeros((dias, simulacoes))
for s in range(simulacoes):
preco = preco_inicial
for d in range(dias):
retorno = np.random.normal(media, desvio)
preco = preco * (1 + retorno)
resultados[d, s] = preco
5.2 Visualizando os Cenários
plt.figure(figsize=(12,6))
plt.plot(resultados, alpha=0.1, color="blue")
plt.title("Simulação de Monte Carlo - PETR4 (1000 cenários)")
plt.xlabel("Dias")
plt.ylabel("Preço da Ação")
plt.show()
📌 O gráfico mostra várias trajetórias possíveis para o preço da ação em 1 ano.
6. Distribuição de Preços Futuros
Ao final das simulações, podemos analisar a distribuição dos preços possíveis.
precos_finais = resultados[-1, :]
plt.figure(figsize=(10,5))
plt.hist(precos_finais, bins=50, color="skyblue", edgecolor="black")
plt.title("Distribuição de Preços Finais - PETR4")
plt.xlabel("Preço")
plt.ylabel("Frequência")
plt.show()
print("Preço médio esperado:", np.mean(precos_finais))
print("Preço mínimo:", np.min(precos_finais))
print("Preço máximo:", np.max(precos_finais))
📌 Aqui conseguimos ver cenários otimistas e pessimistas, além de um intervalo provável para o preço.
7. Calculando Risco: Value at Risk (VaR)
O VaR (Value at Risk) é uma métrica de risco muito usada em bancos e fundos. Ele responde à pergunta:
Qual é a perda máxima esperada em um horizonte de tempo, com um certo nível de confiança?
Exemplo: VaR de 5% significa que existe 5% de chance de perder mais do que aquele valor.
VaR_95 = np.percentile(precos_finais, 5)
print(f"Value at Risk (95% confiança): {VaR_95}")
📌 Isso ajuda o investidor a entender cenários adversos.
8. Simulando um Portfólio
Podemos aplicar Monte Carlo também em carteiras de ativos.
Exemplo com PETR4 e VALE3:
ativos = ["PETR4.SA", "VALE3.SA"]
dados_port = yf.download(ativos, period="2y")["Close"]
# Retornos diários
retornos = dados_port.pct_change().dropna()
# Pesos do portfólio (50% cada ativo)
pesos = np.array([0.5, 0.5])
retornos_port = retornos.dot(pesos)
media = retornos_port.mean()
desvio = retornos_port.std()
# Simulação Monte Carlo para portfólio
resultados = np.zeros((dias, simulacoes))
preco_inicial = 100 # carteira começa com R$100
for s in range(simulacoes):
preco = preco_inicial
for d in range(dias):
retorno = np.random.normal(media, desvio)
preco = preco * (1 + retorno)
resultados[d, s] = preco
# Gráfico
plt.plot(resultados, alpha=0.1, color="green")
plt.title("Simulação de Monte Carlo - Portfólio PETR4 + VALE3")
plt.xlabel("Dias")
plt.ylabel("Valor do Portfólio (R$)")
plt.show()
📌 Isso ajuda a visualizar como o valor da carteira pode evoluir sob diferentes cenários.
9. Boas Práticas
Use dados suficientes: quanto mais histórico, mais realista a simulação.
Valide o modelo: compare previsões com dados reais passados.
Não dependa apenas da simulação: use também análise fundamentalista e técnica.
Combine com otimização de portfólios (ex.: Teoria de Markowitz).
Monte Carlo não prevê o futuro, mas mostra possibilidades.
10. Conclusão
A Simulação de Monte Carlo é uma ferramenta poderosa para investidores e gestores de risco, permitindo entender cenários de incerteza e calcular métricas como o VaR.
Com Python, implementamos a técnica de forma prática, usando bibliotecas como NumPy, Pandas, Matplotlib e yfinance.
Esse tipo de simulação ajuda a tomar decisões mais embasadas e conscientes, reduzindo riscos em investimentos.

Comentários
Postar um comentário