python求方差、利用return函数_基于scipy-optimiz的python中Markowitz均值-方差优化

我试图找到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优化方面有任何经验,特别是在均值方差优化方面,我将非常感谢您的帮助。在

你可能感兴趣的:(python求方差,利用return函数)