我试图找到10只股票组合的有效边界。我首先加载数据(data),其中包括104个周期内10只股票的周收益。然后,我使用以下代码随机化权重来绘制任意投资组合:def random_weights(n):
a = np.random.rand(n)
return a/a.sum()
def initial_portfolio(data):
cov = data.cov()
expected_return = np.matrix(data.mean())
weights = np.matrix(random_weights(expected_return.shape[1]))
mu = weights.dot(expected_return.T)
sigma = np.sqrt(weights.dot(cov.dot(weights.T)))
var = weights.dot(cov.dot(weights.T))
return mu[0,0], sigma[0,0], var[0,0]#, cov, expected_return, weights
def initial_portfolio_other(data):
cov = np.cov(data)
expected_return = np.matrix(data.mean())
weights = np.matrix(random_weights(expected_return.shape[1]))
mu = weights.dot(expected_return.T)
sigma = np.sqrt(weights * cov.dot(weights.T))
var = weights * cov.dot(weights.T)
return cov, expected_return, weights
n_portfolios = 1000
means, stds, var = np.column_stack([
initial_portfolio(data)
for _ in range(n_portfolios)
])
plt.xlabel('Standard deviation')
plt.ylabel('Expected return')
plt.scatter(stds, means)
plt.axis([0.02, 0.035, 0.002,0.009])
plt.figure(figsize = (8,6))
plt.show()
到目前为止,代码运行良好,接下来我想通过最小化1000周收益的投资组合方差来找到有效边界。这是我目前掌握的密码
^{pr2}$
输出是1000个完全相同的方差的列表,当然还有1000组完全相同的权重。我知道少了点什么,但我就是不知道是什么。我一直看到其他人正在使用minimize函数中的args参数,但老实说,我不知道如何或通过什么来传递它。如果有人在python优化方面有任何经验,特别是在均值方差优化方面,我将非常感谢您的帮助。在