Você está na página 1de 6

MONTECARLO_ITUB4

May 19, 2023

1 Monte Carlo aplicado nas ações do Itaú (ITUB4)


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. Aqui, 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 do
ativo ITUB4 usando o Python.

2 Importação das bibliotecas


[82]: """
1°) Importação do pandas para trabalhar com dados
"""
import pandas as pd
"""
2°) Importação do math para trabalhar com matemática
"""
import math
"""
3°) Importação do numpy como np para trabalhar com matrizes e tudo mais.
"""
import numpy as np
"""
4°) Importação do pandas_datareader.data como pdr
"""
import pandas_datareader.data as pdr
"""
5°) Importação do matplotlib.pyplot como plt para fazer gráficos.
"""
import matplotlib.pyplot as plt
"""
6°) De matplotlib.ticker vamos importar o AutoMinorLocator e o MaxNLocator para␣
,→trabalhar com os "ticks"

dos gráficos.
"""
import matplotlib.ticker as mticker
from matplotlib.ticker import AutoMinorLocator, MaxNLocator
"""

1
7°) De matplotlib.font_manager vamos importar FontProperties para criar fontes␣
,→de texto.

"""
from matplotlib.font_manager import FontProperties
"""
8°) Trabalhar com Finanças
"""
import yfinance as yf
yf.pdr_override()

3 MONTECARLO - ITUB4
[83]: """
Exemplo para apenas um ativo:
"""
symbols = ['ITUB4.SA'] # Itaú Unibanco
"""
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)))

[*********************100%***********************] 1 of 1 completed
Retorno esperado : 0.0007
Desvio padrão : 0.0223

[84]: """
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

2
"""
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)

[85]: """
Criação da primeira fonte de texto para colocar como fonte dos labels
"""
font1 = {"family": "serif", "weight": "bold", "color": "gray", "size": 14}
"""
Criação da segunda fonte de texto para colocar como fonte da legenda
"""
font2 = FontProperties(family = "serif",
weight = "bold",
size = 14)
"""
Cria um "lugar" com size (9, 7) para alocar a figura
"""
fig, axs = plt.subplots(figsize = (14, 7))
"Plot do gráfico"
axs.plot(price_series)
axs.grid(False)
"""
Definindo a "grossura" e a cor do eixos
"""
for axis in ["left", "right", "top", "bottom"]:
axs.spines[axis].set_linewidth(2)
axs.spines[axis].set_color("gray")
"""
Trabalha com os ticks do gráfico
"""
axs.xaxis.set_minor_locator(AutoMinorLocator())
axs.yaxis.set_minor_locator(AutoMinorLocator())
axs.tick_params(axis = "both", direction = "in", labelcolor = "gray", labelsize␣
,→= 14, left = True, bottom = True, top = True, right = True)

axs.tick_params(which = "major", direction = "in", color = "gray", length = 5.


,→4, width = 2.5, left = True, bottom = False, top = False, right = True)

axs.tick_params(which = "minor", direction = "in", color = "gray", length=4,␣


,→width = 2, left = True, bottom = True, top = True, right = True)

"""
Descrição para cada eixo
"""
axs.set_xlabel("Dias", fontdict = font1)
axs.set_ylabel("Preço ITUB4 (R$)", fontdict = font1)

3
"""
plt.rcParams["axes.labelweight"] = "bold" mostra em negrito os números nos␣
,→eixos.

"""
plt.rcParams["axes.labelweight"] = "bold"
"""
Definindo um fundo branco para a imagem
"""
fig.patch.set_facecolor("white")
Cor_fundo = plt.gca()
Cor_fundo.set_facecolor("white")
Cor_fundo.patch.set_alpha(1)
"""
Mostrar o gráfico
"""
plt.show()

[86]: """
Diversas simulções
"""
"""
Criação da primeira fonte de texto para colocar como fonte dos labels
"""
font1 = {"family": "serif", "weight": "bold", "color": "gray", "size": 14}
"""
Criação da segunda fonte de texto para colocar como fonte da legenda
"""

4
font2 = FontProperties(family = "serif",
weight = "bold",
size = 14)
"""
Cria um "lugar" com size (9, 7) para alocar a figura
"""
fig, axs = plt.subplots(figsize = (14, 7))
"Plot do gráfico"
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])
axs.plot(serie_precos)
axs.grid(False)
"""
Definindo a "grossura" e a cor do eixos
"""
for axis in ["left", "right", "top", "bottom"]:
axs.spines[axis].set_linewidth(2)
axs.spines[axis].set_color("gray")
"""
Trabalha com os ticks do gráfico
"""
axs.xaxis.set_minor_locator(AutoMinorLocator())
axs.yaxis.set_minor_locator(AutoMinorLocator())
axs.tick_params(axis = "both", direction = "in", labelcolor = "gray", labelsize␣
,→= 14, left = True, bottom = True, top = True, right = True)

axs.tick_params(which = "major", direction = "in", color = "gray", length = 5.


,→4, width = 2.5, left = True, bottom = False, top = False, right = True)

axs.tick_params(which = "minor", direction = "in", color = "gray", length=4,␣


,→width = 2, left = True, bottom = True, top = True, right = True)

"""
Descrição para cada eixo
"""
axs.set_xlabel("Dias", fontdict = font1)
axs.set_ylabel("Preço ITUB4 (R$)", fontdict = font1)
"""
plt.rcParams["axes.labelweight"] = "bold" mostra em negrito os números nos␣
,→eixos.

"""
plt.rcParams["axes.labelweight"] = "bold"

5
"""
Definindo um fundo branco para a imagem
"""
fig.patch.set_facecolor("white")
Cor_fundo = plt.gca()
Cor_fundo.set_facecolor("white")
Cor_fundo.patch.set_alpha(1)
plt.show()

Você também pode gostar