利用社会绩效衡量的投资组合优化
使用一个投资组合
目标是最小化方差,最大化回报,最大化公司董事会中女性的平均比例。同样的工作流程也可以应用于其他环境、社会和治理(ESG)标准,例如ESG评分、气候评分或温度评分。
这个例子的目标是找到有效的投资组合,使方差最小化,收益最大化,并使董事会中女性的平均比例最大化。为了找出一家公司董事会中女性的平均比例(钻压
)对于给定的投资组合,本例使用的是百分比的加权和钻压
对于每个单独的资产,权重是由投资组合中每个资产的投资金额给出的。通过定义的平均百分比钻压
这条路,钻压
函数是关于权重的线性函数。
加载组合数据
负载CAPMuniverse假设董事会中女性的比例。公司如下WoB = [0.2857;0.5;0.3;0.2857;0.3077;0.2727;...0.4167;0.2143;0.3;0.4167;0.3077);表(钻压,“VariableNames”, {钻压的},“RowNames”、资产(1:11))
ans =11×1表WoB ______ AAPL 0.2857 AMZN 0.5 CSCO 0.3 DELL 0.2857 EBAY 0.3077 GOOG 0.2727 HPQ 0.4167 IBM 0.2143 INTC 0.3 MSFT 0.4167 ORCL 0.3077
创建投资组合
对象
创建标准投资组合
对象并合并资产列表,并根据数据估计资产的收益矩。使用setDefaultConstraints
设置默认的均值-方差组合约束。这些限制要求完全投资、只做多的投资组合,其中非负权重之和必须为1
.
创建带有默认约束的投资组合p =投资组合(“AssetList”、资产(1:11));p = estimateAssetMoments(p, Data(:,1:11));p = setDefaultConstraints(p);
设置组约束
使用getGroups
包括组约束。第一组约束确保投资于混合零售(亚马逊和eBay)的权重至少为15%。第二组约束确保投资于计算机公司(苹果、戴尔和惠普)的权重在25%到50%之间。
组约束G = [0 1 0 0 1 0 0 0 0 0 0;1 0 0 1 0 0 1 0 0 0];LowG = [0.15;0.25);UpG = [Inf;0.5);p = setGroups(p, G, LowG, UpG);
的最小和最大百分比钻压
一个投资组合可以达到这些额外的组约束。这是使用estimateCustomObjectivePortfolio
函数以公司董事会中女性的平均比例为目标函数。
以平均钻压为目标objFun = @(x) WoB'*x;
找到最小平均百分比的投资组合钻压
使用组约束estimateCustomObjectivePortfolio
使用函数句柄objFun
.
董事会中女性的最低比例wgt_minWoB = estimateCustomObjectivePortfolio(p,objFun);minWoB = objFun(wgt_minWoB)
minWoB = 0.2462
在使用组约束的情况下,找到具有最大平均WoB百分比的投资组合estimateCustomObjectivePortfolio
使用name-value参数ObjectiveSense
设置为最大化
.
董事会中女性的最大比例wgt_maxWoB = estimateCustomObjectivePortfolio(p,objFun,...ObjectiveSense =“最大化”);maxWoB = objFun(wgt_maxWoB)
maxWoB = 0.4792
计算并绘制有效曲面
定义一个网格钻压
这样的百分比minWoB
targetWoB (1)
targetWoB (N)
maxWoB
.
N = 20;方格大小%targetwb = linspace(minWoB,maxWoB,N);
使用setInequality
的百分比钻压
作为约束条件。线性约束的系数应该是钻压
与每个资产相关的百分比,右边应该是目标投资组合钻压
.不等式的约定俗成是
.由于目标是最大化投资组合的WoB,那么目标WoB应该是投资组合WoB的下限。因此,系数的符号和右边的附加不等式应该翻转。
Ain = -WoB';bin = -minWoB;%从最小的WoB开始p = setInequality(p,Ain,bin);
对于每个目标钻压
,targetWoB(我)
,求有效均值-方差边界estimateFrontier
.在每次迭代中,的右边钻压
应改变投资组合约束,以确保返回的投资组合至少达到目标钻压
.该方法返回在均值-方差有效边界上具有a的投资组合的权重钻压
至少targetWoB(我)
.使用为每个目标获得的权重钻压
,计算投资组合的预期收益、风险和的百分比钻压
.
获得有效的表面值prsk = cell(N,1);pret = cell(N,1);pWoB = cell(N,1);为i = 1:N p.bInequality = - targetwb (i);pwgt = estimateFrontier(p,N);[prsk{i},pret{i}] = estimatePortMoments(p,pwgt);pWoB{i} = pwgt'*WoB;结束
画出有效投资组合。
绘制有效曲面scatter3 (cell2mat (prsk) cell2mat(现成的),cell2mat (pWoB))标题(“有效的投资组合”)包含(“风险级别”) ylabel (“预期收益”) zlabel (“WoB百分比”)
为了可视化投资组合的平均百分比之间的权衡钻压
而传统的均值-方差有效边界,是针对某一目标计算一组等值线图钻压
百分比使用plotContours
函数本地函数.
nC = 5;等高线图的百分比minContour = max(pWoB{1});% WoB值低于此返回值%重叠轮廓。%图等高线plotContours (p minContour maxWoB,数控,N)
排斥的例子
而不是要求投资组合的平均百分比的特定水平钻压
,目标是找到传统的均值-方差有效边界,同时排除WoB百分比低于给定阈值的资产。可以使用plotExclusionExample
函数本地函数.
移除WoB约束的平均百分比p.AInequality = [];p.bInequality = [];%排除资产的阈值集thresholdWoB = 0.25:0.05:0.40;% Plot排除示例plotExclusionExample (p,钻压、thresholdWoB N)
这种方法与前一节中介绍的方法之间的区别是非常明显的。要求所有资产都有钻压
至少35%的百分比给出了一个有效的边界,可以实现最多约
.另一方面,只要求投资组合的平均百分比钻压
36.57%是否有可能达到左右的回报
这几乎是剔除资产后回报率的2.5倍。为了更好地显示这两种方法之间的差异,计算包含百分比的两种方法在给定标准偏差下实现的最大回报钻压
对投资组合的需求。
方法1
在第一种方法中,排除带有钻压
百分比低于33%,找到最大收益的投资组合,其标准差不超过0.012
.
选择要排除的资产ub = 0 (p.NumAssets,1);ub(WoB >= 0.33) = 1;p.UpperBound = ub;在风险水平为0.012的情况下估算收益pwgt_exclude = estimateFrontierByRisk(p,0.012);ret_exclude = estimatePortReturn(p,pwgt_exclude)
Ret_exclude = 0.0011
将约束返回到原始投资组合p.UpperBound = [];
方法2
对于第二种方法,确保平均值钻压
百分比至少为33%,并找到最大收益的投资组合,其标准偏差不超过0.012
.
在投资组合中包含WoB约束p = addInequality(p,-WoB',-0.33);在风险水平为0.012的情况下估算收益pwgt_avgWoB = estimateFrontierByRisk(p,0.012);= estimatePortReturn(p,pwgt_avgWoB)
ret_avgWoB = 0.0028
将约束返回到原始投资组合p.AInequality = [];p.bInequality = [];
计算这两种方法之间的回报增加。
ret_increase = (ret_avgobo -ret_exclude)/ret_exclude
Ret_increase = 1.5202
这ret_increase
值表明,仅限制投资组合的平均WoB百分比而不排除某些资产的方法的回报率高出152%(对于相同的风险水平)。因此,在处理具有两个以上目标的问题时,排除不符合特定标准的资产可能不是最佳选择。相反,感兴趣的标准的加权和可能会显示更好的结果。
本地函数
函数[] = plotcontour (p,minWoB,maxWoB,nContour,nPort)等高线图的WoB级别集contourWoB = linspace(minWoB,maxWoB,nContour+1);计算并绘制contourWoB中每个值的有效边界图;持有在标签=字符串(nContour+1,1);为i = 1:nContour p.bInequality = -contourWoB(i);plotFrontier (p, nPort);标签(i) = sprintf(“% 6.2 f % %钻压”contourWoB(我)* 100);结束绘制“原始”均值-方差边界,即边界%,没有WoB要求p.AInequality = [];p.bInequality = [];plotFrontier (p, nPort);标签(i + 1) =“无WoB限制”;传奇(标签,“位置”,“西北”)举行从结束函数[] = plotexcluusiexample (p,WoB,thresholdWoB,...nPort)计算并绘制有效边界,不包括下面的资产% WoB阈值nT = length(thresholdWoB);图;持有在标签=字符串(nT+1,1);为i=1:nT ub = 0 (p.NumAssets,1);只选择WoB阈值以上的资产ub(WoB >= thresholdWoB(i)) = 1;p.UpperBound = ub;plotFrontier (p, nPort);标签(i) = sprintf(“% 6.2 f % %钻压”thresholdWoB(我)* 100);结束绘制“原始”均值-方差边界,即边界%,没有WoB阈值p.UpperBound = [];plotFrontier (p, nPort);标签(i + 1) =“无WoB限制”;传奇(标签,“位置”,“西北”)举行从结束
另请参阅
投资组合
|setBounds
|addGroups
|setAssetMoments
|estimateAssetMoments
|estimateBounds
|plotFrontier
|estimateFrontierLimits
|estimateFrontierByRisk
|estimatePortRisk
相关的例子
- 创建Portfolio对象
- 使用默认值处理组合约束
- 验证组合对象的组合问题
- 为投资组合对象的整个有效边界估计有效投资组合
- 估计投资组合对象的有效边界
- 建立可交易投资组合的后处理结果
- 基于半连续和基数约束的投资组合优化
- Black-Litterman组合优化使用金融工具箱™
- 基于基准的投资组合优化
- 使用财务工具箱™的投资组合优化示例
- 使用自定义目标使投资组合多样化