Main Content

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

plotFrontier

绘制有效边界

说明

示例

[prsk,pret] = plotFrontier(obj) 针对 PortfolioPortfolioCVaRPortfolioMAD 对象使用默认的 10 个投资组合估计有效边界,并绘制相应的有效边界。有关使用这些不同对象时各自工作流的详细信息,请参阅 Portfolio 对象工作流PortfolioCVaR 对象工作流PortfolioMAD 对象工作流

示例

[prsk,pret] = plotFrontier(obj,NumPorts) 使用指定数量的投资组合估计有效边界,并绘制相应的有效边界。投资组合的数量由 NumPorts 定义。

示例

[prsk,pret] = plotFrontier(obj,PortWeights) 使用 PortWeights 估计有效投资组合的风险和收益,并使用这些投资组合绘制有效边界。此语法假设您提供有效的有效投资组合权重作为输入。PortWeights 是一个 NumAsset×NumPorts 矩阵。

示例

[prsk,pret] = plotFrontier(obj,PortRisk,PortReturn) 使用给定的风险和收益绘制有效边界。此语法假设您为有效投资组合风险和收益提供了有效的输入。PortRiskPortReturn 是大小相同的向量。

注意

plotFrontier 可处理上述多种输入格式。请记住,对于给定包含 NumAssets 个资产的资产池和包含 NumPorts 个投资组合的有效边界,投资组合权重是 NumAsset×NumPorts 矩阵,投资组合风险和收益是 NumPorts 元素列向量。

示例

全部折叠

给定一个投资组合 p,绘制有效边界。

load CAPMuniverse

p = Portfolio('AssetList',Assets(1:12));
p = estimateAssetMoments(p, Data(:,1:12),'missingdata',true);
p = setDefaultConstraints(p);
plotFrontier(p);

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.

根据 CAPMuniverse.mat 为 12 支股票创建一个 Portfolio 对象。

load CAPMuniverse
p0 = Portfolio('AssetList',Assets(1:12));
p0 = estimateAssetMoments(p0, Data(:,1:12),'missingdata',true);
p0 = setDefaultConstraints(p0);

使用 setMinMaxNumAssets 定义最多 3 项资产。

pWithMaxNumAssets = setMinMaxNumAssets(p0, [], 3);

使用 setBounds 定义下限、上限和为 'Conditional'BoundType

pWithConditionalBound = setBounds(p0, 0.1, 0.5,'BoundType', 'Conditional');

使用 plotFrontier 比较不同的投资组合对象。

figure;
plotFrontier(p0); hold on; 
plotFrontier(pWithMaxNumAssets); hold on; 
plotFrontier(pWithConditionalBound); hold off;
legend('p0', 'with Max 3 assets invested', ' with each asset weight 0 or [0.1, 0.5]', 'location', 'best');

Figure contains an axes object. The axes object with title Efficient Frontier, xlabel Standard Deviation of Portfolio Returns, ylabel Mean of Portfolio Returns contains 3 objects of type line. These objects represent p0, with Max 3 assets invested, with each asset weight 0 or [0.1, 0.5].

定义目标收益并使用 estimateFrontierByReturn 比较三个投资组合对象。

targetRetn = 2.0e-3;
pwgt0 = estimateFrontierByReturn(p0, targetRetn);
pwgtWithMaxNumAssets = estimateFrontierByReturn(pWithMaxNumAssets, targetRetn);
pwgtConditionalBound = estimateFrontierByReturn(pWithConditionalBound, targetRetn);

下表显示三个投资组合对象之间指定目标收益的最终分配。您可以看到,在 pwgtConditionalBound 中回避了 'AAPL''HPQ' 中的小头寸,并且在 pwgtWithMaxNumAssets 中只投资了三项资产。

result = table(p0.AssetList',pwgt0,pwgtWithMaxNumAssets,pwgtConditionalBound)
result=12×4 table
      Var1       pwgt0      pwgtWithMaxNumAssets    pwgtConditionalBound
    ________    ________    ____________________    ____________________

    {'AAPL'}    0.076791                  0                   0.1       
    {'AMZN'}           0                  0                     0       
    {'CSCO'}           0                  0                     0       
    {'DELL'}           0                  0                     0       
    {'EBAY'}           0                  0                     0       
    {'GOOG'}     0.44841            0.47297               0.44255       
    {'HPQ' }    0.022406        -8.3267e-17                     0       
    {'IBM' }     0.31139            0.34763               0.31592       
    {'INTC'}           0                  0                     0       
    {'MSFT'}     0.14101             0.1794               0.14153       
    {'ORCL'}           0                  0                     0       
    {'YHOO'}           0                  0                     0       

给定一个 PortfolioCVaR p,绘制有效边界。

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 ];
m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);

plotFrontier(p);

Figure contains an axes object. The axes object with title Efficient Frontier, xlabel Conditional Value-at-Risk of Portfolio, ylabel Mean of Portfolio Returns contains an object of type line.

给定一个 PortfolioMAD p,绘制有效边界。

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 ];
m = m/12;
C = C/12;

AssetScenarios = mvnrnd(m, C, 20000);

p = PortfolioMAD;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);

plotFrontier(p);

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

输入参数

全部折叠

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

数据类型: object

要在有效边界上获得的点数,指定为标量整数。

注意

如果没有为 NumPorts 指定任何值,则从隐藏属性 defaultNumPorts 获得默认值(默认值为 10)。如果 NumPorts = 1,则此函数返回隐藏属性 defaultFrontierLimit 指定的投资组合(当前默认值为 'min')。

数据类型: double

每个投资组合的投资组合收益标准差,指定为向量。

注意

PortRiskPortReturn 必须是大小相同的向量。

数据类型: double

每个投资组合的投资组合收益均值,指定为向量。

注意

PortRiskPortReturn 必须是大小相同的向量。

数据类型: double

有效边界上的最优投资组合,指定为 NumAsset×NumPorts 矩阵。

数据类型: double

输出参量

全部折叠

估计的有效投资组合风险(收益标准差),以 PortfolioPortfolioCVaRPortfolioMAD 输入对象 (obj) 向量的形式返回。

注意

  • 如果投资组合对象在 Name 属性中具有名称,该名称将显示为绘图的标题。否则,该绘图将被标记为“有效边界”。

  • 如果投资组合对象在 InitPort 属性中具有初始投资组合,初始投资组合会被绘图并标记。

  • 如果把投资组合的风险和收益用作输入,请确保风险在调用序列中排在前面。此外,如果投资组合风险和收益未按升序排序,则此方法将对它们进行排序。输出时,返回排序后的矩。

估计的有效投资组合收益,以 PortfolioPortfolioCVaRPortfolioMAD 输入对象 (obj) 向量的形式返回。

注意

  • 如果投资组合对象在 Name 属性中具有名称,该名称将显示为绘图的标题。否则,该绘图将被标记为“有效边界”。

  • 如果投资组合对象在 InitPort 属性中具有初始投资组合,初始投资组合会被绘图并标记。

  • 如果把投资组合的风险和收益用作输入,请确保风险在调用序列中排在前面。此外,如果投资组合风险和收益未按升序排序,则此方法将对它们进行排序。输出时,返回排序后的矩。

提示

您还可以使用圆点表示法来绘制有效边界。

[prsk, pret] = obj.plotFrontier;

版本历史记录

在 R2011a 中推出