Escolar Documentos
Profissional Documentos
Cultura Documentos
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)
"""
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)
"""
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()