主要内容

具有半连续和基数约束的投资组合优化

这个例子展示了如何使用文件夹对象在执行投资组合优化时直接处理半连续和基数约束。投资组合优化发现资产分配,最大化返回或最小化风险,以一系列的投资限制。的文件夹Financial Toolbox™中的Class是根据Markowitz均值 - 方差优化框架设计和实现的。平均方差优化框架处理返回的问题是预期的投资组合返回,风险是投资组合返回的方差。使用文件夹类,你可以最小化有效边界(EF)上的风险,最大化EF上的回报,最大化给定风险的回报,最小化给定回报的风险。你也可以用PortfolioCVaRPortfoliomad.Financial Toolbox™中的课程,用于指定半连续和基数约束。这种优化问题与组,线性不等式,营业额和跟踪误差约束等约束集成。这些约束被制定为非线性编程(NLP)问题,连续变量表示为资产权重 x

半连续约束和基数约束是另外两种常见的投资组合约束,它们通过添加二元变量在数学上得到表述 v

  • 一个断断续续的约束限制资产的分配。例如,您可以使用此约束将已分配资产的已分配权重限制在5%到50%之间。通过使用这个约束,您可以避免非常小或大的位置,以最大限度地减少搅拌和运营成本。用数学公式表示这种类型的约束,一个二元变量 v 是必要的, v 01.价值0表明资产未分配和值1表明资产分配。数学形式是 v x 乌兰巴托 v , 在哪里 v 01.将此类型的约束指定为a“条件”边界在里面文件夹类使用setBounds函数。

  • 一个基数约束限制最优配置中的资产数量,例如,对于一个包含100种资产的投资组合,您可以指定20到40种资产之间的最优投资组合配置。这种能力有助于限制位置的数量,从而降低操作成本。为了用数学公式表示这种类型的约束,二进制变量表示为 v 需要,在哪里 v 01.价值0表明资产未分配和值1表明资产分配。数学形式是 MinNumAssets 1 NumAssets v MaxNumAssets , 在哪里 v 01.属性来指定这种类型的约束'minnumassets''maxnumassets'约束的文件夹类使用setMinMaxNumAssets函数。

有关半连续和基数限制的更多信息,请参阅算法

当半连续约束和基数约束用于投资组合优化时,会导致混合整数非线性规划问题(MINLP)。的文件夹类允许您配置这两个约束,特别是使用setBounds“条件”边界和基数限制使用setMinMaxNumAssets.的文件夹类自动生成数学问题并验证指定的约束。的文件夹类还提供了内置的MINLP求解器和灵活的求解器选项,您可以使用setSolverMINLP函数。

这个例子演示了文件夹对象具有半连续和基数约束,并使用BlueChipStockMoments数据集,其中包含30个资产。

负载BlueChipStockMomentsnumAssets =元素个数(AssetList)
numAssets = 30

限制每个分配资产的最小权重

创建一个完全投资的投资组合,只有多头头寸: x 0 总和 x 1 .这些是由setDefaultConstraints

p = portfolio(“AssetList”AssetList,“AssetCovar”AssetCovar,“AssetMean”, AssetMean);p = setDefaultConstraints (p);

假设您希望避免非常小的头寸,以最大限度地减少流失和运营成本。通过设置约束,添加另一个约束,将分配的头寸限制为不小于5% x 0 x 0 05 使用setBounds与一个“条件”边界

pWithMinWeight = setBounds(p, 0.05,'Fundype'“条件”);

绘制两者的高效边界文件夹对象。

重量= estimateFrontier (p);wgtWithMinWeight = estimateFrontier (pWithMinWeight);图(1);plotFrontier (p,重量);持有;plotFrontier (pWithMinWeight wgtWithMinWeight);持有;传奇(“基线组合”“与minWeight约束”“位置”'最好');

从图中可以看出文件夹物体有几乎相同的有效边界。然而,具有最小重量要求的那个更实用,因为它防止了接近零的位置。

