Main Content

本页翻译不是最新的。点击此处可查看最新英文版本。

estimatePortMoments

估计 Portfolio 对象的投资组合收益矩

说明

示例

[prsk,pret] = estimatePortMoments(obj,pwgt) 估计 Portfolio 对象的投资组合收益矩。有关工作流的详细信息,请参阅 Portfolio 对象工作流

投资组合矩的估计特定于均值-方差投资组合优化,用于计算投资组合收益的均值和标准差(即方差的平方根)。

示例

全部折叠

给定投资组合 p,使用 estimatePortMoments 函数来显示有效投资组合的风险和收益范围。

m = [ 0.05; 0.1; 0.12; 0.18 ];
C = [ 0.0064 0.00408 0.00192 0; 
      0.00408 0.0289 0.0204 0.0119;
      0.00192 0.0204 0.0576 0.0336;
      0 0.0119 0.0336 0.1225 ];
 
p = Portfolio;
p = setAssetMoments(p, m, C);
p = setDefaultConstraints(p);
pwgt = estimateFrontierLimits(p);

[prsk, pret] = estimatePortMoments(p, pwgt);
disp([prsk, pret]);
    0.0769    0.0590
    0.3500    0.1800

为三项资产创建一个 Portfolio 对象。

AssetMean = [ 0.0101110; 0.0043532; 0.0137058 ];
AssetCovar = [ 0.00324625 0.00022983 0.00420395;
               0.00022983 0.00049937 0.00019247;
               0.00420395 0.00019247 0.00764097 ];  
p = Portfolio('AssetMean', AssetMean, 'AssetCovar', AssetCovar);
p = setDefaultConstraints(p);           

使用 setBoundsi=1,...NumAssets 的所有资产设置半连续约束,使 xi=00.02<=xi<=0.5

p = setBounds(p, 0.02, 0.5,'BoundType', 'Conditional', 'NumAssets', 3);                    

当使用 Portfolio 对象时,setMinMaxNumAssets 函数支持您为纯多头投资组合设置基数约束。这为 Portfolio 对象设置了基数约束,其中满足非零半连续约束的已分配资产总数介于 MinNumAssetsMaxNumAssets 之间。通过设置 MinNumAssets=MaxNumAssets=2,仅对投资组合的三项资产中的两项进行了投资。

p = setMinMaxNumAssets(p, 2, 2);  

使用 estimatePortMoments 估计 Portfolio 对象的投资组合收益矩。

pwgt = estimateFrontierLimits(p);
[prsk, pret] = estimatePortMoments(p, pwgt)
prsk = 2×1

    0.0324
    0.0695

pret = 2×1

    0.0072
    0.0119

estimatePortMoments 函数使用 MINLP 求解器来求解此问题。使用 setSolverMINLP 函数来配置 SolverType 和选项。

p.solverOptionsMINLP
ans = struct with fields:
                           MaxIterations: 1000
                    AbsoluteGapTolerance: 1.0000e-07
                    RelativeGapTolerance: 1.0000e-05
                  NonlinearScalingFactor: 1000
                  ObjectiveScalingFactor: 1000
                                 Display: 'off'
                           CutGeneration: 'basic'
                MaxIterationsInactiveCut: 30
                      ActiveCutTolerance: 1.0000e-07
                    IntMainSolverOptions: [1x1 optim.options.Intlinprog]
    NumIterationsEarlyIntegerConvergence: 30
                     ExtendedFormulation: 0
                            NumInnerCuts: 10
                     NumInitialOuterCuts: 10

Portfolio 对象能够找到与指定的目标风险相关的有效投资组合。

加载投资组合

加载一个 30 支股票的预期收益向量和协方差矩阵。

load StockStats

使用默认约束创建 Portfolio 对象

Portfolio 对象的默认约束是,它是一个纯多头投资组合并且满仓。还可以使用很多其他约束类型。

P = Portfolio('mean',expRet,'covar',expCov);
P = setDefaultConstraints(P);

绘制完整有效边界

plotFrontier 函数与 Portfolio 对象结合使用以可视化完整边界。还存在其他函数可以让您沿着边界查看特定投资组合。

P.plotFrontier

Figure contains an axes object. The axes object with title Efficient Frontier, xlabel Standard Deviation of Portfolio Returns, ylabel Mean of Portfolio Returns contains an object of type line.

捕获投资组合风险和收益的上界和下界

它有助于了解沿有效边界投资组合矩的上限和下限是什么。通过此信息可确定可行目标有哪些。将 estimateFrontierLimits 函数与 Portfolio 对象结合使用以确定这些极值的权重。然后,您可以对 Portfolio 对象使用 estimatePortMoments 函数来计算极限矩。

P_Weights1 = P.estimateFrontierLimits;
[P_risklimits, P_returnlimits] = P.estimatePortMoments(P_Weights1)
P_risklimits = 2×1

    0.0786
    0.2868

P_returnlimits = 2×1

    0.0954
    0.2370

使用目标收益估计有效投资组合

在可行域中的某个位置为投资组合选择一个目标收益。您可以使用 estimateFrontierByRisk 估计投资组合中的各投资的比例,然后使用 estimatePortMoments 确定它的矩。

targetReturn = 0.15;

P_Weights2 = P.estimateFrontierByReturn(targetReturn);
[P_risk2, P_return2] = P.estimatePortMoments(P_Weights2)
P_risk2 = 0.1068
P_return2 = 0.1500

收益与 targetReturn 值匹配,风险与有效边界图一致。

使用目标风险估计有效投资组合

Portfolio 对象能够使用指定目标风险找到有效投资组合。

targetRisk = 0.2;

P_Weights3 = P.estimateFrontierByRisk(targetRisk);
[P_risk3, P_return3] = P.estimatePortMoments(P_Weights3)
P_risk3 = 0.2000
P_return3 = 0.2182

estimateFrontierByReturnestimateFrontierByRisk 函数的另一个有用的功能是,在您指定了不可行(太高或太低)目标时触发特定事件。在这种情况下,这些函数提供一条警告消息来给出最佳方案。

输入参数

全部折叠

投资组合的对象,使用 Portfolio 对象指定。有关创建 Portfolio 对象的详细信息,请参阅 Portfolio

数据类型: object

投资组合的集合,指定为 NumAssets×NumPorts 矩阵,其中 NumAssets 是领域中的资产数量,NumPorts 是投资组合集合中的投资组合数量。

数据类型: double

输出参量

全部折叠

pwgt 中的每个投资组合的投资组合收益标准差估计,以 NumPorts 向量形式返回。

prsk 输入对象 (obj) 返回 Portfolio。如果提供给 Portfolio 对象的资产收益是日收益,则投资组合标准差的输出 (prsk) 也按日收益计算。

pwgt 中的每个投资组合的投资组合收益均值估计,以 NumPorts 向量形式返回。

pret 输入对象 (obj) 返回 Portfolio。如果提供给 Portfolio 对象的资产收益是日收益,则收益的输出 (pret) 也按日收益计算。

提示

您还可以使用圆点表示法来估计投资组合收益矩。

[prsk, pret] = obj.estimatePortMoments(pwgt);

版本历史记录

在 R2011a 中推出