Benchmark Tracker
Long-only enhanced indexing that maximises expected excess return subject to a tracking-error budget against a benchmark (Nifty, Sensex, or any of the mid/small-cap families). The portfolio is built to outperform but never to drift far from the index in tracking-error space.
Overview
Roll (1992) gave the canonical mean-tracking-error decomposition: an active portfolio's deviation from a benchmark can be summarised by its expected excess return and the volatility of that excess return (the tracking error). For a manager with a benchmark mandate, the natural objective is to maximise information ratio - expected excess return per unit of tracking error - subject to a tracking-error budget set by the client.
Jorion (2003) studied tracking-error-constrained portfolios and showed that the resulting frontier is well-defined when the tracking-error budget is interpreted as a hard constraint rather than as a target. Rudolf, Wolter and Zimmermann (1999) gave the linear-programming formulation that allows a symmetric absolute-deviation tracking error to be embedded directly in the optimiser.
FolioLab implements the convex tracking-error-constrained problem via skfolio's MeanRisk estimator with a tracking-error constraint. The portfolio is long-only.
The benchmark enters as a return series, not as a weight vector. The optimiser is fitted against the chosen index's own historical returns, aligned date by date with the asset returns. No benchmark constituent weights are read, stored, or required anywhere in this method. That is worth stating plainly, because the classical exposition of tracking error is written in weight space and this implementation is not.
The tracking-error budget is not a user input. It is fixed in the dispatch at max_tracking_error = 0.01, applied to the periodic (daily) return series the estimator is fitted on.
Mathematical Formulation
Notation
- - portfolio weights, summing to 1, long-only
- - the asset return matrix over the aligned window
- - the benchmark return series (Nifty, Sensex, etc.), one value per date
- - expected-return vector
- - tracking-error budget, fixed at 0.01 on the periodic return series
There is no in this formulation. The benchmark is , a series of returns.
Tracking error
The tracking error is the root-mean-square difference between the portfolio's realised return and the benchmark's realised return, date by date, over the aligned window. This is the definition skfolio's max_tracking_error applies.
The classical weight-space form of Roll (1992), , is the same quantity when the benchmark return series is exactly and the covariance is the sample covariance of the same window. That does not hold here. The benchmark index return series is taken as given, its constituents are not restricted to the assets in the portfolio, and no weight vector for it is constructed. Read the RMSE form above as the definition, and the weight-space form as background.
Optimisation problem
The first constraint is the tracking-error budget. The second is the long-only simplex constraint. The third (optional) is a per-name weight bound from the constraints you submit with the run, which is useful for liquidity or single-issuer limits in regulated mandates. It bounds the weight itself, not the active weight against a benchmark holding: this method never forms a benchmark holding to measure an active weight against.
Information ratio
At the optimum the portfolio sits on the frontier of expected excess return versus tracking error; the slope of that frontier at any point is the information ratio. Increasing always weakly improves expected excess return but at the cost of larger possible underperformance in any given period.
Setting the tracking-error budget
The budget is fixed, not chosen. Every run of this method uses max_tracking_error = 0.01. The request has no field for it. The market context below explains how mandates are usually sized, and it is background for reading the result rather than a setting you can enter.
For Indian large-cap mandates, typical institutional tracking-error budgets are 1-3% annualised. SEBI-defined enhanced index funds in practice run at 1-2% TE; quasi-active mandates 3-5%; concentrated active strategies 5-8%. Choueifaty-style smart-beta products often target 3-5% TE relative to a cap-weighted parent index.
An unconstrained run can relax the budget. The ladder adds a rung at 1% and a rung at 2%, and keeps only the rungs above the requested value. Because the requested value is already 1%, the one extra rung is 2%. If no solver reaches 0.01, the optimiser retries at 0.02 and returns the first portfolio it can solve. It records requested_max_tracking_error, applied_max_tracking_error and tracking_error_relaxed on the result, so a relaxed solve is visible in the output. Read those fields before you report the tracking error of a portfolio from this method.
A run that carries constraints does not relax anything. It has one rung. If the requested tracking error cannot be met under your constraints, the run fails with that reason rather than returning a wider portfolio.
The trade-off to communicate to clients: a 3% TE means in roughly two thirds of years the portfolio's annual return will be within plus or minus 3 percentage points of the benchmark; in roughly one year in twenty it will deviate by more than 6 percentage points. This is the mandate-design lever.
Advantages & Limitations
Advantages
- Mandate aligned: Speaks the language of benchmarked institutional investors.
- Ceiling on drift: Tracking error is a constraint, not a penalty term. On a constrained run it is a hard ceiling. On an unconstrained run it can be relaxed to 1% or 2% when no solver reaches the requested level, and the result says so.
- Convex QP: Solves quickly and deterministically.
- Composable constraints: Per-name weight bounds, asset exclusions, and group sum limits such as sector caps all add as extra rows on the same program. Turnover budgets are not available on this or any method.
Limitations
- Symmetric in TE: Penalises upside deviation as well as downside.
- Requires expected-return inputs: All the usual MVO sensitivity to applies.
- Benchmark dependence: The portfolio is anchored to whatever the benchmark is, including its concentration risks.
- TE is variance-based: A linear-programming MAD formulation may better match certain mandates.
References
- Roll, R. (1992). "A Mean/Variance Analysis of Tracking Error." The Journal of Portfolio Management, 18(4), 13-22.
- Jorion, P. (2003). "Portfolio Optimization with Tracking-Error Constraints." Financial Analysts Journal, 59(5), 70-82.
- Rudolf, M., Wolter, H.-J., & Zimmermann, H. (1999). "A Linear Model for Tracking Error Minimization." Journal of Banking & Finance, 23(1), 85-103.
- Grinold, R. C., & Kahn, R. N. (2000). Active Portfolio Management (2nd ed.). McGraw-Hill.
- Goodwin, T. H. (1998). "The Information Ratio." Financial Analysts Journal, 54(4), 34-43.
- Palomar, D. P. (2025). Portfolio Optimization: Theory and Application. Cambridge University Press, Chapter 13 (Index Tracking Portfolios), Section 13.4 (Enhanced Index Tracking).
- skfolio documentation -
skfolio.optimization.MeanRiskwith a tracking-error constraint.
Not investment advice. Past performance is not indicative of future results.