我能夠使用cvxopt計算的有效邊界,每個文檔:如何使用cvxopt進行帶有約束的均值方差優化?
http://cvxopt.org/examples/book/portfolio.html
但是,我無法弄清楚如何添加一個約束,以便有在某一特定資產的最高上限允許體重。這可能使用cvxopt?
這是我的代碼到目前爲止產生一個有效的邊界沒有約束,除非我相信b,它將權重的最大總和設置爲1.我不確定G,h,A和mus做什麼,而這些文檔並沒有真正解釋。 mus的公式中的10 **(5.0 * t/N-1.0)來自哪裏?
from math import sqrt
from cvxopt import matrix
from cvxopt.blas import dot
from cvxopt.solvers import qp, options
# Number of assets
n = 4
# Convariance matrix
S = matrix([[ 4e-2, 6e-3, -4e-3, 0.0 ],
[ 6e-3, 1e-2, 0.0, 0.0 ],
[-4e-3, 0.0, 2.5e-3, 0.0 ],
[ 0.0, 0.0, 0.0, 0.0 ]])
# Expected return
pbar = matrix([.12, .10, .07, .03])
# nxn matrix of 0s
G = matrix(0.0, (n,n))
# Convert G to negative identity matrix
G[::n+1] = -1.0
# nx1 matrix of 0s
h = matrix(0.0, (n,1))
# 1xn matrix of 1s
A = matrix(1.0, (1,n))
# scalar of 1.0
b = matrix(1.0)
N = 100
mus = [ 10**(5.0*t/N-1.0) for t in range(N) ]
options['show_progress'] = False
xs = [ qp(mu*S, -pbar, G, h, A, b)['x'] for mu in mus ]
returns = [ dot(pbar,x) for x in xs ]
risks = [ sqrt(dot(x, S*x)) for x in xs ]
#Efficient frontier
plt.plot(risks, returns)