最適化されたポートフォリオを見つけるために、quantopian ブログから取り上げた Python コードを使用しています。
ここで詳しく説明されている演習全体を実行しました: https://blog.quantopian.com/markowitz-portfolio-optimization-2/
optima_portfolio 関数の最後の式まで、すべてが魅力的に機能します。
wt = solvers.qp(opt.matrix(x1 * S), -pbar, G, h, A, b)['x']
非常に厄介なエラーが発生する場所:
C:\Software\Anaconda2\envs\gl-env\lib\site-packages\cvxopt-1.1.8-py2.7-win-amd64.egg\cvxopt\coneprog.py 内qp(P, q, G, h, A, b, solver, initvals, **kwargs)
4466 'residual as dual infeasibility certificate': dinfres}
4467
-> 4468 return coneqp(P, q, G, h, None, A, b, initvals, options = options)
C:\Software\Anaconda2\envs\gl-env\lib\site-packages\cvxopt-1.1.8-py2.7-win-amd64.egg\cvxopt\coneprog.py 内coneqp(P, q, G, h, dims, A, b, initvals, kktsolver, xnewcopy, xdot, xaxpy, xscal, ynewcopy, ydot, yaxpy, yscal, **kwargs)
2241 # lmbdasq = lambda o lambda.
2242
-> 2243 if iters == 0: W = misc.compute_scaling(s, z, lmbda, dims)
2244 misc.ssqr(lmbdasq, lmbda, dims)
2245
C:\Software\Anaconda2\envs\gl-env\lib\site-packages\cvxopt-1.1.8-py2.7-win-amd64.egg\cvxopt\misc.py 内compute_scaling(s, z, lmbda, dims, mnl)
283
284 m = dims['l']
--> 285 W['d'] = base.sqrt( base.div( s[mnl:mnl+m], z[mnl:mnl+m] ))
286 W['di'] = W['d']**-1
287 lmbda[mnl:mnl+m] = base.sqrt( base.mul( s[mnl:mnl+m], z[mnl:mnl+m] ) )
ValueError: ドメイン エラー
負の数の平方根を取得しようとしているようです。これに対処する方法についてのアイデアはありますか?