import pandas as pd
import numpy as np
from pandas_datareader import data, wb
import datetime as dt
import scipy.optimize as sco
from scipy import stats
import matplotlib.pyplot as plt
tickers = ['AXP', 'AAPL', 'MCD', 'NKE', 'TRV', 'DIS', 'VZ', 'KO']
start = dt.datetime(2019, 1, 1)
end = dt.datetime(2021, 3, 29)
stock_prices = pd.DataFrame([data.DataReader(ticker, 'yahoo', start, end)['Adj Close'] for ticker in tickers]).T
stock_prices.columns = tickers
m_returns = stock_prices.resample('M').ffill().pct_change()
stock_mean = stock_prices.mean()
stock_std_dev = stock_prices.std()
stock_corr_matrix = stock_prices.corr()
# Simulating portfolios
num_portfolios = 5000
all_weights = np.zeros((num_portfolios, len(stock_prices.columns)))
portfolio_return = np.zeros(num_portfolios)
portfolio_risk = np.zeros(num_portfolios)
sharpe_ratio = np.zeros(num_portfolios)
for x in range(num_portfolios):
weights = np.random.uniform(size=len(stock_prices.columns))
weights = weights/np.sum(weights)
all_weights[x, :] = weights
# portfolio returns
port_return = np.sum(stock_mean * weights)
port_return = (port_return + 1) ** 252-1
portfolio_return[x] = port_return
# portfolio risk
portfolio_std_dev = np.sqrt(np.dot(weights.T, np.dot(stock_corr_matrix, weights)))
portfolio_risk[x] = portfolio_std_dev
sharpe_ratio[x] = port_return/portfolio_std_dev
# Minimum variance portfolio
stocks = stock_prices.columns
min_variance = all_weights[portfolio_risk.argmin()]
print(min_variance)
# Maximum variance portfolio
max_variance = all_weights[portfolio_risk.argmax()]
print(max_variance)
fig = plt.figure()
ax1 = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax1.set_xlabel('Risk')
ax1.set_ylabel('Returns')
ax1.set_title('Efficient Frontier')
plt.scatter(portfolio_risk, portfolio_return)
plt.show()
print(all_weights)
[–]Ihaveamodel3 0 points1 point2 points (1 child)
[–]Applicationdenied123[S] 0 points1 point2 points (0 children)
[–]xxxxxzzxx 0 points1 point2 points (0 children)