Main Content

Portfolio Object

Portfolio Object Properties and Functions

ThePortfolioobject implements mean-variance portfolio optimization. Every property and function of thePortfolioobject is public, although some properties and functions are hidden. SeePortfoliofor the properties and functions of thePortfolioobject. ThePortfolioobject is a value object where every instance of the object is a distinct version of the object. Since thePortfolioobject is also a MATLAB®object, it inherits the default functions associated with MATLAB objects.

Working with Portfolio Objects

ThePortfolioobject and its functions are an interface for mean-variance portfolio optimization. So, almost everything you do with thePortfolioobject can be done using the associated functions. The basic workflow is:

  1. Design your portfolio problem.

  2. UsePortfolioto create thePortfolioobject or use the varioussetfunctions to set up your portfolio problem.

  3. Use estimate functions to solve your portfolio problem.

In addition, functions are available to help you view intermediate results and to diagnose your computations. Since MATLAB features are part of aPortfolioobject, you can save and load objects from your workspace and create and manipulate arrays of objects. After settling on a problem, which, in the case of mean-variance portfolio optimization, means that you have either data or moments for asset returns and a collection of constraints on your portfolios, usePortfolioto set the properties for thePortfolioobject.Portfoliolets you create an object from scratch or update an existing object. Since thePortfolioobject is a value object, it is easy to create a basic object, then use functions to build upon the basic object to create new versions of the basic object. This is useful to compare a basic problem with alternatives derived from the basic problem. For details, seeCreating the Portfolio Object.

Setting and Getting Properties

You can set properties of aPortfolioobject using eitherPortfolioor varioussetfunctions.

Note

Although you can also set properties directly, it is not recommended since error-checking is not performed when you set a property directly.

ThePortfolioobject supports setting properties with name-value pair arguments such that each argument name is a property and each value is the value to assign to that property. For example, to set theAssetMeanandAssetCovarproperties in an existingPortfolioobjectpwith the valuesmandC, use the syntax:

p = Portfolio(p,'AssetMean', m,'AssetCovar', C);

In addition toPortfolio, which lets you set individual properties one at a time, groups of properties are set in aPortfolioobject with various “set” and “add” functions. For example, to set up an average turnover constraint, use thesetTurnoverfunction to specify the bound on portfolio average turnover and the initial portfolio. To get individual properties from a Portfolio object, obtain properties directly or use an assortment of “get” functions that obtain groups of properties from aPortfolioobject. ThePortfolioobject and thesetfunctions have several useful features:

  • Portfolioand thesetfunctions try to determine the dimensions of your problem with either explicit or implicit inputs.

  • Portfolioand thesetfunctions try to resolve ambiguities with default choices.

  • Portfolioand thesetfunctions perform scalar expansion on arrays when possible.

  • The associatedPortfolioobject functions try to diagnose and warn about problems.

Displaying Portfolio Objects

ThePortfolioobject uses the default display functions provided by MATLAB, wheredisplayanddispdisplay a Portfolio object and its properties with or without the object variable name.

Saving and Loading Portfolio Objects

Save and loadPortfolioobjects using the MATLABsaveandloadcommands.

Estimating Efficient Portfolios and Frontiers

Estimating efficient portfolios and efficient frontiers is the primary purpose of the portfolio optimization tools. Anefficient portfolioare the portfolios that satisfy the criteria of minimum risk for a given level of return and maximum return for a given level of risk. A collection of “estimate” and “plot” functions provide ways to explore the efficient frontier. The “estimate” functions obtain either efficient portfolios or risk and return proxies to form efficient frontiers. At the portfolio level, a collection of functions estimates efficient portfolios on the efficient frontier with functions to obtain efficient portfolios:

  • At the endpoints of the efficient frontier

  • That attains targeted values for return proxies

  • That attains targeted values for risk proxies

  • Along the entire efficient frontier

These functions also provide purchases and sales needed to shift from an initial or current portfolio to each efficient portfolio. At the efficient frontier level, a collection of functions plot the efficient frontier and estimate either risk or return proxies for efficient portfolios on the efficient frontier. You can use the resultant efficient portfolios or risk and return proxies in subsequent analyses.

Arrays of Portfolio Objects

Although all functions associated with aPortfolioobject are designed to work on a scalarPortfolioobject, the array capabilities of MATLAB enable you to set up and work with arrays ofPortfolioobjects. The easiest way to do this is with therepmatfunction. For example, to create a 3-by-2 array ofPortfolioobjects:

p = repmat(Portfolio, 3, 2); disp(p)
disp(p) 3×2 Portfolio array 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
After setting up an array ofPortfolioobjects, you can work on individualPortfolioobjects in the array by indexing. For example:
p(i,j) = Portfolio(p(i,j), ... );
This example callsPortfoliofor the (i,j) element of a matrix ofPortfolioobjects in the variablep.

If you set up an array ofPortfolioobjects, you can access properties of a particularPortfolioobject in the array by indexing so that you can set the lower and upper boundslbandubfor the (i,j,k) element of a 3-D array ofPortfolioobjects with

p(i,j,k) = setBounds(p(i,j,k),lb, ub);
一旦设置,你可以访问这些界限
[lb, ub] = getBounds(p(i,j,k));
Portfolioobject functions work on only onePortfolioobject at a time.

Subclassing Portfolio Objects

You can subclass thePortfolioobject to override existing functions or to add new properties or functions. To do so, create a derived class from thePortfolioclass. This gives you all the properties and functions of thePortfolioclass along with any new features that you choose to add to your subclassed object. ThePortfolioclass is derived from an abstract class calledAbstractPortfolio. Because of this, you can also create a derived class fromAbstractPortfoliothat implements an entirely different form of portfolio optimization using properties and functions of theAbstractPortfolioclass.

Conventions for Representation of Data

The portfolio optimization tools follow these conventions regarding the representation of different quantities associated with portfolio optimization:

  • Asset returns or prices are in matrix form with samples for a given asset going down the rows and assets going across the columns. In the case of prices, the earliest dates must be at the top of the matrix, with increasing dates going down.

  • The mean and covariance of asset returns are stored in a vector and a matrix and the tools have no requirement that the mean must be either a column or row vector.

  • Portfolios are in vector or matrix form with weights for a given portfolio going down the rows and distinct portfolios going across the columns.

  • Constraints on portfolios are formed in such a way that a portfolio is a column vector.

  • Portfolio risks and returns are either scalars or column vectors (for multiple portfolio risks and returns).

See Also

Related Examples

More About

External Websites