Main Content

Common Operations on the Portfolio Object

Naming a Portfolio Object

To name a Portfolio object, use the Name property. Name is informational and has no effect on any portfolio calculations. If the Name property is nonempty, Name is the title for the efficient frontier plot generated by plotFrontier. For example, if you set up an asset allocation fund, you could name the Portfolio object Asset Allocation Fund:

p = Portfolio('Name','Asset Allocation Fund');
disp(p.Name)
Asset Allocation Fund

Configuring the Assets in the Asset Universe

The fundamental quantity in the Portfolio object is the number of assets in the asset universe. This quantity is maintained in the NumAssets property. Although you can set this property directly, it is derived from other properties such as the mean of asset returns and the initial portfolio. In some instances, the number of assets may need to be set directly. This example shows how to set up a Portfolio object that has four assets:

p = Portfolio('NumAssets', 4);
disp(p.NumAssets)
4

After setting the NumAssets property, you cannot modify it (unless no other properties are set that depend on NumAssets). The only way to change the number of assets in an existing Portfolio object with a known number of assets is to create a new Portfolio object.

Setting Up a List of Asset Identifiers

When working with portfolios, you must specify a universe of assets. Although you can perform a complete analysis without naming the assets in your universe, it is helpful to have an identifier associated with each asset as you create and work with portfolios. You can create a list of asset identifiers as a cell vector of character vectors in the property AssetList. You can set up the list using the next two functions.

Setting Up Asset Lists Using the Portfolio Function

Suppose that you have a Portfolio object, p, with assets with symbols 'AA'', 'BA', 'CAT', 'DD', and 'ETR'. You can create a list of these asset symbols in the object using the Portfolio object:

p = Portfolio('assetlist', { 'AA', 'BA', 'CAT', 'DD', 'ETR' });
disp(p.AssetList)
'AA'    'BA'    'CAT'    'DD'    'ETR'
Notice that the property AssetList is maintained as a cell array that contains character vectors, and that it is necessary to pass a cell array into the Portfolio object to set AssetList. In addition, notice that the property NumAssets is set to 5 based on the number of symbols used to create the asset list:
disp(p.NumAssets)
5

Setting Up Asset Lists Using the setAssetList Function

You can also specify a list of assets using the setAssetList function. Given the list of asset symbols 'AA', 'BA', 'CAT', 'DD', and'ETR', you can use setAssetList with:

p = Portfolio;
p = setAssetList(p, { 'AA', 'BA', 'CAT', 'DD', 'ETR' });
disp(p.AssetList)
 'AA'    'BA'    'CAT'    'DD'    'ETR'

setAssetList also enables you to enter symbols directly as a comma-separated list without creating a cell array of character vectors. For example, given the list of assets symbols 'AA', 'BA', 'CAT', 'DD', and 'ETR', use setAssetList:

p = Portfolio;
p = setAssetList(p,'AA', 'BA', 'CAT', 'DD', 'ETR');
disp(p.AssetList)
'AA'    'BA'    'CAT'    'DD'    'ETR'

setAssetList has many additional features to create lists of asset identifiers. If you use setAssetList with just a Portfolio object, it creates a default asset list according to the name specified in the hidden public property defaultforAssetList (which is 'Asset' by default). The number of asset names created depends on the number of assets in the property NumAssets. If NumAssets is not set, then NumAssets is assumed to be 1.

For example, if a Portfolio object p is created with NumAssets = 5, then this code fragment shows the default naming behavior:

p = Portfolio('numassets',5);
p = setAssetList(p);
disp(p.AssetList)
'Asset1'    'Asset2'    'Asset3'    'Asset4'    'Asset5'
Suppose that your assets are, for example, ETFs and you change the hidden property defaultforAssetList to 'ETF', you can then create a default list for ETFs:
p = Portfolio('numassets',5);
p.defaultforAssetList = 'ETF'; 
p = setAssetList(p);
disp(p.AssetList)
'ETF1'    'ETF2'    'ETF3'    'ETF4'    'ETF5'

Truncating and Padding Asset Lists

If the NumAssets property is already set and you pass in too many or too few identifiers, the Portfolio object, and the setAssetList function truncate or pad the list with numbered default asset names that use the name specified in the hidden public property defaultforAssetList. If the list is truncated or padded, a warning message indicates the discrepancy. For example, assume that you have a Portfolio object with five ETFs and you only know the first three CUSIPs '921937835', '922908769', and '922042775'. Use this syntax to create an asset list that pads the remaining asset identifiers with numbered 'UnknownCUSIP' placeholders:

p = Portfolio('numassets',5);
p.defaultforAssetList = 'UnknownCUSIP';
p = setAssetList(p,'921937835', '922908769', '922042775');
disp(p.AssetList)
Warning: Input list of assets has 2 too few identifiers. Padding with numbered assets. 
> In Portfolio.setAssetList at 121 
    '921937835'    '922908769'    '922042775'    'UnknownCUSIP4'    'UnknownCUSIP5'

Alternatively, suppose that you have too many identifiers and need only the first four assets. This example illustrates truncation of the asset list using the Portfolio object:

p = Portfolio('numassets',4);
p = Portfolio(p, 'assetlist', { 'AGG', 'EEM', 'MDY', 'SPY', 'VEU' });
disp(p.AssetList)
Warning: AssetList has 1 too many identifiers. Using first 4 assets. 
> In Portfolio.checkarguments at 434
  In Portfolio.Portfolio>Portfolio.Portfolio at 171 
    'AGG'    'EEM'    'MDY'    'SPY'

The hidden public property uppercaseAssetList is a Boolean flag to specify whether to convert asset names to uppercase letters. The default value for uppercaseAssetList is false. This example shows how to use the uppercaseAssetList flag to force identifiers to be uppercase letters:

p = Portfolio;
p.uppercaseAssetList = true;
p = setAssetList(p,{ 'aa', 'ba', 'cat', 'dd', 'etr' });
disp(p.AssetList)
'AA'    'BA'    'CAT'    'DD'    'ETR'

See Also

| | | | |

Related Examples

More About

External Websites