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

Gaussian KL ambiguity returns portfolios to the mean-volatility frontier

The joint mean constraint makes the conic formulation exact, while leaving optimal weights on the nominal frontier.

2026-10-22 · 6 min read · Distributionally Robust Portfolio Optimization · US-listed ETFs

Reviewing: Distributions or Quantiles? A Convex Variational Theory of Worst-Case Risk · Jianjun Gao, Jonathan Li, Zhen Wang et al. · Read it on arxiv

Our backtest of this idea

Our automated quick test, not the paper's

Monthly Mean-Anchored Gaussian KL-ES Study — Platform-Capped Implementation

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

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

The paper reports no results of its own

This is a theoretical paper — derivations and proofs, with no measurement on market data. The backtest below is a strategy we built from its idea, not a test of anything the authors claimed.

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

  • Task adaptation with fixed risk aversion: minimize_{w,v} −m_t⊤w + gamma·chi(0.975,epsilon)·v, subject to ||B_t w||_2 ≤ v, B_t⊤B_t = Sigma_t, Σ_i w_i = 1, 0 ≤ w_i ≤ 0.40.: Preserve the objective and cone, but tighten the implemented maximum target weight to 0.20. (invalidates: The intended empirical test of ambiguity-dependent allocation changes; interpretation of realized differences as effects of stronger volatility aversion under the requested 40% feasible set)

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 44.6%Jul 2024
Sharpe
0.67
Total Return
44.6%
Max Drawdown
-28.9%
CAGR
8.6%
Volatility
14.9%
Beta vs SPY
0.62
Trades
275

A Gaussian covariance model already gives you the tools to build this paper's ambiguity-adjusted expected-shortfall portfolio. Gao, Li, Wang and Zhang prove that worst-case ES over a mean-anchored KL ball around N(μ̂, Σ̂) equals μ_w + σ_w·χ(α, ε). The nominal portfolio mean loss is μ_w, its volatility is σ_w, and χ is a single calibrated constant. The same χ applies to every portfolio in any dimension d > 1. The allocation problem becomes a second-order cone program.

The equality is exact. For a desk, it is the paper's most useful result, and it explains why the model cannot generate extra return on its own. The authors make no empirical claim: their figures all come from synthetic parameter examples or numerical checks of the algorithms. They report no trading result for anything below to confirm or contradict.

What is being optimised?

Most of the paper concerns worst-case spectral risk, a weighted average of loss quantiles that includes ES as a special case. The authors choose the space in which the entire ambiguity set stays convex. Quantile space accommodates ES floors and caps, along with one-dimensional Wasserstein balls. Distribution space accommodates exact partial moments, which are affine in the density and generally nonconvex in the quantile. It also accommodates KL budgets, which are convex in the density. Functional KKT conditions determine the form of the worst-case law in either space; a short calibration supplies its parameters.

Some examples push against intuition. For an exponential reference with Wasserstein radius 0.35, a power spectrum with β = 3 and α = 0.9, increasing an ES stress floor beyond c† = 4.010 reduces worst-case spectral risk. The extremal law has more tail ES and less risk under that spectrum. In the mean-variance example with μ = 3 and σ = 10, α = 0.9 and spectrum 3u², imposing an ES band changes nothing until the band excludes the benchmark ES of about 22.1. Once a cap binds, the worst-case quantile flattens, creating an atom in the law. A binding floor opens a gap in the support instead.

The portfolio section supplies the result a desk can use. Its ambiguity set contains every joint law within KL radius ε of N(μ̂, Σ̂), subject to every asset mean equalling μ̂. Under Lemma 4, projecting that set onto the loss w'Y gives exactly the univariate mean-anchored KL ball around N(μ_w, σ_w²), at the same ε.

The proof is short. The entropy chain rule separates joint KL into marginal and conditional terms. Reweighting the nominal law through w'Y alone leaves the conditional term at zero. For a Gaussian, the conditional mean of Y given w'Y = t is affine in t. Integrating against any reweighted marginal whose mean is μ_w therefore recovers the full vector μ̂. Every univariate law has a joint extension with the same KL cost and all asset means preserved.

The frontier stays nominal

The authors explicitly place the optimal allocations on the nominal mean-standard-deviation frontier over the feasible portfolio set. They cite Hu and Hong and Ahmadi-Javid for earlier conic formulations in KL and entropic-VaR models. Their claimed contribution is exactness under the joint mean constraint. That is an honest scope, with a clear limit on what practitioners should expect.

Changing ε changes χ and moves the allocation along the nominal Markowitz frontier. The paper proves χ(α, ε) ≥ ES_α(N(0,1)); as ε shrinks, χ approaches the Gaussian ES multiplier. Set a mean-standard-deviation optimizer's risk coefficient to χ and it produces the same weights. A nominal Gaussian ES optimizer also produces them when its confidence level is chosen to match χ. Our earlier review reached the same conclusion for worst-case CVaR (Worst-case CVaR still buys a Markowitz frontier portfolio). Any claimed edge must beat those two baselines with coefficients matched. Otherwise, the new name buys a different degree of risk aversion.

Mean estimation error gets through untouched

Every asset mean is fixed at μ̂ by the ambiguity set. The KL budget can change the distribution's shape while leaving those means alone.