检查带有默认约束的投资组合的最优权重,看看在每个最优配置中有多少资产低于5%的上限。

托勒=每股收益;sum(重量>托勒&重量< 0.05)
ans =1×105 7 5 4 2 3 4 2 0 0

使用estimateFrontierByReturn为了在两种情况下的边界上获得目标回报,研究投资组合的组成。

targetRetn = 0.011;pwgt = estimateFrontierByReturn(p, targetRetn);pwgtWithMinWeight = estimateFrontierByReturn(pWithMinWeight, targetRetn);

绘制两者的组成文件夹30个资产宇宙的对象。

图(2);Barh([PWGT,PWGTWINININIL]);网格Xlabel('投资比例') yticks (1: p.NumAssets);yticklabels (p.AssetList);标题('资产分配');传奇('没有最小的重量限制'“具有最小重量限制”“位置”'最好');

只显示分配的资产。

idx = (pwgt>toler) | (pwgtWithMinWeight>toler);barh ([pwgt (idx) pwgtWithMinWeight (idx)]);网格Xlabel('投资比例') yticks (1: sum (idx));yticklabels (p.AssetList (idx));标题('资产分配');传奇('没有最小的重量限制'“具有最小重量限制”“位置”'最好');

限制分配的最大资产数量

使用setMinMaxNumAssets设置分配的资产的最大数目文件夹目的。假设您想要在最佳投资组合中投入的不超过八个资产。用一个文件夹对象,使用setMinMaxNumAssets

pwithmaxnumassets = setminmaxnumasset(p,[],8);重量= estimateFrontier (p);wgtwithmaxnumasset = estmityfrontier(pwitheraxnumassets);plotFrontier (p,重量);持有;plotFrontier (pWithMaxNumAssets wgtWithMaxNumAssets);持有;传奇(“基线组合”“与MaxNumAssets约束”“位置”'最好');

使用estimateFrontierByReturn要找到为给定目标返回最小化边界风险的分配。

pwgtWithMaxNum = estimateFrontierByReturn(pWithMaxNumAssets, targetRetn);

绘制两者的组成文件夹30个资产宇宙的对象。

IDX =(PWGT> TOLER)|(PWGTWEMAXNUM> TOLER);Barh([PWGT(IDX),PWGTWEMAXNUM(IDX)]);网格Xlabel('投资比例') yticks (1: sum (idx));yticklabels (p.AssetList (idx));标题('资产分配');传奇(“基线组合”“与MaxNumAssets约束”“位置”'最好');

总和(abs (pwgt) >托勒)
ans = 11.

计算已分配资产的总数,以验证最多只分配了8个资产。

总和(abs (pwgtWithMaxNum) >托勒)
ans = 8

限制分配资产的最小和最大数目

假设您希望在鉴于资产宇宙中,为投资组合分配资产数量的较低和上限。使用setBounds指定允许分配的资产数量为5到10,分配的权重不小于5%。

p1 = setMinMaxNumAssets(p, 5, 10); / /设置最小值p1 = setBounds(p1, 0.05,'Fundype'“条件”);

如果分配了资产,就必须清楚地定义该资产的最小权重要求。这是用setBounds与一个“条件”边界.否则,优化器无法评估分配哪些资产并不能制定该资产MinNumAssets约束。有关更多详细信息,请参阅下界定义为空或零的条件边界

绘制有效边界,将此投资组合与只有默认约束的基线投资组合进行比较。

重量= estimateFrontier (p);wgt1 = estimateFrontier (p1);plotFrontier (p,重量);持有;plotFrontier (p1, wgt1);持有;传奇(“基线组合”“与MaxNumAssets约束”“位置”'最好');

等加权投资组合的资产配置

使用两者创建一个相等加权的产品组合setBoundssetMinMaxNumAssets功能。

