Python 在我的有效边界上没有得到子弹的形状

Python 在我的有效边界上没有得到子弹的形状,python,pandas,portfolio,Python,Pandas,Portfolio,我试图从中复制有效的投资组合。据我所知,我准确地复制了他的代码,但我收到的预期回报和波动性的不同值。他的回报率在0.02到0.27之间,而我的回报率在-1.67到1.5之间。有人知道这里发生了什么吗 import pandas as pd import matplotlib.pyplot as plt import numpy as np aapl = pd.DataFrame(data = { 'Adj. Close' : [53.06, 53.35, 53.94, 54.5,

我试图从中复制有效的投资组合。据我所知,我准确地复制了他的代码,但我收到的预期回报和波动性的不同值。他的回报率在0.02到0.27之间,而我的回报率在-1.67到1.5之间。有人知道这里发生了什么吗

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np  

aapl = pd.DataFrame(data = {
    'Adj. Close' : [53.06, 53.35, 53.94, 54.5, 54.42]
})
cisco = pd.DataFrame(data = {
    'Adj. Close' : [15.75, 16.06, 16, 15.94, 16.04]
})
ibm = pd.DataFrame(data = {
    'Adj. Close' : [160.83, 160.17, 159.41, 157.58, 156.76]
})
amzn = pd.DataFrame(data = {
    'Adj. Close' : [179.03, 177.51, 177.61, 182.61, 178.56]
})

stocks = pd.concat([aapl, cisco, ibm, amzn], axis=1)
stocks.columns = ['aapl', 'cisco', 'ibm', 'amzn']
log_ret = np.log(stocks/stocks.shift(1))

np.random.seed(42)
num_ports = 6000
all_weights = np.zeros((num_ports, len(stocks.columns)))
ret_arr = np.zeros(num_ports)
vol_arr = np.zeros(num_ports)
sharpe_arr = np.zeros(num_ports)

for x in range(num_ports):

    weights = np.array(np.random.random(4))
    weights = weights/np.sum(weights)

    all_weights[x,:] = weights

    ret_arr[x] = np.sum( (log_ret.mean() * weights * 252))
    vol_arr[x] = np.sqrt(np.dot(weights.T, np.dot(log_ret.cov()*252, weights)))
    sharpe_arr[x] = ret_arr[x]/vol_arr[x]

print(all_weights[5451,:])
print('log_ret: {}'.format(log_ret.mean() * 252))
print('Return: {}'.format(ret_arr[5451]))
print('Volatility: {}'.format(vol_arr[5451]))

max_sr_ret = ret_arr[sharpe_arr.argmax()]
max_sr_vol = vol_arr[sharpe_arr.argmax()]

plt.figure(figsize=(12,8))
plt.scatter(vol_arr, ret_arr, c=sharpe_arr, cmap='viridis')
plt.colorbar(label='Sharpe Ratio')
plt.xlabel('Volatility')
plt.ylabel('Return')
plt.scatter(max_sr_vol, max_sr_ret, c='red', s=50)
plt.show()

你无法将你的结果与他的结果进行比较,因为你只使用了他的数据的小样本(head)。我完全按照你复制的代码运行,并且我的波动性介于.02到。27@SergeyBushmanov谢谢你指出这一点。我不认为他可能会使用更大的数据集。问题文本只会引起一个问题的范围内的投资组合的时刻。标题中的问题怎么样?它是完全分开的。你能发布一张你遇到问题的“子弹形”可行集的图片吗?如果你是,你不能将你的结果与他的结果进行比较,因为你只使用了他的数据的小样本(头部)。我完全按照你复制的代码运行,我的波动性在.02到。27@SergeyBushmanov谢谢你指出这一点。我不认为他可能会使用更大的数据集。问题文本只会引起一个问题的范围内的投资组合的时刻。标题中的问题怎么样?它是完全分开的。如果你有问题,你能贴一张“子弹形”可行集合的图片吗