如何在CVXPY投资组合优化中设置行业权重上限约束?
投资组合行业权重上限优化实现
需要在现有均值-方差投资组合优化模型中,添加**单个行业权重上限30%**的约束,即任一行业在组合中的总占比不得超过0.3。以下是修改后的实现代码:
import numpy as np import cvxpy as cp np.random.seed(1) mu = np.abs(np.random.randn(10, 1)) Sigma = np.random.randn(10, 10) Sigma = Sigma.T.dot(Sigma) w = cp.Variable(10) sector = ['A','A','B','C','B','A','C','A','B','A'] gamma = cp.Parameter(nonneg=True) ret = mu.T @ w risk = cp.quad_form(w, Sigma) # 添加单个行业权重不超过30%的约束 sector_constraints = [] unique_sectors = list(set(sector)) for s in unique_sectors: # 筛选当前行业对应的资产索引 sector_asset_indices = [idx for idx, sec in enumerate(sector) if sec == s] # 约束该行业所有资产的权重总和 ≤ 0.3 sector_constraints.append(cp.sum(w[sector_asset_indices]) <= 0.3) # 整合所有约束并定义优化问题 prob = cp.Problem( cp.Maximize(ret - gamma * risk), [cp.sum(w) == 1, w >= 0] + sector_constraints )
关键说明
- 先提取所有唯一的行业类别,遍历每个行业筛选对应资产的索引
- 对每个行业,计算其下所有资产权重的总和,添加总和不超过0.3的约束
- 将行业约束与原有的「权重和为1」「权重非负」约束合并,构成完整的优化约束条件
内容的提问来源于stack exchange,提问作者Gautam Kakkar
相关产品推荐
相关产品推荐

