Main Content

PortfolioMAD Object

PortfolioMAD Object Properties and Functions

The PortfolioMAD object implements mean absolute-deviation (MAD) portfolio optimization and is derived from the abstract class AbstractPortfolio. Every property and function of the PortfolioMAD object is public, although some properties and functions are hidden. The PortfolioMAD object is a value object where every instance of the object is a distinct version of the object. Since the PortfolioMAD object is also a MATLAB® object, it inherits the default functions associated with MATLAB objects.

Working with PortfolioMAD Objects

The PortfolioMAD object and its functions are an interface for mean absolute-deviation portfolio optimization. So, almost everything you do with the PortfolioMAD object can be done using the functions. The basic workflow is:

  1. Design your portfolio problem.

  2. Use PortfolioMAD to create the PortfolioMAD object or use the various set functions 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 a PortfolioMAD 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 MAD portfolio optimization, means that you have either scenarios, data, or moments for asset returns, and a collection of constraints on your portfolios, use PortfolioMAD to set the properties for the PortfolioMAD object.

PortfolioMAD lets you create an object from scratch or update an existing object. Since the PortfolioMAD 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 PortfolioMAD Object.

Setting and Getting Properties

You can set properties of a PortfolioMAD object using either PortfolioMAD 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 PortfolioMAD 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 and Budget properties in an existing PortfolioMAD object p, use the syntax:

p = PortfolioMAD(p,'LowerBound', 0,'Budget',1);

In addition to the PortfolioMAD object, which lets you set individual properties one at a time, groups of properties are set in a PortfolioMAD 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 PortfolioMAD object, obtain properties directly or use an assortment of “get” functions that obtain groups of properties from a PortfolioMAD object. The PortfolioMAD object and set functions have several useful features:

  • The PortfolioMAD object and set functions try to determine the dimensions of your problem with either explicit or implicit inputs.

  • The PortfolioMAD object and set functions try to resolve ambiguities with default choices.

  • The PortfolioMAD object and set functions perform scalar expansion on arrays when possible.

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

Displaying PortfolioMAD Objects

The PortfolioMAD object uses the default display function provided by MATLAB, where display and disp display a PortfolioMAD object and its properties with or without the object variable name.

Saving and Loading PortfolioMAD Objects

Save and load PortfolioMAD 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 MAD 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 PortfolioMAD Objects

Although all functions associated with a PortfolioMAD object are designed to work on a scalar PortfolioMAD object, the array capabilities of MATLAB enable you to set up and work with arrays of PortfolioMAD objects. The easiest way to do this is with the repmat function. For example, to create a 3-by-2 array of PortfolioMAD objects:

p = repmat(PortfolioMAD, 3, 2);
disp(p)
3×2 PortfolioMAD array with properties:

    BuyCost
    SellCost
    RiskFreeRate
    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
    BoundType
After setting up an array of PortfolioMAD objects, you can work on individual PortfolioMAD objects in the array by indexing. For example:
p(i,j) = PortfolioMAD(p(i,j), ... );
This example calls PortfolioMAD for the (i,j) element of a matrix of PortfolioMAD objects in the variable p.

If you set up an array of PortfolioMAD objects, you can access properties of a particular PortfolioMAD 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 PortfolioMAD objects with

p(i,j,k) = setBounds(p(i,j,k),lb, ub);
and, once set, you can access these bounds with
[lb, ub] = getBounds(p(i,j,k));
PortfolioMAD object functions work on only one PortfolioMAD object at a time.

Subclassing PortfolioMAD Objects

You can subclass the PortfolioMAD object to override existing functions or to add new properties or functions. To do so, create a derived class from the PortfolioMAD class. This gives you all the properties and functions of the PortfolioMAD class along with any new features that you choose to add to your subclassed object. The PortfolioMAD 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 MAD 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

Related Examples

More About