|On this page…|
The PortfolioCVaR object implements conditional value-at-risk (CVaR) portfolio optimization and is derived from the abstract class AbstractPortfolio. Every property and method of the PortfolioCVaR object is public, although some properties and methods are hidden. See PortfolioCVaR Object Properties and PortfolioCVaR Object Methods for the properties and methods of a PortfolioCVaR object. The PortfolioCVaR object is a value object where every instance of the object is a distinct version of the object. Since the PortfolioCVaR object is also a MATLAB® object, it inherits the default methods associated with MATLAB objects.
PortfolioCVaR Object Properties
Matrix for equality constraints
Matrix for inequality constraints
List of asset names or identifiers
Vector cell array of strings
Vector for equality constraints
Vector for inequality constraints
Cost to purchase assets
Turnover constraint on purchases
Base group ratio constraint matrix
Boolean matrix or matrix
Comparison group ratio constraint matrix
Boolean matrix or matrix
Group membership matrix
Boolean matrix or matrix
Initial or current portfolio
Lower-group ratio constraint ratio
Name for instance of PortfolioCVaR object
Number of assets in universe
Scalar positive integer
Number of scenarios (read only)
Probability level which is 1 minus the probability of losses greater than the value-at-risk
Period return of riskless asset
Cost to sell assets
Turnover constraint on sales
Upper-bound portfolio turnover
Upper-group ratio constraint ratio
PortfolioCVaR Object Methods
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.
Determine if the 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 the return or return proxy for specified portfolios.
Estimate the risk or risk proxy for specified portfolios.
Estimate standard deviation of portfolio returns.
Estimate value-at-risk for portfolio.
Estimate mean and covariance of scenarios.
Get lower and upper bounds from object.
Simulate multivariate normal asset return scenarios from data.
Simulate multivariate normal asset return scenarios from a mean and covariance of asset returns.
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.
Obtain scenarios from PortfolioCVaR object.
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 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 probability level for VaR and CVaR calculations.
Set asset returns scenarios by direct matrix.
Set up solver to estimate efficient portfolios.
Set up average turnover constraints for portfolio weights.
The PortfolioCVaR object and its methods are an interface for conditional value-at-risk portfolio optimization. Consequently, almost everything you do with the PortfolioCVaR object can be done using the methods. The basic workflow is:
Design your portfolio problem.
Use the portfolio constructor (PortfolioCVaR) to create the PortfolioCVaR 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 PortfolioCVaR object, 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 CVaR portfolio optimization, means that you have either scenarios, data, or moments for asset returns, a probability level, and a collection of constraints on your portfolios, use the portfolio constructor to set the properties for the PortfolioCVaR object.
The PortfolioCVaR constructor lets you create an object from scratch or update an existing object. Since the PortfolioCVaR 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 PortfolioCVaR Object.
You can set properties of a PortfolioCVaR object using either the constructor (PortfolioCVaR) 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 PortfolioCVaR constructor 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 the LowerBound, Budget, and ProbabilityLevel properties in an existing PortfolioCVaR object p, use the syntax:
p = PortfolioCVaR(p,'LowerBound', 0, 'Budget', 'ProbabilityLevel', 0.95);
In addition to the PortfolioCVaR constructor, which lets you set individual properties one at a time, groups of properties are set in a PortfolioCVaR 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 turnover and the initial portfolio. To get individual properties from a PortfolioCVaR object, obtain properties directly or use an assortment of "get" methods that obtain groups of properties from a PortfolioCVaR object. The PortfolioCVaR 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 PortfolioCVaR object uses the default display method provided by MATLAB, where display and disp display a PortfolioCVaR object and its properties with or without the object variable name.
Save and load PortfolioCVaR objects using the MATLAB save and load commands.
Estimating efficient portfolios and efficient frontiers is the primary purpose of the CVaR portfolio optimization tools. A collection of "estimate" and "plot" methods provide 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. You can use the resultant efficient portfolios or risk and return proxies in subsequent analyses.
Although all methods associated with a PortfolioCVaR object are designed to work on a scalar PortfolioCVaR object, the array capabilities of MATLAB enables you to set up and work with arrays of PortfolioCVaR objects. The easiest way to do this is with the repmat function. For example, to create a 3-by-2 array of PortfolioCVaR objects:
p = repmat(PortfolioCVaR, 3, 2); disp(p)
After setting up an array of PortfolioCVaR objects, you can work on individual PortfolioCVaR objects in the array by indexing. For example:
p(i,j) = PortfolioCVaR(p(i,j), ... );
This example calls the PortfolioCVaR object constructor for the (i,j) element of a matrix of PortfolioCVaR objects in the variable p.
If you set up an array of PortfolioCVaR objects, you can access properties of a particular PortfolioCVaR 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 PortfolioCVaR 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;
PortfolioCVaR object methods work on only one PortfolioCVaR object at a time.
You can subclass the PortfolioCVaR object to override existing methods or to add new properties or methods. To do so, create a derived class from the PortfolioCVaR class. This gives you all the properties and methods of the PortfolioCVaR class along with any new features that you choose to add to your subclassed object. The PortfolioCVaR class is derived from an abstract class called AbstractPortfolio. Because of this, you can also create a derived class from AbstractPortfolio that implements an entirely different form of portfolio optimization using properties and methods of the AbstractPortfolio class.
The CVaR portfolio optimization tools follow these conventions regarding the representation of different quantities associated with portfolio optimization:
Asset returns or prices for scenarios 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.
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).