CVXPY缩小函数中的ValueError(最小方差优化)

时间:2015-09-12 07:52:17

标签: python quantitative-finance minimization convex-optimization cvxpy

我是一个初学者,并且正在将一个最小方差优化的算法从 scipy.minimize.optimize (效果不正确)转移到 CVXPY 即可。

R 是预期的回报, C 的封面和< strong> rf 无风险利率。 w 是最佳权重, r 沿着Efficient Frontier的各种方式计算权重。

当我运行下面的代码时,我得到:

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

0 个答案:

没有答案
相关问题