<jupyter_start><jupyter_text>Bibliotecas<jupyter_code>!pip install yfinance
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import yfinance as yf
plt.style.use('ggplot')<jupyter_output><empty_output><jupyter_text>Retorno do ibovespa versus carteira<jupyter_code>#Buscando os dados 

tickers = ['PETR3.SA', 'MGLU3.SA', 'ITSA4.SA', 'RDOR3.SA', 'LCAM3.SA', 'BPAC11.SA',
           'CSAN3.SA', 'SMFT3.SA', 'ARZZ3.SA', 'TRPL3.SA', 'B3SA3.SA', 'WEGE3.SA', '^BVSP']

carteira1 = pd.DataFrame()

for i in tickers:
  carteira1[i] = yf.download(i, start='2021-11-01', end='2021-11-30')['Adj Close']

carteira1.tail()
#Obtendo retorno simples

ret_simples = carteira1.pct_change()
ret_simples.fillna(0, inplace=True)
ret_simples.head()
#Obtendo o retorno acumulado e normalizando a base de dados

ret_acum = (1 + ret_simples).cumprod()
ret_acum.head()
ret_simples.shape
#Calculando a média diária do retorno simples

mean_retsimples = ret_simples.mean(axis=1)
mean_retsimples = pd.DataFrame(mean_retsimples.head())
mean_retsimples.rename(columns={0:'Carteira'}, inplace=True)
mean_retsimples['Mercado'] = ret_simples['^BVSP']
mean_retsimples.tail()
mean_retsimples.mean()
#Visualização da média diária do retorno simples

plt.figure(figsize=(18, 9));
plt.title('Desempenho da carteira (NOV/2021)', fontsize=20);
x, = plt.plot(mean_retsimples.Carteira, marker='^', color='blue', linewidth=2.5, label='Carteira');
y, = plt.plot(mean_retsimples.Mercado, marker='o', color='orange', linewidth=2.5, label='IBOVESPA');
plt.xlabel('Data', fontsize=17);
plt.ylabel('Retorno simples', fontsize=17);
plt.text(np.datetime64('2021-11-05'), -0.017, 'By: Invest Jr. - Yahoo Finance', fontsize=14);
plt.legend(fontsize=15, loc=2);
#Calculando a média diária do retorno acumulado

mean_retacum = ret_acum.mean(axis=1)
mean_retacum  = pd.DataFrame(mean_retacum.head())
mean_retacum.rename(columns={0:'Carteira'}, inplace=True)
mean_retacum['Mercado'] = ret_acum['^BVSP']
mean_retacum.tail()
mean_retacum.mean()
#Visualização da média diária do retorno acumulado

plt.figure(figsize=(18, 9));
plt.title('Desempenho acumulado da carteira (NOV/2021)', fontsize=20);
x, = plt.plot(mean_retacum.Carteira, marker='^', color='blue', linewidth=2.5, label='Carteira');
y, = plt.plot(mean_retacum.Mercado, marker='o', color='orange', linewidth=2.5, label='IBOVESPA');
plt.xlabel('Data', fontsize=17);
plt.ylabel('Retorno acumulado', fontsize=17);
plt.text(np.datetime64('2021-11-05'), 0.983, 'By: Invest Jr. - Yahoo Finance', fontsize=14);
plt.legend(fontsize=15, loc=2);<jupyter_output><empty_output><jupyter_text>Criando a tabela de desempenho<jupyter_code>preco_inicial = np.round(carteira1.iloc[:1, :12].values.T, 2)

preco_inicio = []

for i in preco_inicial:
  preco_inicio.append(f'R$ {str(i[0])}')

preco_inicio
preco_final = np.round(carteira1.iloc[-1:, :12].values.T, 2)

preco_fim = []

for i in preco_final:
  preco_fim.append(f'R$ {i[0]}')

preco_fim
#1º passo: obter o retorno simples da carteira

ret_simples.head().iloc[1:, :12]
#2º passo: calcular a média dos retornos esperados

#mean_carteira = np.round(np.mean(retorno_carteira.iloc[1:, :12]) * 100, 2)
mean_carteira = ret_simples.iloc[1:, :12].mean()
mean_carteira
#3º passo: calcular a covariância da carteira

cov_carteira = ret_simples.head().iloc[1:, :12].cov()
cov_carteira
#4º passo: definir os pesos

pesos_carteira = np.array([0.091, 0.054, 0.073, 0.058, 0.077, 0.042, 0.098, 0.056, 
                           0.053, 0.205, 0.036, 0.156])
pesos_carteira = np.round(pesos_carteira * 100, 2)

composicao = []

for i in pesos_carteira:
  composicao.append(f'{i}%')

composicao
#5º passo: retornos individuais

retornos_individuais = (pesos_carteira * mean_carteira) * 100
retornos_individuais = np.round(retornos_individuais, 2)

retornos_individual = []

for i in retornos_individuais:
  retornos_individual.append(f'{i}%')

retornos_individual
#6º passo: retorno da carteira

retorno_carteira = np.sum(pesos_carteira * mean_carteira)
retorno_carteira
#7º risco da carteira

risco_carteira = np.sqrt(np.dot(pesos_carteira.T, np.dot(cov_carteira, pesos_carteira)))
risco_carteira
ret_simples_mean = np.round(ret_simples.iloc[:, :12].head().mean() * 100, 2)

ret_ativo = []

for i in ret_simples_mean:
  ret_ativo.append(f'{i}%')

ret_ativo
#Tabela de desempenho

desempenho = pd.DataFrame(index=tickers[:12])
desempenho['Composição'] = composicao
desempenho['Preço Inicial'] = preco_inicio
desempenho['Preço Final'] = preco_fim
desempenho['Retorno do Ativo'] = ret_ativo
desempenho['Retorno na Carteira'] = retornos_individual

desempenho
#desempenho.to_csv('desempenho_invest.csv', sep=',');<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15478223740392827, 'fraction_numerical': 0.045046968403074296, 'mean_word_length': 6.4720893141945774, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '3', 'dir': 'jupyter-structured-clean-dedup', 'id': '502412', 'license': 'MIT', 'n_tokens_mistral': 2143, 'n_tokens_neox': 2005, 'n_words': 358, 'path': 'carteira_invest3.ipynb', 'repo_name': 'brunoalvesoliveira/analise-de-empresa', 'size': '4684'}