主要内容

利用社会绩效衡量的投资组合优化

使用一个投资组合目标是最小化方差,最大化回报,最大化公司董事会中女性的平均比例。同样的工作流程也可以应用于其他环境、社会和治理(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百分比”

图中包含一个轴对象。标题为Efficient portfolio的axes对象包含一个散点类型的对象。

为了可视化投资组合的平均百分比之间的权衡钻压而传统的均值-方差有效边界,是针对某一目标计算一组等值线图钻压百分比使用plotContours函数本地函数

nC = 5;等高线图的百分比minContour = max(pWoB{1});% WoB值低于此返回值%重叠轮廓。%图等高线plotContours (p minContour maxWoB,数控,N)

图中包含一个轴对象。标题为E f f i i i E nt的axis对象包含6个类型为line的对象。这些对象代表36.57% WoB, 38.84% WoB, 41.11% WoB, 43.38% WoB, 45.65% WoB,无WoB限制。

排斥的例子

而不是要求投资组合的平均百分比的特定水平钻压,目标是找到传统的均值-方差有效边界,同时排除WoB百分比低于给定阈值的资产。可以使用plotExclusionExample函数本地函数

移除WoB约束的平均百分比p.AInequality = [];p.bInequality = [];%排除资产的阈值集thresholdWoB = 0.25:0.05:0.40;% Plot排除示例plotExclusionExample (p,钻压、thresholdWoB N)

图中包含一个轴对象。标题为E f f i i i E nt的axis对象包含5个类型为line的对象。这些对象表示25.00% WoB, 30.00% WoB, 35.00% WoB, 40.00% WoB,无WoB限制。

这种方法与前一节中介绍的方法之间的区别是非常明显的。要求所有资产都有钻压至少35%的百分比给出了一个有效的边界,可以实现最多约 1 2 10 - 3. .另一方面,只要求投资组合的平均百分比钻压36.57%是否有可能达到左右的回报 3. 2 10 - 3. 这几乎是剔除资产后回报率的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限制”;传奇(标签,“位置”“西北”)举行结束

另请参阅

|||||||||

相关的例子

更多关于

外部网站

Baidu
map