PortfolioCVaR Object
PortfolioCVaR Object Properties and Functions
The PortfolioCVaR object implements conditional value-at-risk
                (CVaR) portfolio optimization. Every property and function of the
                    PortfolioCVaR object is public, although some properties and
                functions are hidden. See PortfolioCVaR for the properties and
                functions 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 functions associated with MATLAB objects. 
Working with PortfolioCVaR Objects
The PortfolioCVaR object and its functions are an interface for
                conditional value-at-risk portfolio optimization. So, almost everything you do with
                the PortfolioCVaR object can be done using the functions. The
                basic workflow is: 
- Design your portfolio problem. 
- Use - PortfolioCVaRto create the- PortfolioCVaRobject or use the various set functions to set up your portfolio problem.
- 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 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 PortfolioCVaR to set the properties
                for the PortfolioCVaR object. 
PortfolioCVaR 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 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, see Creating the PortfolioCVaR Object.
Setting and Getting Properties
You can set properties of a PortfolioCVaR object using either
                the PortfolioCVaR object or various
                    set functions. 
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 object 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', 1, 'ProbabilityLevel', 0.95);
In addition to the PortfolioCVaR object, which lets you
                set individual properties one at a time, groups of properties are set in a
                    PortfolioCVaR object with various “set” and
                “add” functions. For example, to set up an average turnover
                constraint, use the setTurnover function 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” functions that obtain groups of properties from a
                    PortfolioCVaR object. The PortfolioCVaR object and
                    set functions have several useful features: 
- The - PortfolioCVaRobject and- setfunctions try to determine the dimensions of your problem with either explicit or implicit inputs.
- The - PortfolioCVaRobject and- setfunctions try to resolve ambiguities with default choices.
- The - PortfolioCVaRobject and- setfunctions perform scalar expansion on arrays when possible.
- The CVaR functions try to diagnose and warn about problems. 
Displaying PortfolioCVaR Objects
The PortfolioCVaR object uses the default display functions
                provided by MATLAB, where display and disp display
                a PortfolioCVaR object and its properties with or without the
                object variable name.
Saving and Loading PortfolioCVaR Objects
Save and load PortfolioCVaR objects using the MATLAB
                save and load commands.
Estimating Efficient Portfolios and Frontiers
Estimating efficient portfolios and efficient frontiers is the primary purpose of the CVaR portfolio optimization tools. An efficient portfolio are 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 attain targeted values for return proxies 
- That attain 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 PortfolioCVaR Objects
Although all functions 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)
3×2 PortfolioCVaR array with properties:
    BuyCost
    SellCost
    RiskFreeRate
    ProbabilityLevel
    Turnover
    BuyTurnover
    SellTurnover
    NumScenarios
    Name
    NumAssets
    AssetList
    InitPort
    AInequality
    bInequality
    AEquality
    bEquality
    LowerBound
    UpperBound
    LowerBudget
    UpperBudget
    GroupMatrix
    LowerGroup
    UpperGroup
    GroupA
    GroupB
    LowerRatio
    UpperRatio
    MinNumAssets
    MaxNumAssets
    ConditionalBudgetThreshold
    ConditionalUpperBudget
    BoundType
PortfolioCVaR
                objects, you can work on individual PortfolioCVaR objects in the
                array by indexing. For
                example:p(i,j) = PortfolioCVaR(p(i,j), ... );
PortfolioCVaR 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) = setBounds(p(i,j,k), lb, ub);
[lb, ub] = getBounds(p(i,j,k));
PortfolioCVaR
                object functions work on only one PortfolioCVaR object at a
                time.Subclassing PortfolioCVaR Objects
You can subclass the PortfolioCVaR object to override existing
                functions or to add new properties or functions. To do so, create a derived class
                from the PortfolioCVaR class. This gives you all the properties
                and functions 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 functions of the
                    AbstractPortfolio class. 
Conventions for Representation of Data
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). 
See Also
Topics
- Creating the PortfolioCVaR Object
- Working with CVaR Portfolio Constraints Using Defaults
- Hedging Using CVaR Portfolio Optimization
- Compute Maximum Reward-to-Risk Ratio for CVaR Portfolio
- Portfolio Optimization Theory
- PortfolioCVaR Object Workflow