使用Excel Solver(GRG Nonlinear)求解最大组合标准差遇问题求助
搞定Excel Solver(GRG Nonlinear)最大化投资组合方差的问题
嘿,我来帮你排查下为啥用GRG Nonlinear求20维资产组合最大标准差(也就是最大化方差)没得到预期结果的问题~首先得提个关键点:从逻辑上来说,最大化投资组合波动的最优解,本来就应该是把所有权重全压在单个标准差最高的资产上——就是你列的资产里那个8.10%波动率的标的。如果没得到这个结果,大概率是模型构建、约束设置或者Solver参数出了问题,下面一步步来捋:
一、先确认方差公式没写错
投资组合方差的计算得准确,你可以用这两种方式:
- 用数组公式:
=MMULT(MMULT(TRANSPOSE(w), C), w)(Excel 365直接回车就行,旧版本要按Ctrl+Shift+Enter) - 或者用SUMPRODUCT嵌套:
=SUMPRODUCT(SUMPRODUCT(w, C), w)
别不小心写成标准差了哦(不过最大化方差和标准差的最优解是一样的,只是目标数值不同)。
二、检查约束条件是不是加错了
最大化方差的常规约束就两个(除非你有特殊需求):
- 所有权重加起来等于1:
SUM(w) = 1 - 如果不允许做空,就加
w_i >= 0;如果允许做空(能加杠杆),可以去掉这个约束,此时最优解可能是重仓高波动资产+做空低波动资产,波动会更大。
要是你加了多余约束(比如某个资产必须配多少、行业占比限制),那肯定会影响结果,先把额外约束去掉测试看看。
三、调整GRG Nonlinear的参数设置
GRG是局部优化算法,很容易踩坑:
- 初始权重别设平均:别给每个资产都设0.05的初始权重,这种平均分配的初始值很容易让算法陷在局部最优里。试试直接把高波动资产的初始权重设为1,其他设为0,再跑Solver,大概率能锁定最优解;或者多换几个不同的初始权重组合,避免漏过全局最优。
- 调小收敛精度:Solver默认的收敛精度可能太宽松,在「选项」里把“收敛”值从0.0001改成0.000001,让算法更精准地收敛到最优结果。
- 别加复杂非线性约束:GRG对线性约束的处理更稳,要是你加了非线性约束(比如某两个资产的权重乘积要满足某个值),可能会导致求解异常,尽量把约束都设成线性的。
四、协方差矩阵C得靠谱
协方差矩阵必须是对称正定的(正常资产的协方差矩阵都满足这个),你可以检查下:
- 对角线上的方差值是不是对应资产标准差的平方:比如第一个资产标准差5.11%,方差应该是(0.0511)²≈0.00261,别算错了。
- 用
=DETERM(C)算矩阵行列式,正定矩阵的行列式肯定是正数,如果结果为负或者零,说明你协方差矩阵算错了,得重新核对数据。
五、换进化算法试试
要是GRG模式死活不对,换成Solver的**进化算法(Evolutionary)**试试。进化算法更擅长找全局最优,尤其是当允许做空、解比较极端的时候,比GRG更容易找到正确结果。
你可以先拿2-3个资产的小例子测试,比如选标准差5%和8%的两个资产,验证模型和Solver设置没问题后,再推广到20维的情况,这样更容易定位问题。
内容的提问来源于stack exchange,提问作者JungleDiff
相关产品推荐
相关产品推荐

