| Contents | Index |
| On this page… |
|---|
Portfolio Object Properties and Methods Working with Portfolio Objects Setting and Getting Properties Saving and Loading Portfolio Objects |
The portfolio object implements mean-variance portfolio optimization and is derived from the abstract class AbstractPortfolio. Every property and method of the portfolio object is public, although some properties and methods are hidden. See Portfolio Object Properties and Portfolio Object Methods for the properties and methods of a portfolio object. The portfolio object is a value object where every instance of the object is a distinct version of the object. Since the portfolio object is also a MATLAB object, it inherits the default methods associated with MATLAB objects.
Portfolio Object Properties
Property | Description | Characteristics |
|---|---|---|
AEquality | Matrix for equality constraints | Matrix |
AInequality | Matrix for inequality constraints | Matrix |
AssetCovar | Covariance of asset returns | Symmetric positive-semidefinite matrix |
AssetList | List of asset names or identifiers | Vector cell array of strings |
AssetMean | Mean of asset returns | Vector |
bEquality | Vector for equality constraints | Vector |
bInequality | Vector for inequality constraints | Vector |
BuyCost | Cost to purchase assets | Vector |
BuyTurnover | Turnover constraint on purchases | Scalar |
GroupA | Base group ratio constraint matrix | Boolean matrix or matrix |
GroupB | Comparison group ratio constraint matrix | Boolean matrix or matrix |
GroupMatrix | Group membership matrix | Boolean matrix or matrix |
InitPort | Initial or current portfolio | Vector |
LowerBound | Lower bound constraint | Vector |
LowerBudget | Lower budget constraint | Scalar |
LowerGroup | Lower group constraint | Vector |
LowerRatio | Lower group ratio constraint ratio | Vector |
Name | Name for instance of portfolio object | String |
NumAssets | Number of assets in universe | Scalar positive integer |
RiskFreeRate | Period return of riskless asset | Scalar |
SellCost | Cost to sell assets | Vector |
SellTurnover | Turnover constraint on sales | Scalar |
Turnover | Upper bound portfolio turnover | Scalar |
UpperBound | Upper bound constraint | Vector |
UpperBudget | Upper budget constraint | Scalar |
UpperGroup | Upper group constraint | Vector |
UpperRatio | Upper group ratio constraint ratio | Vector |
Portfolio Object Methods
Method | Description |
|---|---|
Add equality constraints for portfolio weights to existing constraints. | |
Add group ratio constraints for portfolio weights to existing constraints. | |
Add group constraints for portfolio weights to existing constraints. | |
Add inequality constraints for portfolio weights to existing constraints. | |
Determine if portfolios are members of the set of feasible portfolios. | |
Estimate mean and covariance of asset returns from price or return data. | |
Determine if set of feasible portfolios is nonempty and bounded. | |
Estimate portfolios on the entire efficient frontier. | |
Estimate portfolios on the efficient frontier with targeted returns or return proxies. | |
Estimate portfolios on the efficient frontier with targeted risks or risk proxies. | |
Estimate portfolios at the extreme ends of the efficient frontier (minimum risk and maximum return). | |
Estimate efficient portfolio that maximizes the Sharpe ratio. | |
Estimate mean and standard deviation of portfolio returns for specified portfolios. | |
Estimate return or return proxy for specified portfolios. | |
Estimate risk or risk proxy for specified portfolios. | |
Get mean and covariance of asset returns from object. | |
Get lower and upper bounds from object. | |
Get lower and upper budget constraints from object. | |
Get purchase and sales proportional transaction costs from object. | |
Get equality constraint matrix and vector from object. | |
Get base matrix, comparison matrix, and lower and upper bounds for group ratio constraints from object. | |
Get group matrix and lower and upper bounds for group constraints from object. | |
Get inequality constraint matrix and vector from object. | |
Get one-way portfolio turnover constraints. | |
Plot efficient frontier and optionally obtain risks and returns for portfolios on the efficient frontier. | |
Set up a list of asset names and symbols to be associated with assets in universe. | |
Set up mean and covariance of asset returns. | |
Set up lower and upper bounds for portfolio weights. | |
Set up lower and upper budget constraints for portfolio weights. | |
Set up purchase and sale proportional transaction costs for assets in universe. | |
Set up default constraints for portfolio weights (nonnegative weights that must sum to 1). | |
Set up equality constraints for portfolio weights. | |
Set up group ratio constraints for portfolio weights. | |
Set up group constraints for portfolio weights. | |
Set up inequality constraints for portfolio weights. | |
Set up initial portfolio weights. | |
Set up one-way portfolio turnover constraints. | |
Set up hidden control properties in object (not implemented). | |
Set up solver to estimate efficient portfolios. | |
Set up average turnover constraints for portfolio weights. |
The portfolio object and its methods are an interface for mean-variance portfolio optimization. Consequently, almost everything you do with the portfolio object can be done using the methods. The basic workflow is:
Design your portfolio problem.
Use the portfolio constructor (Portfolio) to create the portfolio object or use the various set methods to set up your portfolio problem.
Use estimate methods to solve your portfolio problem.
In addition, methods are available to help you view intermediate results and to diagnose your computations. Since MATLAB features are part of a portfolio object, you can save and load objects from your workspace and create and manipulate arrays of objects. After settling upon 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, use the portfolio constructor to set the properties for the portfolio object. The portfolio constructor lets you create an object from scratch or update an existing object. Since the portfolio object is a value object, it is easy to create a basic object, then use methods 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, see Constructing the Portfolio Object.
You can set properties of a portfolio object with either the constructor (Portfolio) or various set methods.
Note Although you can also set properties directly, it is not recommended since error-checking is not performed when you set a property directly. |
The portfolio constructor supports setting properties with parameter name and value pairs such that each parameter name is a property and each value is the value to assign to that property. For example, to set the AssetMean and AssetCovar properties in an existing portfolio object p with the values m and C, use the syntax:
p = Portfolio(p, 'AssetMean', m, 'AssetCovar', C);
In addition to the portfolio constructor, which lets you set individual properties one at a time, groups of properties are set in a portfolio object with various "set" and "add" methods. For example, to set up an average turnover constraint, use the setTurnover method 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" methods that obtain groups of properties from a portfolio object. The portfolio object constructor and set methods have several useful features:
The constructor and set methods try to determine the dimensions of your problem with either explicit or implicit inputs.
The constructor and set methods try to resolve ambiguities with default choices.
The constructor and set methods perform scalar expansion on arrays when possible.
The methods try to diagnose and warn about problems.
The portfolio object uses the default display method provided by MATLAB, where display and disp display a portfolio object and its properties with or without the object variable name.
Save and load portfolio objects with the MATLAB save and load commands.
Estimating efficient portfolios and efficient frontiers is the primary purpose of the portfolio optimization tools. A collection of "estimate" and "plot" methods provides ways to explore the efficient frontier. The "estimate" methods obtain either efficient portfolios or risk and return proxies to form efficient frontiers. At the portfolio level, a collection of methods estimates efficient portfolios on the efficient frontier with methods to obtain efficient portfolios:
At the endpoints of the efficient frontier
That attain targeted values for return proxies
That attain targeted values for risk proxies
Along the entire efficient frontier
These methods 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 methods plot the efficient frontier and estimate either risk or return proxies for efficient portfolios on the efficient frontier. The resultant efficient portfolios or risk and return proxies can be used in subsequent analyses.
Although all methods associated with a portfolio object are designed to work on a scalar portfolio object, the array capabilities of MATLAB enables you to set up and work with arrays of portfolio objects. The easiest way to do this is with the repmat function. For example, to create a 3-by-2 array of portfolio objects:
p = repmat(Portfolio, 3, 2); disp(p)
Once you have set up an array of portfolio objects, you can work on individual portfolio objects in the array by indexing. For example:
p(i,j) = Portfolio(p(i,j), ... );
This example calls the portfolio object constructor for the (i, j) element of a matrix of portfolio objects in the variable p.
If you set up an array of portfolio objects, you can access properties of a particular portfolio object in the array by indexing so that you can set the lower and upper bounds lb and ub for the (i,j,k) element of a 3-D array of portfolio objects with
p(i,j,k) = p(i,j,k).setBounds(lb, ub);
and, once set, you can access these bounds with
[lb, ub] = p(i,j,k).getBounds;
Portfolio object methods work on only one portfolio object at a time.
You can subclass the portfolio object to override existing methods or to add new properties or methods. To do so, create a derived class from the Portfolio class. This gives you all the properties and methods of the Portfolio class along with any new features that you choose to add to your subclassed object. Since the Portfolio class is derived from an abstract class called AbstractPortfolio, you can also create a derived class from AbstractPortfolio that implements an entirely different form of portfolio optimization using the properties and methods of the AbstractPortfolio class.
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 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).
.
![]() | Portfolio Optimization Theory | Constructing the Portfolio Object | ![]() |
View demos and recorded presentations led by industry experts.
Now On Demand
Network with industry peers and learn the latest applications of the leading software product for computational finance.
| © 1984-2012- The MathWorks, Inc. - Site Help - Patents - Trademarks - Privacy Policy - Preventing Piracy - RSS |