创建 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: []
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

通过多步设置使用 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 属性设置为相同的值以构成等式预算约束。
简写属性名称
简写参量名称 | 等效参量 / 属性名称 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
例如,对 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)另请参阅
主题
- Common Operations on the Portfolio Object
- Working with Portfolio Constraints Using Defaults
- Asset Allocation Case Study
- 使用 Financial Toolbox 的投资组合优化示例
- Portfolio Optimization with Semicontinuous and Cardinality Constraints
- Black-Litterman Portfolio Optimization Using Financial Toolbox
- Portfolio Optimization Using Factor Models
- Diversify Portfolios Using Custom Objective
- Portfolio Optimization Using Social Performance Measure
- Portfolio Object
- 投资组合优化理论
- Portfolio 对象工作流