投资组合优化与半连续和基数约束

这个例子说明了如何使用投资组合对象进行最优投资组合直接处理半和基数约束。投资组合优化认定,最大化回报或减少风险,受了一套投资约束的资产配置。的投资组合在金融工具箱™类的设计以及基于马科维茨均值 - 方差最优化框架实施。均值 - 方差最优化框架处理的问题,其中的回报是预期投资回报,而且风险组合收益的方差。使用投资组合类,可以最大限度地减少对有效前沿(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。的投资组合类自动生成数学问题并验证指定的约束条件。的投资组合类还提供内置的MINLP解决程序和灵活的解决程序选项,以便您使用setSolverMINLP函数。

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

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

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

创建仅多头头寸完全投资组合: x 0 总和 ( x ) = 1 。这些配置有setDefaultConstraints

P =组合(“AssetList”,资产列表,“AssetCovar”AssetCovar,'AssetMean',AssetMean);P = setDefaultConstraints(P);

假设你想避免很小的位置,以尽量减少客户流失和运营成本。添加其他约束来限制分配的岗位不低于5%,通过设置限制 x = 0 要么 x 0 05 使用setBounds与一个“条件”BoundType

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

绘制两者的有效前沿投资组合对象。

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

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

检查最优权重默认约束的投资组合,看看有多少资产是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]);网格xlabel(投资的比例)yticks(1:p.NumAssets);yticklabels(p.AssetList);标题('资产分配');传说(“没有分钟重量限制”,“有最小重量限制”,'位置','最好');

只显示分配的资产。

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

限制资产的最大数量来分配

使用setMinMaxNumAssets以设置分配资产的最大数量投资组合宾语。假设你想投资的最优投资组合不超过八个资产。要以做到这一点投资组合对象,用途setMinMaxNumAssets

pWithMaxNumAssets = setMinMaxNumAssets(P,[],8);WGT = estimateFrontier(P);wgtWithMaxNumAssets = estimateFrontier(pWithMaxNumAssets);plotFrontier(P,WGT);持有;plotFrontier (pWithMaxNumAssets wgtWithMaxNumAssets);持有;传说(“基线组合”,“与MaxNumAssets约束”,'位置','最好');

使用estimateFrontierByReturn发现在边境给定目标回报的风险最小化的分配。

pwgtWithMaxNum = estimateFrontierByReturn(pWithMaxNumAssets, targetRetn);

画出的两个组合物投资组合对象为30个资产的宇宙。

IDX =(pwgt> TOLER)|(pwgtWithMaxNum> TOLER);BARH([pwgt(IDX),pwgtWithMaxNum(IDX)]);网格xlabel(投资的比例)yticks(1:总和(IDX));yticklabels(p.AssetList(IDX));标题('资产分配');传说(“基线组合”,“与MaxNumAssets约束”,'位置','最好');

总和(ABS(pwgt)> TOLER)
ANS = 11

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

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

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

假设你想为资产组合分配的数量,同时设置上下限给出资产的宇宙。使用setBounds指定允许分配的资产数量为5到10,分配的权重不低于5%。

P1 = setMinMaxNumAssets(P,5,10);P1 =的setBounds(P1,0.05,'BoundType',“条件”);

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

绘制有效边界这个组合比较基准的投资组合,它只有默认的约束。

WGT = estimateFrontier(P);wgt1 = estimateFrontier(P1);plotFrontier(P,WGT);持有;plotFrontier (p1, wgt1);持有;传说(“基线组合”,“与MaxNumAssets约束”,'位置','最好');

资产配置为等权重组合

创建同时使用等权重的投资组合setBoundssetMinMaxNumAssets功能。

numAssetsAllocated = 8;重量= 1 / numAssetsAllocated;P2 =的setBounds(P,重量,重量,'BoundType',“条件”);p2 = setMinMaxNumAssets(p2, numAssetsAllocated, numAssetsAllocated);

当任何一个,或任意组合“条件”BoundType,MinNumAssets,或MaxNumAssets该优化问题是一个动态的混合整数非线性规划(MINLP)问题。的投资组合一流的自动构建基于指定约束MINLP问题。

当工作投资组合对象时,您可以选择使用三种求解一个setSolverMINLP函数。在本例中,没有使用默认的MINLP解决方案选项,而是自定义解决方案选项来帮助解决收敛问题。使用大量(50)“MaxIterationsInactiveCut”setSolverMINLP,而不是默认值30.对于'MaxIterationsInactiveCut”。价值50能够很好地找到最优资产配置的有效边界。

P2 = setSolverMINLP(P2,'OuterApproximation',“MaxIterationsInactiveCut”,50);

积为基线和等于加权组合的有效前沿。

WGT = estimateFrontier(P);wgt2 = estimateFrontier(P2);plotFrontier(P,WGT);持有;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:总和(IDX));yticklabels(p.AssetList(IDX));标题('资产分配');传说(“基线组合”,“平等的加权组合”,'位置','最好');

使用“条件”BoundType,MinNumAssetsMaxNumAssets与其他约束约束

您可以定义为其他约束投资组合对象使用功能。a的其他约束条件投资组合物体,如烷基,线性不等式,营业额,和跟踪误差可以连同被使用“条件”BoundType,'MinNumAssets''MaxNumAssets'限制。例如,使用指定的跟踪误差限制setTrackingError

ii = [15, 16, 20, 21, 23, 25, 27, 29, 30];资产的百分比指数跟踪组合,包括trackingPort(ⅱ)= 1 / numel(ⅱ);Q = setTrackingError(P,0.5,trackingPort);

然后使用setMinMaxNumAssets添加一个约束限制资产投资的最大数量。

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

在这些前面指定的约束之上,使用setBounds要添加约束来限制已分配资产的权重。您可以使用混合约束BoundType值,'简单'手段 x 乌兰巴托 “条件”手段 x = 0 要么 x 乌兰巴托

允许资产trackingPortBoundType“条件”在最优分配中。

LB =零(q.NumAssets,1);UB =零(q.NumAssets,1)* 0.5;磅(II)= 0.1;UB(II)= 0.3;boundType = repmat(“简单”,q.NumAssets,1);boundType(II)=“条件”;Q =的setBounds(Q,LB,UB,'BoundType',boundType);

绘制有效边界:

plotFrontier (q);

使用estimateFrontierByReturn发现在给定收益的风险降至最低配置0.125

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

按重量显示资产的分配。

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