Estimate Efficient Frontiers for PortfolioMAD Object

Whereas Estimate Efficient Portfolios Along the Entire Frontier for PortfolioMAD Object focused on estimation of efficient portfolios, this section focuses on the estimation of efficient frontiers. For information on the workflow when using PortfolioMAD objects, see PortfolioMAD Object Workflow.

Obtaining MAD Portfolio Risks and Returns

Given any portfolio and, in particular, efficient portfolios, the functions estimatePortReturn and estimatePortRisk provide estimates for the return (or return proxy), risk (or the risk proxy). Each function has the same input syntax but with different combinations of outputs. Suppose that you have this following portfolio optimization problem that gave you a collection of portfolios along the efficient frontier in pwgt:

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);

pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ];

p = setInitPort(p, pwgt0);
pwgt = estimateFrontier(p)
pwgt =

  Columns 1 through 8

    0.8954    0.7264    0.5573    0.3877    0.2176    0.0495    0.0000         0
    0.0310    0.1239    0.2154    0.3081    0.4028    0.4924    0.4069    0.2386
    0.0409    0.0524    0.0660    0.0792    0.0907    0.1047    0.1054    0.1132
    0.0328    0.0973    0.1613    0.2250    0.2890    0.3534    0.4877    0.6482

  Columns 9 through 10

         0    0.0000
    0.0694    0.0000
    0.1221    0.0000
    0.8084    1.0000

Note

Remember that the risk proxy for MAD portfolio optimization is mean-absolute deviation.

Given pwgt0 and pwgt, use the portfolio risk and return estimation functions to obtain risks and returns for your initial portfolio and the portfolios on the efficient frontier:

prsk0 = estimatePortRisk(p, pwgt0);
pret0 = estimatePortReturn(p, pwgt0);
prsk = estimatePortRisk(p, pwgt);
pret = estimatePortReturn(p, pwgt);
display(prsk0);
display(pret0);
display(prsk);
display(pret);
You obtain these risks and returns:
prsk0 =

    0.0256


pret0 =

    0.0072


prsk =

    0.0178
    0.0193
    0.0233
    0.0286
    0.0348
    0.0414
    0.0489
    0.0584
    0.0692
    0.0809


pret =

    0.0047
    0.0059
    0.0072
    0.0084
    0.0096
    0.0108
    0.0120
    0.0133
    0.0145
    0.0157

Obtaining the PortfolioMAD Standard Deviation

The PortfolioMAD object has a function to compute standard deviations of portfolio returns, estimatePortStd. This function works with any portfolios, not necessarily efficient portfolios. For example, the following example obtains five portfolios (pwgt) on the efficient frontier and also has an initial portfolio in pwgt0. Various portfolio statistics are computed that include the return, risk, and standard deviation. The listed estimates are for the initial portfolio in the first row followed by estimates for each of the five efficient portfolios in subsequent rows.

m = [ 0.0042; 0.0083; 0.01; 0.15 ];
C = [ 0.005333 0.00034 0.00016 0;
0.00034 0.002408 0.0017 0.000992;
0.00016 0.0017 0.0048 0.0028;
0 0.000992 0.0028 0.010208 ];

pwgt0 = [ 0.3; 0.3; 0.2; 0.1 ];

p = PortfolioMAD('initport', pwgt0);
p = simulateNormalScenariosByMoments(p, m, C, 20000);
p = setDefaultConstraints(p);

pwgt = estimateFrontier(p, 5);

pret = estimatePortReturn(p, [pwgt0, pwgt]);
prsk = estimatePortRisk(p, [pwgt0, pwgt]);
pstd = estimatePortStd(p, [pwgt0, pwgt]);

[pret, prsk, pstd]
ans =

    0.0212    0.0305    0.0381
    0.0187    0.0326    0.0407
    0.0514    0.0369    0.0462
    0.0841    0.0484    0.0607
    0.1168    0.0637    0.0796
    0.1495    0.0807    0.1009

See Also

| | |

Related Examples

More About