主要内容

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

plotFrontier

绘制有效边界

说明

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

示例

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

示例

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

示例

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

注意

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

示例

[prsk,pret] = plotFrontier(ax,obj,___) 在目标坐标区 (ax) 中显示有效边界。在上述任一语法中,都可以将坐标区指定为可选的第一个输入参量。

示例

[prsk,pret] = plotFrontier(obj,___,Name=Value) 使用名称-值参量 Parent 指定用来显示有效边界的坐标区。

示例

[prsk,pret,h] = plotFrontier(___) 绘制有效边界,并额外返回一个图形对象或图形对象的数组 (h)。在创建有效边界后,可以使用 h 来修改有效边界的属性。

示例

示例

全部折叠

给定一个投资组合 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. This object represents Efficient Frontier.

给定一个投资组合 p,绘制有效边界并用 Parent 名称-值参量指定一个 axes 对象。

% Define the Portfolio object.
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(AssetMean=m,AssetCovar=C);
p = setDefaultConstraints(p);

使用 Parent 名称-值参量在左侧 y 轴上绘制 Portfolio 对象的 20 个有效投资组合。

fig = figure;
ax = newplot(fig);
yyaxis(ax,'left')
[~,~,h1] = plotFrontier(p,20,Parent=ax);

使用 Parent 名称-值参量在右侧 y 轴上绘制关联的 PortfolioCVaR 对象的 20 个有效投资组合。

% Create PortfolioCVaR object
AssetScenarios = mvnrnd(m,C,1000);
pCVaR = PortfolioCVaR(Scenarios=AssetScenarios,ProbabilityLevel=0.95);
pCVaR = setDefaultConstraints(pCVaR);

% Plot
yyaxis(ax,'right')
[~,~,h2] = plotFrontier(pCVaR,20,Parent=ax);
h2.Color = 'r';
h2.LineStyle = ':';
xlabel(ax,'Portfolio Returns Risk')
legend('Standard Deviation','CVaR')

Figure contains an axes object. The axes object with title Efficient Frontier, xlabel Portfolio Returns Risk, ylabel Mean of Portfolio Returns contains 2 objects of type line. These objects represent Standard Deviation, CVaR.

给定一个投资组合 p,绘制有效边界并使用可选的第一个输入参量指定 axes 对象。

% Define the Portfolio object.
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(AssetMean=m,AssetCovar=C);
p = p.setDefaultConstraints;

% Add an initial portfolio to a copy of the Portfolio object.
pInit = p;
pInit.InitPort = 1/4*ones(4,1);

使用不同的坐标区绘制两个 Portfolio 对象的有效边界。

figure
ax1 = axes('Position',[0.1 0.1 0.7 0.7]);
ax2 = axes('Position',[0.65 0.65 0.28 0.28]);

ax2 中为没有初始投资组合的 Portfolio 对象 (p) 绘制有效边界。

[~,~,h] = plotFrontier(ax2,p)
h = 
  Line (Efficient Frontier) with properties:

              Color: [0.0660 0.4430 0.7450]
          LineStyle: '-'
          LineWidth: 2
             Marker: 'none'
         MarkerSize: 6
    MarkerFaceColor: 'none'
              XData: [0.0769 0.0831 0.0994 0.1217 0.1474 0.1750 0.2068 0.2487 0.2968 0.3500]
              YData: [0.0590 0.0725 0.0859 0.0994 0.1128 0.1262 0.1397 0.1531 0.1666 0.1800]

  Show all properties

ax1 中为有初始投资组合的 Portfolio 对象 (pInit) 绘制有效边界。

[~,~,hInit] = plotFrontier(ax1,pInit)
hInit = 
  2×1 graphics array:

  Scatter    (Initial Portfolio)
  Line       (Efficient Frontier)

修改绘图属性。

h.LineStyle = '--';
hInit(1).MarkerFaceColor = 'r';

Figure contains 2 axes objects. Axes object 1 with title Efficient Frontier, xlabel Standard Deviation of Portfolio Returns, ylabel Mean of Portfolio Returns contains 2 objects of type line, scatter. These objects represent Efficient Frontier, Initial Portfolio. Axes object 2 with title Efficient Frontier, xlabel Standard Deviation of Portfolio Returns, ylabel Mean of Portfolio Returns contains an object of type line. This object represents Efficient Frontier.

根据 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        -5.2042e-17                   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                  0                     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. This object represents Efficient Frontier.

给定一个 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. This object represents Efficient Frontier.

输入参数

全部折叠

自 R2024a 起

(可选)显示有效边界图的坐标区对象,指定为您使用 axes 创建的 Axes 对象。可选参量 ax 可以位于任何输入参量组合之前。有效边界图显示在可选参量 ax 指定的坐标区上。如果您没有指定坐标区,则 MATLAB® 将在当前坐标区中绘图,如果不存在坐标区对象,它会新建一个。有关将 Axes 对象与 plotFrontier 结合使用的示例,请参阅使用 Axes 可选输入作为第一个输入显示有效边界图

数据类型: object

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

数据类型: object

(可选)在有效边界上绘制的投资组合的数目,指定为标量整数。

注意

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

数据类型: double

(可选)每个投资组合的投资组合收益标准差,指定为 NumPortfolios×1 列向量。

注意

PortfolioRisksPortfolioReturns 必须是大小相同的向量。风险和收益必须是与有效边界上的投资组合关联的有效值。

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

数据类型: double

(可选)每个投资组合的投资组合收益均值,指定为 NumPortfolios×1 列向量。

注意

PortfolioRisksPortfolioReturns 必须是大小相同的向量。风险和收益必须是与有效边界上的投资组合关联的有效值。

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

数据类型: double

(可选)有效边界上的最优投资组合,指定为 NumAssets×NumPortfolios 矩阵。

注意

PortfolioWeights 假定您提供有效边界上的有效投资组合。

数据类型: double

名称-值参数

全部折叠

示例: [prsk,pret]=plotFrontier(p,Parent=ax)

Name1=Value1,...,NameN=ValueN 形式指定必需参量对组,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须显示在其他参量的后面,但参量对组的顺序不重要。

自 R2024a 起

显示有效边界图的坐标区对象,指定为 Axes 对象。有效边界图显示在 Parent 名称-值参量指定的坐标区上。如果您没有指定坐标区,则 MATLAB 将在当前坐标区中绘图,如果不存在坐标区对象,它会新建一个。有关将 Axes 对象与 plotFrontier 结合使用的示例,请参阅使用 Axes 对象显示 Portfolio 和 PortfolioCVaR 对象的有效边界图

数据类型: object

输出参量

全部折叠

估计的有效投资组合风险,以 PortfolioPortfolioCVaRPortfolioMAD 输入对象 (obj) 的 NumPortfolios×1 向量的形式返回。

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

自 R2024a 起

有效边界图的图窗句柄,以图形(线图或散点图)对象的数组形式返回。可以使用 h 中的元素访问和修改有效边界图的属性。

注意

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

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

详细信息

全部折叠

提示

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

[prsk, pret] = obj.plotFrontier;

版本历史记录

在 R2011a 中推出

全部展开