With a 252-day estimation window, the worst-case program takes the error in μ̂ as given and allocates it across assets just as mean-variance would. It also takes Σ̂ as given through σ_w. As the paper notes, the worst-case joint law can depend on w and can have a covariance different from the nominal one. That covariance change occurs in the stress scenario. It never reaches the weights.

We did not find a data-based procedure for selecting ε. Its only route into the weights is through χ, so choosing ε amounts to choosing risk aversion. A practitioner would calibrate it against a volatility or drawdown budget, as with any risk coefficient. Turnover and costs match those of a mean-standard-deviation book using coefficient χ. The paper reports no turnover figures, consistent with its lack of a backtest.

Checking the solvers on toy grids

The numerical section does what it promises: it tests the algorithms. With an 80-node quantile grid, the proximal method of multipliers stopped at 60 outer iterations. The stationarity residual was 2.94×10⁻⁷, and the largest node deviation from the explicit discrete optimizer was 1.82×10⁻⁷.

The density implementation required 261 outer iterations at both 80 and 160 nodes. Its reported risk values were 0.71870715 and 0.71870693. For comparison, the feasible density 1 + cos(2πx) gave 0.70466, and the uniform gave 2/3. The authors say convergence under grid refinement has not been established. They also explain that the KL solutions have analytical certification outside the algorithm's smoothness assumptions. These are checks of solver accuracy on toy problems. They tell us nothing about portfolio performance.

Our run ended at equal weight

We ran a monthly allocator across SPY, QQQ, IWM, TLT and GLD from 2020-01-01 to 2024-07-01. These settings are ours. The paper specifies no trading universe, estimation window or frequency. At each month-end close, we estimated means and covariance from 252 daily simple returns. Using estimated mean return vector m, we solved min −m'w + 0.05·χ·v with ‖Bw‖₂ ≤ v, at α = 0.975, for KL radii 0, 0.01, 0.05 and 0.10. Our 0.05 risk weight departs from the paper's formulation. At zero radius, the coefficient is the Gaussian 97.5% ES multiplier, about 2.34.

Trades executed in the next session's open auction. We charged $0.004 a share, subject to a $1 minimum and a 1% cap per order. All return figures below are net of those commissions. We did not model market impact.

Our run failed to test the idea, and we own that failure.

We applied a 20% position cap instead of the intended 40%. Five long-only weights summing to one with a 20% cap permit exactly one allocation: 20% in each asset. Every radius therefore produced the same equal-weight target at every rebalance. From 2020-01-01 to 2024-07-01, that mix earned a total return of 44.64%, with a Sharpe of 0.67 (Sortino 0.88). Annualised volatility was 14.93%, and maximum drawdown was -28.87% (Calmar 0.30).

Those return and risk figures describe a monthly-rebalanced 20/20/20/20/20 mix of these five ETFs from 2020 to mid-2024. They provide no evidence that χ improves anything. The same cap error held weights fixed in our earlier ETF run (A wider posterior can make expected shortfall look safer). A usable rerun requires a cap that binds only occasionally at most. Its benchmark must also be the matched-coefficient mean-standard-deviation book: the paper's Theorem 8 says that book has the same weights.

Where the result earns its keep

The projection identity is clean and holds exactly. A d-dimensional distributional inner problem reduces to a single univariate calibration. The paper also supplies the closed-form risk-attribution gradient, ∇V(w) = μ̂ + χ·Σ̂w/σ_w. A risk desk seeking an ambiguity-adjusted ES number for every book from one constant can use that today. A desk seeking better allocations runs into the paper's own efficiency statement. The weights lead straight back to the mean estimates, which this ambiguity set was designed to leave unquestioned.

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.

Specification-level procedure; the truncated source does not establish full implementation compliance:

Before allocation:
  Set alpha = 0.975 and gamma = 0.05.
  Use analytic chi(alpha, 0) for zero ambiguity.
  Calibrate and cache chi for epsilon in {0.01, 0.05, 0.10}
  using mean-zero two-piece Gaussian exponential tilts.
  Require calibration residuals <= 1e-8; log failures without substitutes.

After each completed month-end close:
  Require 253 synchronized adjusted closes for all five ETFs.
  Calculate 252 adjacent-session simple returns, their mean m,
  and sample covariance Sigma with denominator 251; do not annualize.
  Check positive definiteness; repair only when necessary and log repairs.
  Form B with B'B = Sigma.
  Solve min -m'w + gamma * chi * v
    subject to ||Bw||_2 <= v, sum(w) = 1, and 0 <= w_i <= 0.20.
  Independently validate feasibility to 1e-7.
  Freeze targets, necessarily w_i = 0.20, for next-session execution.

At the next trading session's adjusted open:
  Value existing shares and cash at current execution prices.
  Size fully invested targets self-financing after specified trading charges.
  Validate positive post-cost NAV and gross leverage against current NAV.
  Execute the entire rebalance only with valid prices and validation.
  Otherwise retain existing shares; an unestablished failed-solver book
  uses the specified equal-weight initialization when execution is valid.

Between executions:
  Hold shares, preserving overnight and intraday ownership.
  Do not rebalance merely because weights drift.
  Mark daily net wealth at adjusted closes; do not forward-fill missing marks.
  Mark the final close without mandatory terminal liquidation.

Accounting distinction:
  The supplied reported metrics use platform post-backtest commission
  recalculation; reconcile this with the specification's 5 bp cost rule.