Main Content

创建 Portfolio 对象

要创建完全指定的均值-方差投资组合优化问题,请使用 Portfolio 实例化 Portfolio 对象。有关使用 Portfolio 对象时的工作流的信息,请参阅 Portfolio 对象工作流

语法

使用 Portfolio 创建 Portfolio 类对象的实例。您可通过几种方式使用 Portfolio。要使用 Portfolio 对象创建投资组合优化问题,最简单的语法是:

p = Portfolio;
此语法可创建一个 Portfolio 对象 p,其中所有对象属性都为空。

Portfolio 对象也接受用一系列参量名称-值对组参量指定属性及其值。Portfolio 对象接受采用以下一般语法的输入作为公共属性:

	p = Portfolio('property1', value1, 'property2', value2, ... );

如果已有 Portfolio 对象,则该语法允许且仅允许 Portfolio 的第一个参量为已有对象,后续参量名称-值对组参量则表示要添加或修改的属性。例如,假定已有 Portfolio 对象 p,一般语法为:

p = Portfolio(p, 'property1', value1, 'property2', value2, ... );

输入参量名称不区分大小写,但必须完整指定。此外,部分属性可采用简写参量名称指定(请参阅 简写属性名称)。Portfolio 对象会从输入中检测问题的维度,一旦确定,则对后续输入进行各种标量或矩阵扩展运算,从而简化构建问题的整个过程。此外,Portfolio 对象是值对象,因此,假定有投资组合 p,则以下代码将创建一个不同于 p 的新对象 q

q = Portfolio(p, ...)

投资组合问题充分性

如果满足下面两个条件,则均值-方差投资组合优化可由 Portfolio 对象完整指定:

  • 必须指定资产收益矩,以使属性 AssetMean 包含资产收益的有效有限均值向量,且属性 AssetCovar 包含资产收益协方差的有效对称正半定矩阵。

    要满足第一个条件,可以设置与资产收益矩相关的属性。

  • 可行投资组合集必须是非空紧凑集,其中紧凑集是封闭且有界的。

    要满足第二个条件,需要由多个属性定义不同类型的约束以形成一组可行投资组合。由于此类集合必须是有界的,因此可以施加显式或隐式约束,您可以使用 estimateBounds 等函数来确保恰当地表示问题。

虽然均值-方差投资组合优化的一般充分条件不止这两个条件,但在 Financial Toolbox™ 中实现的 Portfolio 对象会隐式处理这些额外条件。有关均值-方差投资组合优化的马科维茨模型的详细信息,请参阅 Portfolio Optimization

Portfolio 函数示例

如果您创建一个不带输入参量的 Portfolio 对象 p,那么您可以使用 disp 显示该对象:

p = Portfolio;
disp(p) 
 Portfolio with properties:

          BuyCost: []
         SellCost: []
     RiskFreeRate: []
        AssetMean: []
       AssetCovar: []
    TrackingError: []
     TrackingPort: []
         Turnover: []
      BuyTurnover: []
     SellTurnover: []
             Name: []
        NumAssets: []
        AssetList: []
         InitPort: []
      AInequality: []
      bInequality: []
        AEquality: []
        bEquality: []
       LowerBound: []
       UpperBound: []
      LowerBudget: []
      UpperBudget: []
      GroupMatrix: []
       LowerGroup: []
       UpperGroup: []
           GroupA: []
           GroupB: []
       LowerRatio: []
       UpperRatio: []
     MinNumAssets: []
     MaxNumAssets: []
        BoundType: [] 

借助列出的方法,您可以使用 Portfolio 对象创建投资组合优化问题。set 函数提供了其他的方法来设置和修改 Portfolio 对象中的属性集合。

通过单步设置使用 Portfolio 函数

