Fronteira Eficiente em Python
! pip install yfinance
import pandas as pd
from pandas_datareader import data as pdr
import yfinance as yfin
import matplotlib.pyplot as plt
yfin.pdr_override()
# Carteira
assets = ['WMT', 'FB']
carteira = pdr.DataReader(assets, data_source='yahoo', start='2014-01-01')['Adj Close']
import numpy as np
# Rentabilidade da carteira Logaritimizada
rentabilidade=np.log(carteira/carteira.shift(1))
# Média anual
rentabilidade.mean()*250
# Covâriacia anual
rentabilidade.cov()*250
# Corr anual
rentabilidade.corr()
# Matriz da correlação
import seaborn as sn
a=rentabilidade.corr()
sn.heatmap(a, annot=True)
plt.show()
# Número de activos
num_activos = len(assets)
num_activos
pesos = np.random.random(num_activos)
pesos /=np.sum(pesos)
pesos
#Rentabilidade esperada da carteira
np.sum(pesos*carteira.mean())*250
#Volatilidade da carteira esperada
np.dot(pesos.T,np.dot(rentabilidade.cov()*250,pesos))
#Volatilidade da carteira esperada
np.sqrt(np.dot(pesos.T,np.dot(rentabilidade.cov()*250,pesos)))
carteira_rentabilidade1 = []
carteir_volatilidade2 = []
for x in range (1000):
pesos = np.random.random(num_activos)
pesos /= np.sum(pesos)
carteira_rentabilidade1.append(np.sum(pesos * rentabilidade.mean()) * 250)
carteir_volatilidade2.append(np.sqrt(np.dot(pesos.T,np.dot(rentabilidade.cov() * 250, pesos))))
carteira_rentabilidade1 = np.array(carteira_rentabilidade1)
carteir_volatilidade2 = np.array(carteir_volatilidade2)
carteira_rentabilidade1, carteir_volatilidade2
carteiras1 = pd.DataFrame({'Rentabilidade': carteira_rentabilidade1, 'Volatilidade': carteir_volatilidade2})
carteiras1.head()
carteiras1.tail()
# Gráfico da Fronteira Eficiente em Python
carteiras1.plot(x='Volatilidade', y='Rentabilidade', kind='scatter', figsize=(10, 6));
plt.xlabel('Volatilidae Esperada')
plt.ylabel('Rentabilidade Esperada')
Comentários
Enviar um comentário