主要内容

创建 Portfolio 对象

R2026b

要创建完全指定的均值-方差投资组合优化问题,请使用 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: []
    ConditionalBudgetThreshold: []
        ConditionalUpperBudget: []
                     BoundType: []

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

通过单步设置使用 Portfolio 函数

在变量 m 和 C 中给定资产收益的均值和协方差的情况下,您可以使用 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: []
    ConditionalBudgetThreshold: []
        ConditionalUpperBudget: []
                     BoundType: []
LowerBound 属性值进行标量扩展,因为 AssetMean 和 AssetCovar 提供问题的维度。

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

p.plotFrontier

Figure contains a plot for the efficient frontier using a Portfolio object.

通过多步设置使用 Portfolio 函数

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

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 的调用是按此特定顺序进行的。在本例中,初始化 AssetMean 和 AssetCovar 的那次调用确定了问题的维度。如果您最后执行这次调用,则必须显式设置 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' 时,则 LowerBudget 和 UpperBudget 属性设置为相同的值以构成等式预算约束。

简写属性名称

简写参量名称

等效参量 / 属性名称

ae

AEquality

ai

AInequality

covar

AssetCovar

assetnames 或 assets

AssetList

mean

AssetMean

be

bEquality

bi

bInequality

group

GroupMatrix

lb

LowerBound

n 或 num

NumAssets

rfr

RiskFreeRate

ub

UpperBound

budget

UpperBudget 和 LowerBudget

例如,对 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)

另请参阅

|

主题

外部网站