我正在尝试使用cvxpy编写投资组合优化问题。
initial_weights = [0.045, 0.035, 0.024, 0.028...]
rets = (np.log(data/data.shift(1))
w = cvx.Variable(38)
ret = np.sum(rets.mean()*w)*252
prob = cvx.Problem(cvx.Maximize(ret), [cvx.sum_entries(w)==1, w>0.02, w<0.06])
result = prob.solve()
求解后,w.value的形式为[[0.02],[0.02],[0.04] ...]
我想添加一个约束,其工作原理如下:
for i in range(len(initial_weights)):
abs(initial_weights[i]-w[1][i])>0.005
有人对如何将其包括在约束中有任何建议吗?
答案 0 :(得分:0)
如果要在for循环中添加约束,此answer似乎提供了解决方案。
令我惊讶的是,返回的值是一个数组数组,而不是值数组。如果确保rets.mean()
的维数正确,则w
应该是具有38个值的简单数组。在这种情况下,您的约束简化为
abs(initial_weights-w)>0.005