创建 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 函数
在变量 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: [] 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