Suppose that you want to identify an efficient set of portfolios that minimize the variance of the difference in returns with respect to a given target portfolio, subject to a given expected excess return. The mean and standard deviation of this excess return are often called the active return and active risk, respectively. Active risk is sometimes referred to as the tracking error. Since the objective is to track a given target portfolio as closely as possible, the resulting set of portfolios is sometimes referred to as the tracking error efficient frontier.

Specifically, assume that the target portfolio is expressed as an index weight vector, such that the index return series may be expressed as a linear combination of the available assets. This example illustrates how to construct a frontier that minimizes the active risk (tracking error) subject to attaining a given level of return. That is, it computes the tracking error efficient frontier.

One way to construct the tracking error efficient frontier is to explicitly form the target return series and subtract it from the return series of the individual assets. In this manner, you specify the expected mean and covariance of the active returns, and compute the efficient frontier subject to the usual portfolio constraints.

This example works directly with the mean and covariance of the absolute (unadjusted) returns but converts the constraints from the usual absolute weight format to active weight format.

Consider a portfolio of five assets with the following expected returns, standard deviations, and correlation matrix based on absolute weekly asset returns.

NumAssets = 5; ExpReturn = [0.2074 0.1971 0.2669 0.1323 0.2535]/100; Sigmas = [2.6570 3.6297 3.9916 2.7145 2.6133]/100; Correlations = [1.0000 0.6092 0.6321 0.5833 0.7304 0.6092 1.0000 0.8504 0.8038 0.7176 0.6321 0.8504 1.0000 0.7723 0.7236 0.5833 0.8038 0.7723 1.0000 0.7225 0.7304 0.7176 0.7236 0.7225 1.0000];

Convert the correlations and standard deviations to a covariance
matrix using `corr2cov`

.

ExpCovariance = corr2cov(Sigmas, Correlations);

Next, assume that the target index portfolio is an equally weighted portfolio formed from the five assets. The sum of index weights equals 1, satisfying the standard full investment budget equality constraint.

Index = ones(NumAssets, 1)/NumAssets;

Generate an asset constraint matrix using `portcons`

. The constraint matrix `AbsConSet`

is
expressed in absolute format (unadjusted for the index), and is formatted
as `[A b]`

, corresponding to constraints
of the form `A*w <= b`

.
Each row of `AbsConSet`

corresponds to a constraint,
and each column corresponds to an asset. Allow no short-selling and
full investment in each asset (lower and upper bounds of each asset
are 0 and 1, respectively). In particular, note that the first two
rows correspond to the budget equality constraint; the remaining rows
correspond to the upper/lower investment bounds.

AbsConSet = portcons('PortValue', 1, NumAssets, ... 'AssetLims', zeros(NumAssets,1), ones(NumAssets,1));

Now transform the absolute constraints to active constraints
with `abs2active`

.

ActiveConSet = abs2active(AbsConSet, Index);

An examination of the absolute and active constraint matrices
reveals that they differ only in the last column (the columns corresponding
to the `b`

in `A*w <= b`

).

[AbsConSet(:,end) ActiveConSet(:,end)]

ans = 1.0000 0 -1.0000 0 1.0000 0.8000 1.0000 0.8000 1.0000 0.8000 1.0000 0.8000 1.0000 0.8000 0 0.2000 0 0.2000 0 0.2000 0 0.2000 0 0.2000

In particular, note that the sum-to-one absolute budget constraint becomes a sum-to-zero active budget constraint. The general transformation is as follows:

$${b}_{active}={b}_{absolute}-A\times Index.$$

Now construct the `Portfolio`

object
and plot the tracking error efficient frontier with 21 portfolios.

p = Portfolio('AssetMean', ExpReturn, 'AssetCovar', ExpCovariance); p = p.setInequality(ActiveConSet(:,1:end-1), ActiveConSet(:,end)); [ActiveRisk, ActiveReturn] = p.plotFrontier(21); plot(ActiveRisk*100, ActiveReturn*100, 'blue') grid('on') xlabel('Active Risk (Standard Deviation in Percent)') ylabel('Active Return (Percent)') title('Tracking Error Efficient Frontier')

Of particular interest is the lower-left portfolio along the
frontier. This zero-risk/zero-return portfolio has a practical economic
significance. It represents a full investment in the index portfolio
itself. Each tracking error efficient portfolio (each row in the array `ActiveWeights`

)
satisfies the active budget constraint, and thus represents portfolio
investment allocations with respect to the index portfolio. To convert
these allocations to absolute investment allocations, add the index
to each efficient portfolio.

ActiveWeights = p.estimateFrontier(21); AbsoluteWeights = ActiveWeights + repmat(Index, 1, 21);

`abs2active`

| `active2abs`

| `estimateFrontier`

| `frontier`

| `pcalims`

| `pcgcomp`

| `pcglims`

| `pcpval`

| `plotFrontier`

| `portalloc`

| `portcons`

| `Portfolio`

| `portvrisk`

| `setInequality`

- Portfolio Optimization Functions
- Portfolio Selection and Risk Aversion
- Plotting an Efficient Frontier Using portopt

Was this topic helpful?