这个例子说明了如何使用投资组合
对象进行最优投资组合直接处理半和基数约束。投资组合优化认定,最大化回报或减少风险,受了一套投资约束的资产配置。的投资组合
在金融工具箱™类的设计以及基于马科维茨均值 - 方差最优化框架实施。均值 - 方差最优化框架处理的问题,其中的回报是预期投资回报,而且风险组合收益的方差。使用投资组合
类,可以最大限度地减少对有效前沿(EF)的风险,最大限度地提高了EF回报,最大限度地为特定的风险回报,并尽量减少对给定收益的风险。您还可以使用PortfolioCVaR
要么PortfolioMAD
在金融工具箱™类指定半和基数约束。这样的优化问题的限制,例如基团,线性不等式,营业额,和跟踪误差约束集成。这些约束被配制为非线性规划(NLP)的问题连续变量表示为权重资产
。
半连续约束和基数约束是另外两种常见的投资组合约束,它们是通过添加二元变量进行数学表达的 。
一个断断续续的约束地限制资产的分配。例如,您可以使用此约束到分配资产的分配重量限制在5%至50%之间。通过使用此约束,你能避免非常小或大的位置,以尽量减少搅乳和运营成本。以数学制定这种类型的约束,一个二元变量
是必要的,
是0
要么1
。价值0
表明资产我未分配和值1
表明资产我分配。数学形式是
,其中
是0
要么1
。指定此类型约束为的“条件”
BoundType
在里面投资组合
类使用setBounds
函数。
一个基数约束限制资产的数量优化配置,例如,对于具有100个资产的宇宙组合时,可以指定20级40之间的资产的最佳组合配置。这种功能可以帮助限制位置的数量,从而降低运营成本。以数学制定这种类型的约束,二元变量表示为
都需要,哪里
是0
要么1
。价值0
表明资产我未分配和值1
表明资产我分配。数学形式是
,其中
是0
要么1
。属性指定此类型的约束'MinNumAssets'
和'MaxNumAssets'
约束的投资组合
类使用setMinMaxNumAssets
函数。
有关半和基数约束的更多信息,请参阅算法。
当半和基数约束被用于优化组合,这将导致混合整数非线性规划问题(MINLP)。的投资组合
类允许您配置这两个约束,特别是半连续约束setBounds
同“条件”
BoundType
使用,和基数约束setMinMaxNumAssets
。的投资组合
类自动生成数学问题并验证指定的约束条件。的投资组合
类还提供内置的MINLP解决程序和灵活的解决程序选项,以便您使用setSolverMINLP
函数。
这个例子演示了投资组合
具有半连续和基数约束的对象,并使用BlueChipStockMoments
数据集,它有30个资产。
负载BlueChipStockMomentsnumAssets =元素个数(AssetList)
numAssets = 30
创建仅多头头寸完全投资组合:
。这些配置有setDefaultConstraints
。
P =组合(“AssetList”,资产列表,“AssetCovar”AssetCovar,'AssetMean',AssetMean);P = setDefaultConstraints(P);
假设你想避免很小的位置,以尽量减少客户流失和运营成本。添加其他约束来限制分配的岗位不低于5%,通过设置限制
使用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约束”,'位置','最好');
创建同时使用等权重的投资组合setBounds
和setMinMaxNumAssets
功能。
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
,MinNumAssets
和MaxNumAssets
与其他约束约束您可以定义为其他约束投资组合
对象使用集
功能。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
值,'简单'
手段
和“条件”
手段
。
允许资产trackingPort
有BoundType
值“条件”
在最优分配中。
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的}