主要内容

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

此示例显示了如何使用a投资组合对象来在执行投资组合优化时直接处理半连续和基数约束。投资组合优化是指在一定的投资约束条件下,实现收益最大化或风险最小化的资产配置。这投资组合类是基于Markowitz Mean-Variance Optimization框架设计和实现的。均值-方差优化框架处理的问题,其中回报是预期的投资组合回报,风险是投资组合回报的方差。使用投资组合类,你可以最小化有效边界(EF)上的风险,最大化EF上的回报,最大化给定风险的回报,最小化给定回报的风险。你也可以用portfoliocvar.要么PortfolioMAD类,以指定半连续和基数约束。该优化问题集成了群约束、线性不等式约束、周转约束、跟踪误差约束等约束条件。这些约束被表述为非线性规划(NLP)问题,连续变量用资产权重表示 x

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

  • 一个断断续续的约束限制资产的分配。例如,您可以使用此约束将分配资产的分配重量限制在5%和50%之间。通过使用此约束,您可以避免非常小或大的位置,以最大限度地减少潮流和操作成本。为了数学方式制定这种类型的约束,一个二进制变量 v 是必要的, v 0要么1.的值0表示资产是不分配和值1表示资产被分配。数学形式是 v ≤. x ≤. 乌兰巴托 v ,在那里 v 0要么1.将这种类型的约束指定为“条件”BoundType投资组合类使用setBounds函数。

  • 一个基数限制限制最优配置中的资产数量,例如,对于一个包含100种资产的投资组合,您可以指定20到40种资产之间的最优投资组合配置。这种能力有助于限制位置的数量,从而降低操作成本。为了用数学公式表示这种类型的约束,二进制变量表示为 v 是必要的, v 0要么1.的值0表示资产是不分配和值1表示资产被分配。数学形式是 MinNumAssets ≤. σ. 1 NumAssets v ≤. maxnumassets. ,在那里 v 0要么1.通过设置该类型来指定此类约束“MinNumAssets”“MaxNumAssets”限制在投资组合类使用setminmaxnumassets.函数。

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

当半连续和基数限制用于组合优化时,这导致混合整数非线性编程问题(MINLP)。这投资组合类允许您配置这两个约束,具体地,使用半连续约束setBounds“条件”BoundType,基数约束使用setminmaxnumassets..这投资组合类自动生成数学问题并验证指定的约束。这投资组合Class还提供内置的Minlp求解器和灵活的求解器选项,供您使用求解器性能setsolverminlp.函数。

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

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

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

只有长位置创建一个完全投资的投资组合: x 0 x 1 .这些是由setDefaultConstraints.

p =组合('assetlist'AssetList,'Assetcovar',Assetcovar,“AssetMean”, AssetMean);p = setDefaultConstraints (p);

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

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

为两者绘制有效边界投资组合对象。

重量= estimateFrontier (p);wgtwithminweight = estmityfrontier(pwithminweight);图1);plotFrontier (p,重量);持有;Plotfrontier(Pwithminweight,WGTwithminwineight);持有离开;传奇(“基线组合”“与minWeight约束”“位置”“最佳”);

图中包含一个坐标轴。标题为\ befficient Frontier的轴包含两个类型为line的对象。这些对象表示具有最小权重约束的基线组合。

该图显示了这两个投资组合物体有几乎相同的有效边界。然而,具有最小重量要求的那个更实用,因为它防止了接近零的位置。

使用默认约束检查投资组合的最佳权重,以了解每个最佳分配的5%限制的资产数量低于5%。

toler = eps;总和(WGT> Toler&WGT <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 pwgtWithMinWeight]);网格包含(投资的比例)yticks(1:p.numassets);yticklabels(p.assetlist);标题(“资产配置”);传奇(“没有最小重量限制”“具有最小重量限制”“位置”“最佳”);

图中包含一个坐标轴。标题资产分配轴包含2个类型为bar的对象。这些对象表示没有最小权重限制,有最小权重限制。

只显示分配的资产。

IDX =(PWGT> TOLER)|(PWGTWEMININIGHT> TOLER);Barh([PWGT(IDX),PWGTWHININWEIGHT(IDX)]);网格包含(投资的比例)YTICKS(1:SUM(IDX));yticklabels(p.assetlist(idx));标题(“资产配置”);传奇(“没有最小重量限制”“具有最小重量限制”“位置”“最佳”);

图中包含一个坐标轴。标题资产分配轴包含2个类型为bar的对象。这些对象表示没有最小权重限制,有最小权重限制。

限制分配资产的最大数目

采用setminmaxnumassets.设置分配的资产的最大数目投资组合对象。假设你希望在最优投资组合中投资的资产不超过8种。用a投资组合对象,使用setminmaxnumassets.

pWithMaxNumAssets = setMinMaxNumAssets(p, [], 8);重量= estimateFrontier (p);wgtWithMaxNumAssets = estimateFrontier (pWithMaxNumAssets);plotFrontier (p,重量);持有;plotFrontier (pWithMaxNumAssets wgtWithMaxNumAssets);持有离开;传奇(“基线组合”“与MaxNumAssets约束”“位置”“最佳”);

图中包含一个坐标轴。标题为\ befficient Frontier的轴包含两个类型为line的对象。这些对象表示基线组合,带有MaxNumAssets约束。

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

pwgtwithmaxnum = estismsfrontierbyReturn(PwithamaxNumassets,TargetRetn);

画出两者的组成投资组合对象包含30个资产。

