关于cvxopt求解最优夏普比率投资组合的QP参数疑问
x1 * S并去掉q参数 你好!这个问题的核心是理解最大化夏普比率与之前计算有效前沿的二次规划(QP)问题之间的联系,我来一步步拆解:
1. 先回顾两个核心问题
有效前沿的QP问题:之前循环调用的
solvers.qp(S, -q*pbar, G, h, A, b),是在最小化目标函数:(1/2)w^T S w - q * pbar^T w这里的
q是风险容忍因子——q越大,越偏向追求高收益,组合越激进。每个q对应有效前沿上的一个点(给定风险下的最高收益,或给定收益下的最低风险)。最优夏普比率的目标:我们要找有效前沿上使得**夏普比率(Sharpe Ratio)**最大的点。假设无风险收益率为0,夏普比率定义为:
SR = (pbar^T w) / sqrt(w^T S w)最大化
SR等价于最大化(pbar^T w)^2 / (w^T S w)(平方根是单调递增函数,不影响最优解的位置)。
2. 代码中x1的含义
你已经知道,代码通过polyfit拟合有效前沿的σ(μ)曲线(σ是波动率,μ是收益率),得到二次方程σ = m1[0]μ² + m1[1]μ + m1[2]。
为了最大化μ/σ,对μ求导并令导数为0,推导后得到最优收益率:
x1 = np.sqrt(m1[2] / m1[0])
这个x1就是有效前沿上夏普比率最高的点对应的目标收益率。
3. 为何用x1 * S且去掉q?
现在我们需要找到对应μ=x1的最优组合(也就是有效前沿上收益率为x1时的最小方差组合,同时满足权重非负和总和为1)。
代码中的QP调用:
wt = solvers.qp(opt.matrix(x1 * S), -pbar, G, h, A, b)['x']
对应的目标函数是:
(1/2)w^T (x1*S)w - pbar^T w
我们可以从两个角度理解:
角度1:等价于最大化调整后的收益-方差目标
这个目标函数可以变形为:
maximize pbar^T w - (x1/2)w^T S w
当我们对这个函数求导并令导数为0时,得到:
pbar - x1*S*w = 0 → w = S⁻¹ pbar / x1
这正好是无约束条件下最优夏普比率组合的形式(无约束时最优组合与S⁻¹ pbar成正比)。加上权重和为1、非负的约束后,得到的就是考虑现实约束的最优夏普比率组合。
角度2:连接有效前沿与最优夏普比率的关系
有效前沿上的每个点都对应一个q值,而x1是最优夏普比率对应的收益率。通过将目标函数中的S替换为x1*S,并去掉q参数,我们相当于在求解一个特殊的QP问题:它的解恰好落在有效前沿上夏普比率最高的点,因为x1已经编码了最优收益率与方差的关系,确保这个QP的解满足最大化μ/σ的条件。
一句话总结
这个QP调用本质是将“最大化夏普比率”的问题转化为一个等价的二次规划问题,x1*S的作用是将最优收益率的信息融入目标函数,从而直接求解出考虑权重约束的最优夏普比率组合。
内容的提问来源于stack exchange,提问作者Wei




