AQAI QuantAI research lab for systematic strategies

Automated analysis

This analysis was drafted by our research engine and has not been checked by a human editor. It may contain errors. It separates the paper’s own results from our tests, and any figures called ours come from our own backtest.

Our automated analysisOur backtest

The δ-stable portfolio and the missing benchmarks

It wins all 18 Sharpe cells against a higher target. GMV and 1/N remain untested.

2026-10-05 · 7 min read · Portfolio Optimization · US stocks

Reviewing: Enhancing Numerical Stability in Portfolio Optimization via Numerical Rank: The $$\delta $$-Stable Part of the Efficient Frontier · Claudia Fassino and Pierpaolo Uberti · Read it on openalex

Our backtest of this idea

Our automated quick test, not the paper's

Monthly δ-Stable Target versus Unrestricted Target in US-Stock Minimum-Variance Portfolios

Backtest period 2020-01-01 to 2024-07-01 · hypothetical, net of modelled costs

Why these figures are not the paper's (2)

Run on a different market than the paper

The excerpt does not identify the datasets' instruments, so an exact-universe replication cannot be established. A US-stock test preserves the proposed mechanism because numerical stability of the budget and target-return constraints does not depend on a particular asset class.

The paper's own figures describe its universe and do not carry over to ours.

Our own audit found this run does not follow the paper faithfully (5)

  • Problem 1: Minimize_x σ_p² = xᵀVx subject to μᵀx = μ_p, 1ᵀx = 1, x_i ≥ 0 for i = 1,...,n.: Retain its objective and all stated constraints but add the same 10% per-asset cap in both arms. (invalidates: The paper's unrestricted feasible frontier and its dataset-specific Table 6 performance comparisons do not directly apply.)
  • Definition 3: F_lo^δ = {x*_lo(μ_p) ∈ F_lo : μ_p ∈ [nβ/(n − δ²) − R₀, nβ/(n − δ²) + R₀] ∩ [min(μ),max(μ)]}.: Retain the stated interval and intersection, but require the selected portfolio also to satisfy the common position cap. (invalidates: Membership in the paper's F_lo^δ alone no longer guarantees feasibility for this capped implementation.)
  • Experiment Two benchmark target: μ_b = (μ_GMV + max(μ))/2, with μ_GMV obtained from the long-only constrained GMV portfolio; stable target: μ_p = β.: Keep both target formulas; obtain μ_GMV from a GMV portfolio also subject to the common position cap. (invalidates: The benchmark target can differ from the paper's benchmark; its Table 6 comparisons do not transfer.)
  • Paper Experiment Two advances the estimation window one daily observation and realizes the following observation.: Advance the estimation window and rebalance monthly, then hold until the following monthly rebalance. (invalidates: The paper's daily out-of-sample turnover, net-return and Table 6 Sharpe results do not transfer.)

1 further finding(s) are described in the note.

These are our findings about our own implementation, not criticisms of the paper. Read the figures below as a description of what we ran.

Jan 2020Total 49.0%Jul 2024
Sharpe
0.66
Total Return
49.0%
Max Drawdown
-31.1%
CAGR
9.3%
Volatility
16.5%
Beta vs SPY
0.68
Trades
1,268

What the paper reports for its own strategy

  • Out-of-sample Sharpe ratio of the μp=β (δ-stable) portfolio, daily data 2000–2020, rolling window, net of 10 bp × turnover costs; risk-free rate and annualization not stated. S&P Sectors: 0.0069 (w=120), 0.009 (w=180), 0.0125 (w=240), 0.016 (w=480).
  • Same setup, DAX: 0.0099 (w=120), 0.013 (w=180), 0.0206 (w=240), 0.0312 (w=480).
  • Same setup, ESX: 0.014 (w=120), 0.0175 (w=180), 0.0192 (w=240), 0.0172 (w=480).
  • Same setup, FTSE: 0.0318 (w=120), 0.033 (w=180), 0.0413 (w=240), 0.0389 (w=480).
  • Same setup, Nikkei: 0.0059 (w=240), 0.0162 (w=480).

The δ-stable portfolio wins all 18 reported Sharpe comparisons, but a trader still lacks the comparison that matters. Fassino and Uberti test it against a portfolio with a higher return target, never against GMV or 1/N. Their rule amounts to targeting the average expected return across the assets, with a band extending about a tenth of the Euclidean norm of the deviations around that average. After 10 basis points of trading cost, it beats the higher-target alternative in every market-and-window cell. I believe that result. I am less persuaded that numerical rank explains it.

The rank argument

The authors begin with the budget and target-return equality constraints of a long-only Markowitz problem. Stacked together, they make a 2×n matrix B: expected returns in one row, ones in the other. Daily expected returns are around 10^-4, leaving the return row close to a constant and B close to rank one. In the toy case using mean daily returns for ten S&P 500 sectors, β, their average, is 1.3654·10^-4. The Euclidean norm of their dispersion is 3.2490·10^-4; K2(B), the condition number, is 9.733·10^3.

The δ-numerical rank counts singular values above a threshold δ. If B has numerical rank one, the authors require the same rank after adding the column (μp, 1), where μp is the target return. This applies the Rouché-Capelli consistency condition numerically. Their Theorem 2 yields an interval of permissible targets. When δ is small relative to √n, the interval simplifies to β ± R. They choose δ = 1.005 times the dispersion norm divided by √(β²+1), calling portfolios inside the resulting interval the δ-stable part of the frontier.

The study uses daily returns from 3 January 2000 to 17 September 2020 across five universes: S&P 500 sector portfolios (n = 10), plus DAX (23), EURO STOXX 50 (38), FTSE 100 (69) and Nikkei 225 (181) constituents. Names without complete histories were dropped. One experiment follows turnover between adjacent frontier portfolios under the sample covariance and the identity matrix. Another rolls through windows of 120 to 480 days, comparing the μp = β portfolio with a target halfway between GMV and the maximum-return portfolio. Its Sharpe comparisons deduct 10 bp times turnover.

How wide is the band?

Substituting the chosen δ into R gives R = √(1+1/n) · √(1.005² − 1) · ‖ρμ‖, roughly 0.10 · √(1+1/n) times the dispersion norm. The band runs from β by a fixed fraction of cross-sectional dispersion. Its width rests on 1.005, which the authors explicitly describe as a judgment call. Set the multiplier to exactly 1 and R = 0; make it too large and it "distorts the concept of δ-numerical rank." The toy example instead uses δ = 3.2717·10^-4, about 1.007 times the dispersion, producing 10^-4·[0.962, 1.769]. The sector figures give a narrower [0.1054, 0.1686]·10^-3. We did not find the δ used for those figures stated.

Units contribute to the apparent ill-conditioning. The row of ones sits next to returns of order 10^-4; expressing those returns in basis points would rescale the problem. The authors put a "formal, scale-invariant link" between numerical rank and optimizer sensitivity on their future-work list. We read that as acknowledging that the current results are not scale-invariant.

Does the target steady the optimizer?

The paper's own Theorem 3 complicates that claim. At μp = β, the augmented matrix is at least as ill-conditioned as B whenever ‖ρμ‖²/n stays below √((n+1)/n)(β²+1). The paper establishes that this condition holds when δ² < n/2. Table 1 reports a condition number of 10.208·10^3 at μp = β, versus 10.138·10^3 at the band edges and 9.733·10^3 for B alone. The authors acknowledge the result and describe β as remaining admissible despite nearly collinear rows. Rank preservation supports their stability claim; they say the connection between the rank condition and reduced sensitivity to the target is examined empirically.

Yet the backtest calls the μp = β portfolio, "as established analytically in this paper," the one with the highest stability with respect to the choice of μp. Table 1 assigns that same point its highest condition number, 10.208·10^3. The conclusion says the stable target "avoids degrading the condition number" even though Table 1 shows an increase from 9.733·10^3 to 10.208·10^3.

Long-only geometry offers a simpler account of the smooth weights. With the identity matrix in place of the covariance, the DAX portfolio at μp = 0.2875·10^-3 allocates 0.0435 to each of its 23 names, or 1/23. Weights then change linearly across the band. In the sector identity case, x1 increases 0.0022 per grid step. Turnover spikes near the frontier ends as nonnegativity constraints bind and positions narrow to a few names. That corner effect needs no singular-value calculation, while the theory addresses only the two equality constraints.

Three positions in the sector book

For a daily sector allocator, the S&P band [0.1054, 0.1686]·10^-3 corresponds to about 2.7% to 4.2% a year in arithmetic terms. At its lower edge, the sample-covariance portfolio puts 99.86% of capital in three sectors, with weights of 0.1379, 0.5363 and 0.3244. Across the band, x6 climbs to 0.6795 as x9 falls to 0.1274. That x9 move is 19.7 points, from 0.3244 to 0.1274, over nine grid steps of 0.07 bp a day in target return. It is smoother than the extremes, yet a target change of 0.07 bp a day still moves large positions in a concentrated book.

Table 2 records smaller weights flickering too: x1 goes 0.0008, 0.0000, 0.0014 at adjacent targets. Those changes resemble solver-tolerance noise, which the δ band does not address. The authors call the coincidence of the GMV and β portfolios here coincidental.

What do the 18 wins establish?

The rolling results deserve attention. At w = 240, FTSE records 0.0413 for the β portfolio and 0.0091 for the benchmark. At w = 180, DAX records 0.013 against −0.0104. The gaps shrink at the longest window in four of five universes: S&P sectors show 0.016 against 0.011, and DAX 0.0312 against 0.0242. Nikkei goes the other way, its gap widening from 0.0109 at w = 240 (0.0059 against −0.005) to 0.0119 at w = 480 (0.0162 against 0.0043).

We did not find a stated annualization convention or risk-free rate. These figures look daily; on that reading, 0.0413 is about 0.66 annualized. We also did not find gross Sharpes, backtest turnover or significance tests. The table therefore cannot show how much of the gap comes from the 10 bp charge.

The benchmark leans harder on estimated means because its target lies halfway toward the maximum-return portfolio. The paper cites Chopra and Ziemba's finding that mean-estimation errors do roughly ten times as much damage as variance-estimation errors. An average-μ portfolio beating a high-μ portfolio fits that finding regardless of numerical rank. DAX makes the issue especially plain: its entire stable band, [0.1856, 0.3894]·10^-3, lies to the left of GMV. The authors flagged this dominated region in advance, and the β portfolio still wins at every window.

To make the rank rule convincing, the β portfolio needs to beat GMV and 1/N with the same 10 bp costs. The paper tests only two portfolios, although it cites DeMiguel, Garlappi and Uppal's 1/N result in its defence. Under the identity matrix, β gives exactly 1/N; under the sample covariance, it produces a three-sector book. The absent 1/N column matters. Removing names without full 2000 to 2020 histories also introduces survivorship, shared by both arms of the comparison.

Our US-stock run

We could not trade the paper's five universes. We adapted the rule to US equities, selecting the 60 largest non-ADR US stocks by capitalization each year. Each month, we estimate means and the sample covariance using 240 trailing daily returns, then trade a long-only minimum-variance portfolio targeting β with a 10% cap per name. Commissions are $0.004 a share, subject to a $1 minimum. The run spans 1 January 2020 to 1 July 2024.

The figures in the strip above are ours, annualized from 2 January 2020. The paper's Sharpes, including 0.0413 for FTSE at w = 240, appear to be daily figures from daily-rebalanced US sector, European and Japanese books over 2000 to 2020. Those figures describe different assets and a different quantity. They are not comparable with ours.

Our run has two limits that bear directly on the comparison. We solved the midpoint benchmark each month but did not trade it, so this pass cannot assess the paper's central result. The 10% cap requires at least ten names, altering the frontier and its portfolios inside the δ band. It leaves the band itself unchanged because that depends only on μ. Our book had 16.55% annualized volatility and a beta of 0.68 to SPY. A fully invested long-only portfolio of 60 mega-caps carries market exposure by construction; choosing β moves it along the frontier without removing that exposure. Our yearly membership lists lack publication timestamps, leaving possible look-ahead in membership on our side. This is one automated pass on a substituted market, rather than a verdict on the authors' work.

GMV and 1/N under the same rolling windows and 10 bp costs would change my view if the β portfolio remained ahead in most of the 18 cells.

Our backtest stops at 2024-07-01, and everything after that date is deliberately left untouched so the same strategy can be checked out of sample later.

How our backtest worked

The steps the code we ran actually executed, from its strategy card. Ours, not the paper's — it is one automated implementation of the idea, not the authors' own.

For each traded year, select the 60 largest eligible non-ADR US stocks
from that year's screening rows; use the same membership in both arms.
On the first trading session of each month:
  Use the latest 240 complete daily-return observations available before execution.
  Require complete observations for included assets and window length &gt; asset count.
  Estimate arithmetic daily means μ and sample covariance V.
  Set β = mean(μ); solve the capped, long-only GMV portfolio.
  Set benchmark target = (μ_GMV + max(μ)) / 2.
  Independently minimize xᵀVx for each target, subject to
    μᵀx = target, sum(x) = 1, and 0 ≤ x_i ≤ 0.10.
  Check solver feasibility and the prescribed singular-value/rank diagnostics;
  flag failures rather than changing a target.
  Trade only the β-target portfolio at the session's observed close.
  Hold to the next monthly execution; do not credit pre-execution returns.
Record benchmark diagnostics, skipped or infeasible dates, and distinct
adjacent-target, consecutive-optimum, and actually traded turnover.