Sometimes, 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 MAD portfolio sets and portfolios are time consuming and are best done offline.
So, the portfolio optimization tools have specialized functions to validate MAD
portfolio sets and portfolios. For information on the workflow when using
PortfolioMAD objects, see PortfolioMAD Object Workflow.
Since it is necessary and sufficient that your MAD portfolio
set must be a nonempty, closed, and bounded set to have a valid portfolio
optimization problem, the
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 MAD portfolio set which is an empty set because the initial
0 is too far from a portfolio that
satisfies the budget and turnover constraint:
p = PortfolioMAD('NumAssets', 3, 'Budget', 1); p = setTurnover(p, 0.3, 0);
If a MAD portfolio set is empty,
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 MAD portfolio set as follows:
p = PortfolioMAD('AInequality', [1 -1; 1 1 ], 'bInequality', 0); [lb, ub, isbounded] = estimateBounds(p)
lb = -Inf -Inf ub = 1.0e-008 * -0.3712 Inf isbounded = 0
estimateBoundsreturns (possibly infinite) bounds and sets the
false. The result shows which assets are unbounded so that you can apply bound constraints as necessary.
Finally, suppose that you created a
PortfolioMAD object 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
p = PortfolioMAD; 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 MAD portfolio set specified in a
PortfolioMAD 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
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
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 = PortfolioMAD; p = setScenarios(p, AssetScenarios); p = setDefaultConstraints(p); 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 1 1 1 0 0 0 0 0
q. Solving the second problem using
checkFeasibilitydemonstrates that the efficient portfolio for
qis feasible relative to the initial problem:
qwgt = estimateFrontier(q); checkFeasibility(p, qwgt)
ans = 1 1 1 1 1 1 1 1 1 1