In some cases, you may want to validate either your inputs to, or outputs from, a portfolio optimization problem. Although most error checking that occurs during the problem setup phase catches most difficulties with a portfolio optimization problem, the processes to validate CVaR portfolio sets and portfolios are time consuming and are best done offline. So, the portfolio optimization tools have specialized functions to validate CVaR portfolio sets and portfolios. For information on the workflow when using PortfolioCVaR objects, see PortfolioCVaR Object Workflow.

Since it is necessary and sufficient that your CVaR portfolio
set must be a nonempty, closed, and bounded set to have a valid portfolio
optimization problem, the `estimateBounds`

function
lets you examine your portfolio set to determine if it is nonempty
and, if nonempty, whether it is bounded. Suppose that you have the
following CVaR portfolio set which is an empty set because the initial
portfolio at `0`

is too far from a portfolio that
satisfies the budget and turnover constraint:

p = PortfolioCVaR('NumAssets', 3, 'Budget', 1); p = setTurnover(p, 0.3, 0);

If a CVaR portfolio set is empty, `estimateBounds`

returns `NaN`

bounds
and sets the `isbounded`

flag to `[]`

:

[lb, ub, isbounded] = estimateBounds(p)

lb = NaN NaN NaN ub = NaN NaN NaN isbounded = []

Suppose that you create an unbounded CVaR portfolio set as follows:

p = PortfolioCVaR('AInequality', [1 -1; 1 1 ], 'bInequality', 0); [lb, ub, isbounded] = estimateBounds(p)

lb = -Inf -Inf ub = 1.0e-008 * -0.3712 Inf isbounded = 0

`estimateBounds`

returns
(possibly infinite) bounds and sets the `isbounded`

flag
to `false`

. The result shows which assets are unbounded
so that you can apply bound constraints as necessary.Finally, suppose that you created a CVaR portfolio set that
is both nonempty and bounded. `estimateBounds`

not
only validates the set, but also obtains tighter bounds which are
useful if you are concerned with the actual range of portfolio choices
for individual assets in your portfolio set:

p = PortfolioCVaR; p = setBudget(p, 1,1); p = setBounds(p, [ -0.1; 0.2; 0.3; 0.2 ], [ 0.5; 0.3; 0.9; 0.8 ]); [lb, ub, isbounded] = estimateBounds(p)

lb = -0.1000 0.2000 0.3000 0.2000 ub = 0.3000 0.3000 0.7000 0.6000 isbounded = 1

In this example, all but the second asset has tighter upper bounds than the input upper bound implies.

Given a CVaR portfolio set specified in a PortfolioCVaR object,
you often want to check if specific portfolios are feasible with respect
to the portfolio set. This can occur with, for example, initial portfolios
and with portfolios obtained from other procedures. The `checkFeasibility`

function determines
whether a collection of portfolios is feasible. Suppose that you perform
the following portfolio optimization and want to determine if the
resultant efficient portfolios are feasible relative to a modified
problem.

First, set up a problem in the PortfolioCVaR object `p`

,
estimate efficient portfolios in `pwgt`

, and then
confirm that these portfolios are feasible relative to the initial
problem:

m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioCVaR; p = setScenarios(p, AssetScenarios); p = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.95); pwgt = estimateFrontier(p); checkFeasibility(p, pwgt)

ans = 1 1 1 1 1 1 1 1 1 1

Next, set up a different portfolio problem that starts with the initial problem with an additional a turnover constraint and an equally weighted initial portfolio:

q = setTurnover(p, 0.3, 0.25); checkFeasibility(q, pwgt)

ans = 0 0 0 1 1 0 0 0 0 0

`q`

. Solving the second problem using `checkFeasibility`

demonstrates that the
efficient portfolio for PortfolioCVaR object `q`

is
feasible relative to the initial problem:qwgt = estimateFrontier(q); checkFeasibility(p, qwgt)

ans = 1 1 1 1 1 1 1 1 1 1

`checkFeasibility`

| `estimateBounds`

| `PortfolioCVaR`

- Creating the PortfolioCVaR Object
- Working with CVaR Portfolio Constraints Using Defaults
- Estimate Efficient Portfolios for Entire Frontier for PortfolioCVaR Object
- Estimate Efficient Frontiers for PortfolioCVaR Object
- Asset Returns and Scenarios Using PortfolioCVaR Object

Was this topic helpful?