我是一个初学者,并且正在将一个使用最小方差优化的算法从scipy.minimize.optimize
(它没有正确执行)移动到CVXPY
.
R
是预期收益、C
覆盖率和rf
无风险利率。是沿着有效边界计算权w
重的最优权重和各种方法。r
当我运行下面的代码时,我得到:
ValueError: setting an array element with a sequence.
我相信 var 在这里有问题,但我不知道如何构造它。洞察力非常感谢。最重要的是,其余代码可能还有其他错误,因此如果您发现任何错误,请指出!
def solve_frontier(R, C, rf, context):
frontier_mean, frontier_var, frontier_weights = [], [], []
n = len(R)
w = cvx.Variable(n)
r = cvx.Parameter(sign='positive')
mean_1 = sum(R*w)
var = dot(dot(w, C), w)
penalty = (1/100)*abs(mean_1-r)
prob = cvx.Problem(cvx.Minimize(var + penalty),
[sum(w)-context.allowableMargin == 0])
r_vals = linspace(max(min(R), rf), max(R), num=20)
for i in range(20):
r.value = r_vals[i]
prob.solve()
frontier_mean.append(r)
frontier_var.append(compute_var(prob.value, C))
frontier_weights.append(prob.value)
print "status:", prob.status
return array(frontier_mean), array(frontier_var), frontier_weights