NumAstentEsAllocated = 8;重量= 1 / numAssetsAllocated;p2 = setbounds(p,weight,weight,'Fundype'“条件”);p2 = setMinMaxNumAssets(p2, numAssetsAllocated, numAssetsAllocated);

当任何一个,或任何组合“条件”边界MinNumAssets,或MaxNumAssets时,将优化问题表述为混合整数非线性规划问题。的文件夹类根据指定的约束自动构造MINLP问题。

当与一个文件夹对象,您可以使用使用的三个求解器之一setSolverMINLP函数。在本例中,不使用默认的MINLP求解器选项,而是自定义求解器选项以帮助解决收敛问题。使用一个大的数字(50)“MaxIterationsInactiveCut”setSolverMINLP,而不是默认值30.为了 'MaxIterationsInactiveCut”.价值50有效地发现了最优资产配置的有效边界。

p2 = setSolverMINLP (p2,'Outerpoxoximation'“MaxIterationsInactiveCut”, 50);

绘制基线和相等加权的投资组合的高效边界。

重量= estimateFrontier (p);wgt2 = estimateFrontier (p2);plotFrontier (p,重量);持有;PlotFrontier(P2,WGT2);持有;传奇(“基线组合”'平等加权组合'“位置”'最好');

使用estimateFrontierByRisk为了优化特定的风险级别,在本例中0。,确定分配最大化投资组合返回。

targetRisk = 0.05;pwgt = estimateFrontierByRisk(p, targetRisk);pwgt2 = estimateFrontierByRisk(p2, targetRisk);Idx = (pwgt>toler) | (pwgt2>toler);barh ([pwgt (idx) pwgt2 (idx)]);网格Xlabel(投资的比例) yticks (1: sum (idx));yticklabels (p.AssetList (idx));标题('资产分配');传奇(“基线组合”“平等的加权组合”“位置”'最好');

使用“条件”边界MinNumAssets,MaxNumAssets与其他约束约束

可以为。定义其他约束文件夹对象使用功能。a的其他约束条件文件夹对象,如组,线性不等式,翻转,跟踪误差可以与“条件”边界'minnumassets','maxnumassets'约束。例如,指定使用的跟踪错误约束setTrackingError

Ii = [15,16,20,21,23,25,27,29,30];在跟踪组合中包含资产的%索引trackingport(ii)= 1 / numel(ii);q = settrackingError(p,0.5,trackingport);

然后使用setMinMaxNumAssets添加约束以限制最大资产投资。

q = setMinMaxNumAssets(q, [], 8);

在这些前面指定的约束之上,使用setBounds添加约束以限制分配资产的权重。您可以在mixed中使用约束边界值,“简单”方法 x 乌兰巴托 “条件”方法 x 0 x 乌兰巴托

允许资产进入trackingPort边界价值“条件”在最优分配中。

磅= 0 (q。NumAssets,1);乌兰巴托= 0 (q。NumAssets,1)*0。5; lb(ii) = 0.1; ub(ii) = 0.3; boundType = repmat(“简单的”,q.numassets,1);BULDTYPE(ii)=“条件”;q = setBounds(Q,LB,UB,'Fundype', boundType);

绘制高效的边境:

plotFrontier (q);

使用estimateFrontierByReturn找出在给定收益的情况下使风险最小化的配置0.125

targetretn = 0.0125;Pwgt = estismsfrontierbybreturn(q,targetretn);

按权重显示资产分配情况。

idx = abs (pwgt) >每股收益;assetnames = q.AssetList ';资产= assetnames (idx);重量= pwgt (idx);resultAlloc = table(资产,权重)
resultAlloc =7×2表资产重  ________ _______ {' JNJ} 0.1 0.19503{‘嗯’}{‘莫’}0.1485{“微软”}0.1 0.1 {PG的}{“京东商城”}0.2212 0.13527 {XOM的}

另请参阅

|||

相关的例子

更多关于

外部网站