在变量 mC 中给定资产收益的均值和协方差的情况下,您可以使用 Portfolio 对象来直接设置“标准”投资组合优化问题:

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, ...
'lowerbudget', 1, 'upperbudget', 1, 'lowerbound', 0)
p = 

  Portfolio with properties:

          BuyCost: []
         SellCost: []
     RiskFreeRate: []
        AssetMean: [4×1 double]
       AssetCovar: [4×4 double]
    TrackingError: []
     TrackingPort: []
         Turnover: []
      BuyTurnover: []
     SellTurnover: []
             Name: []
        NumAssets: 4
        AssetList: []
         InitPort: []
      AInequality: []
      bInequality: []
        AEquality: []
        bEquality: []
       LowerBound: [4×1 double]
       UpperBound: []
      LowerBudget: 1
      UpperBudget: 1
      GroupMatrix: []
       LowerGroup: []
       UpperGroup: []
           GroupA: []
           GroupB: []
       LowerRatio: []
       UpperRatio: []
     MinNumAssets: []
     MaxNumAssets: []
        BoundType: []
LowerBound 属性值进行标量扩展,因为 AssetMeanAssetCovar 提供问题的维度。

您可以将圆点表示法与 plotFrontier 函数结合使用。

p.plotFrontier

通过多步设置使用 Portfolio 函数

您也可以用变量 mC 指定资产收益的均值和协方差(这也表明参量名称不区分大小写),来创建同样的“标准”投资组合优化问题:

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 = Portfolio(p, 'assetmean', m, 'assetcovar', C);
p = Portfolio(p, 'lowerbudget', 1, 'upperbudget', 1);
p = Portfolio(p, 'lowerbound', 0);
 
plotFrontier(p)

这种方法之所以有效,是因为对 Portfolio 的调用是按此特定顺序进行的。在本例中,初始化 AssetMeanAssetCovar 的那次调用确定了问题的维度。如果您最后执行这次调用,则必须显式设置 LowerBound 属性的维度,如下所示:

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 = Portfolio(p, 'LowerBound', zeros(size(m)));
p = Portfolio(p, 'LowerBudget', 1, 'UpperBudget', 1);
p = Portfolio(p, 'AssetMean', m, 'AssetCovar', C);
 
plotFrontier(p)

如果未指定 LowerBound 的大小,而是输入标量参量,则 Portfolio 对象假设您正在定义单资产问题,并在设置包含四个资产的资产矩的调用中产生错误。

简写属性名称

Portfolio 对象支持部分参量名称简写,以替代 Portfolio 对象某些属性的较长参量名称。例如,除了 'assetcovar'Portfolio 对象也支持使用名称 'covar'(不区分大小写)设置 Portfolio 对象的 AssetCovar 属性。每个简写参量名称对应于 Portfolio 对象的一个属性。唯一的例外是简写参量名称 'budget',它既可以表示 LowerBudget 属性,也可以表示 UpperBudget 属性。当使用 'budget' 时,则 LowerBudgetUpperBudget 属性设置为相同的值以构成等式预算约束。

简写属性名称

简写参量名称

等效参量 / 属性名称

ae

AEquality

ai

AInequality

covar

AssetCovar

assetnamesassets

AssetList

mean

AssetMean

be

bEquality

bi

bInequality

group

GroupMatrix

lb

LowerBound

nnum

NumAssets

rfr

RiskFreeRate

ub

UpperBound

budget

UpperBudgetLowerBudget

例如,对 Portfolio 的此调用对属性使用以下快捷方式,等效于前面的示例:

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('mean', m, 'covar', C, 'budget', 1, 'lb', 0);
plotFrontier(p)

直接设置 Portfolio 对象属性

虽然不推荐,但您可以直接设置属性,然而系统不会对输入进行错误检查:

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.NumAssets = numel(m);
p.AssetMean = m;
p.AssetCovar = C;
p.LowerBudget = 1;
p.UpperBudget = 1;
p.LowerBound = zeros(size(m));

plotFrontier(p)

另请参阅

|

相关示例

详细信息

外部网站