Research
The math behind a sparse, fully-invested, long-only index tracker
We solve a high-dimensional convex problem with non-negativity and simplex constraints via a custom ADMM splitting. λ controls the bias-variance trade-off between tracking accuracy and portfolio sparsity.
The optimisation problem
is an matrix of constituent returns, the index return, the desired sparse, simplex-constrained portfolio weights.
L1 vs L2 — why corners give sparsity
The L1 ball's vertices align with coordinate axes — so the constraint hyperplane almost surely touches it at a vertex (sparse). The L2 ball is rotationally symmetric and has no such vertices.
ADMM updates (the three steps)
We Cholesky-factorise once per ρ-update, so each iteration costs instead of .
Pick your λ — interactive
Slide to see the bias–variance trade-off live: tighter regularisation (right) → fewer stocks → higher tracking error.
Demo data — when running against a live API, switching to /api/proxy/api/v1/lambda-path repaints the chart.
Convergence (real residuals)
Primal and dual residuals from a real synthetic 100×300 ADMM solve. Decay is sub-linear at the start, geometric near the optimum (Boyd §3.4).