idx = (pwgt>toler) | (pwgtWithMaxNum>toler);barh ([pwgt (idx) pwgtWithMaxNum (idx)]);网格包含(投资的比例)YTICKS(1:SUM(IDX));yticklabels(p.assetlist(idx));标题(“资产配置”);传奇(“基线组合”“与MaxNumAssets约束”“位置”“最佳”);

图中包含一个坐标轴。标题资产分配轴包含2个类型为bar的对象。这些对象表示基线组合,带有MaxNumAssets约束。

总和(ABS(PWGT)> TOLER)
ans = 11

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

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

限制分配的最低资产数量

假设你想设定资产组合中分配的资产数量的上限和下限。采用setBounds指定允许的资产数量从5到10分配,分配重量不低于5%。

p1 = setminmaxnumasset(p,5,10);P1 = SetBounds(P1,0.05,“BoundType”'条件');

如果分配资产,则有必要明确确定该资产的最低重量要求。这是使用的setBounds与一个“条件”BoundType.否则,优化器无法评估分配了哪些资产,也无法制定MinNumAssets约束。有关详细信息,请参见下界定义为空或零的条件边界

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

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

图中包含一个坐标轴。标题为\ befficient Frontier的轴包含两个类型为line的对象。这些对象表示基线组合,带有MaxNumAssets约束。

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

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

numAssetsAllocated = 8;重量= 1 / numAssetsAllocated;p2 = setBounds(p,权重,权重,“BoundType”'条件');p2 = setminmaxnumasset(p2,numassetsallocated,numassetsallocated);

当任何一个,或任何组合“条件”BoundTypeMinNumAssets, 要么maxnumassets.时,将优化问题表述为混合整数非线性规划问题。这投资组合类基于指定的约束自动构建MINLP问题。

当与一个投资组合对象,您可以使用setsolverminlp.函数。在此示例中,而不是使用默认的minlp solver选项,而是自定义求解器选项以帮助融合问题。使用大量(50) 为了'maxterationsinactivecut'setsolverminlp.,而不是默认值30.MaxIterationsInactiveCut”.的值50有效地发现了最优资产配置的有效边界。

p2 = setsolverminlp(p2,“OuterApproximation”'maxterationsinactivecut', 50);

绘制基线和等权重投资组合的有效边界。

重量= estimateFrontier (p);WGT2 = estmityFrontier(P2);plotFrontier (p,重量);持有;plotFrontier (p2, wgt2);持有离开;传奇(“基线组合”“平等的加权组合”“位置”“最佳”);

图中包含一个坐标轴。标题为\ befficient Frontier的轴包含两个类型为line的对象。这些对象代表基线组合,相等的加权组合。

采用estimateFrontierByRisk为了优化特定的风险级别,在本例中0。,以确定什么样的配置能使投资组合的回报最大化。

targetrik = 0.05;PWGT = estmateFrontierByRisk(P,TargetRisk);PWGT2 = estmateFrontierByRisk(P2,TargetRisk);IDX =(PWGT> TOLER)|(PWGT2> TOLER);Barh([PWGT(IDX),PWGT2(IDX)]);网格包含('投资比例')YTICKS(1:SUM(IDX));yticklabels(p.assetlist(idx));标题(“资产配置”);传奇(“基线组合”“平等的加权组合”“位置”“最佳”);

图中包含一个坐标轴。标题资产分配轴包含2个类型为bar的对象。这些对象代表基线组合,相等的加权组合。

采用“条件”BoundTypeMinNumAssets, 和maxnumassets.与其他约束约束

您可以为a定义其他约束投资组合对象使用功能。这些其他约束投资组合对象,例如组,线性不等式,营业额和跟踪错误可以一起使用“条件”BoundType“MinNumAssets”, 和“MaxNumAssets”约束。例如,使用setTrackingError.

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

然后使用setminmaxnumassets.添加限制以限制投资的最大资产数量。

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

在这些前面指定的约束之上,使用setBounds添加约束以限制分配资产的权重。您可以在mixed中使用约束BoundType价值观,其中'简单的'意味着 ≤. x ≤. 乌兰巴托 “条件”意味着 x 0 要么 ≤. x ≤. 乌兰巴托

允许资产进入trackingPortBoundType价值“条件”在最佳分配中。

lb = zeros(q.numassets,1);UB =零(q.numasset,1)* 0.5;LB(ii)= 0.1;UB(ii)= 0.3;BULDTYPE = REPMAT(“简单”q.NumAssets 1);boundType (ii) =“条件”;q = setBounds(q, lb, ub,“BoundType”,边界);

绘制有效边界:

plotFrontier (q);

图中包含一个坐标轴。标题为\ befficient Frontier的轴包含一个类型为line的对象。

采用estimateFrontierByReturn找到最小化给定返回的风险的分配0.125

targetRetn = 0.0125;pwgt = estimateFrontierByReturn(q, targetRetn);

按重量展示资产分配。

idx = abs (pwgt) >每股收益;assetnames = q.AssetList ';资产= assetnames (idx);重量= pwgt (idx);resultAlloc = table(资产,权重)
结果脉冲=7×2表资产重量________ _______ {'jnj'} 0.1 {'mmm'} 0.19503 {'mo'} 0.1 {'pg'} 0.1 {'wmt'} 0.1 {'wmt'} 0.1 {'wmt'} 0.2212 {'xom'} 0.13527

另请参阅

|||

相关的例子

更多关于

外部网站