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

A Treasury flow drew 34 million standard deviations

Tighter scales cut the largest draw to 14.72; historical simulation still won on unseen dates

2026-10-14 · 7 min read · Rates risk management · US Treasury bond ETFs for risk-managed positions, using US Treasury yields as signal inputs

Reviewing: Tail Instability and Scale Control in Conditional Normalizing Flows for Treasury Yield-Curve Scenarios · Arin Mohanty · Read it on arxiv

Our backtest of this idea

Our automated quick test, not the paper's

Controlled-Scale Treasury Flow versus Historical Simulation for ETF Tail-Risk Control

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 paper trades treasury; we have no price data for it, so the strategy below runs on US Treasury bond ETFs for risk-managed positions, using US Treasury yields as signal inputs instead. The judge did not state why the mechanism survives the swap.

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 (3)

  • eq (10) exploratory three-month constant-maturity price proxy: P_t = 100 exp{−0.25y_t/100}, L_{t+1} = P_t − P_{t+1}.: Retained verbatim for identification but not used in ETF returns, loss scenarios, fills or portfolio accounting; estimate an ETF-specific mapping instead. (invalidates: Appendix C Table 6 proxy VaR breach counts and test p-values as predictions for ETF losses)
  • Paired-comparison evaluation windows: Bootstrap resampling and equal-window weighting use the extension's eligible monthly windows rather than the paper's five selected 60-date windows. (invalidates: The paper's Section 5.2 paired 95% MSE-difference intervals and Section 5.3 paired 95% Energy Score-difference interval as confidence intervals for this ETF backtest.)
  • The paper states after Eq. (5) that location-head MSE must be reported separately from Monte Carlo scenario-mean MSE because residuals need not have zero mean; Table 4 shows why (0.3376 versus 33,908.95 for the original flow), but the spec copies Eqs. (5) and (8) without requiring either MSE in its evaluation, which specifies only ETF risk-calibration tests; this separate-assessment requirement was present in the method block and lost in specification-writing.

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 0.2%Jul 2024
Sharpe
0.03
Total Return
0.2%
Max Drawdown
-5.6%
CAGR
0.2%
Volatility
6.2%
Beta vs SPY
0.09
Trades
69

What the paper reports for its own strategy

  • Stabilized flow, development windows (5×60 dates, 2002–2026; forecast metrics only, no trading strategy or costs): standardized MSE 0.6223 (location head), 90% marginal coverage 92.85%, Energy Score 1.5112
  • Stabilized flow, subsequent window April 13–July 8, 2026 (frozen checkpoints): scenario-mean MSE 0.3351, 90% coverage 96.82%, Energy Score 1.1645, marginal CRPS 0.2981
  • Exploratory 3-month constant-maturity VaR proxy, April 29, 2025–April 30, 2026 (252 origins): frozen 95% VaR 12 breaches; monthly-refit 95% VaR 16 breaches; 99% VaR 6 breaches for both

A neural yield-curve model can give a sensible point forecast and a disastrous Monte Carlo mean. In Mohanty's paper, the two differ by a factor of roughly 100,000 while the headline scores look fine. Anyone using its scenarios for risk should compare those means first.

The curve model and its test

Mohanty models daily Treasury yield changes at eleven maturities, from 1 month to 30 years. The yields are fitted zero-coupon rates reconstructed from the Federal Reserve's Gürkaynak, Sack and Wright curve parameters. The panel contains 16,170 daily dates, from June 14, 1961 to April 10, 2026. Each change is standardized using its pre-window mean and standard deviation.

A two-layer, 64-unit LSTM reads the previous 60 change vectors. Its location head produces the point forecast; its 24-dimensional context conditions a normalizing flow that models the residual around that forecast. Eight affine coupling layers transform the residual. To make a scenario, the model draws a latent vector, runs it backwards through the flow, then adds the location head's output. Mohanty uses those joint curve scenarios for Monte Carlo means and tail averages.

The original flow has a learnable Student-t base and clamps each coupling log-scale to [-3, 3]. The stabilized flow uses a standard Gaussian base and the smooth bound s = 0.5 tanh(s_raw/0.5). Under that rule, a coupling multiplies a coordinate by a factor between e^-0.5 and e^0.5. Mohanty evaluates one-step-ahead forecasts on five 60-date windows starting in 2002, 2008, 2014, 2020 and 2026, fitting one model per fold. A sixth window, April 13 to July 8, 2026, uses frozen fold-5 checkpoints. Mohanty recorded the plan locally before downloading its data. The plan was not publicly preregistered, and local timestamps cannot independently verify that sequence. Comparators include fixed-pool 252-day historical simulation, VARs and other flows.

Behrmann and coauthors documented exploding inverses in invertible networks; Andrade proposed controls on affine-coupling scales. The paper cites both. Mohanty's addition is a frozen, equal-sample demonstration on rates data in which the failure escapes the standard density score.

A draw the log score missed

Each model generated 600,000 vectors on the new window. The original flow's largest absolute standardized coordinate reached 3.43×10^7. Coordinates above 20 made up 9.79×10^-5 of the sample, roughly 650 wild values among 6.6 million generated coordinates.

A few hundred were enough. The scenario-mean MSE was 33,908.95, against 0.3376 for the location head. The training-mean baseline was 0.33730. The point forecast looked ordinary; the simulation around it was unusable.

The clamp still allowed an inverse coupling to multiply a coordinate by as much as e^3, about 20.09, across eight layers. Translations and ActNorm parameters had no bounds. They remain unbounded in the stabilized model, whose scale rule therefore places no cap on the full output. Mohanty's layer audit found large latent draws acting together with inverse scale factors and translations. In the development stress audit, which used up to 50,000 samples per origin, the largest value reached about 7.07×10^10. Eighteen of the twenty largest walk-forward extremes fell at the reconstructed 20-year coordinate; its early values can run beyond the maturities supporting the fit. The new window's largest draw occurred at the extrapolated 3-month point. Yet the 3-year coordinate reached 5.97×10^6, placing the failure inside the supported range as well.

The original flow scored -38.77 on joint negative log likelihood, better than the stabilized flow's -37.42. Mohanty says average log score failed to flag the tail problem. There is another reason to treat that score cautiously: as Mohanty concedes, eleven coordinates drawn from a low-dimensional fitted curve complicate joint density scores. An NLL near -38 in eleven dimensions describes density concentrated on a thin surface. I read the -38.77 chiefly as a reward for matching the fitted curve's structure, with little to say about rare far-out mass.

How far did the tighter flow get?

With equal sample counts, the stabilized flow's maximum was 14.72, against 3.43×10^7 for the original. It generated no coordinate above 20. Across the five development windows, its 3 million vectors had fold maxima from 13.24 to 17.33, with nothing non-finite. That reduction is substantial.

The empirical comparison is less comforting. The largest realized standardized move in any development window was 5.25, in 2020. Historical simulation's new-window maximum was 3.71. A draw of 14.72 still extends about four times beyond that empirical pool.

Mohanty is clear about the attribution problem. The base and the scale bound changed together, so the comparison cannot isolate either effect. Screens on folds 1 and 2 suggest both mattered. Removing the bound caused a non-finite training loss. A Student-t base with the tight bound and a Gaussian base with a loose bound each produced larger extremes, though those runs differed in training length or sample counts. There is one model per fold. A seeding-order bug leaves deterministic training reproduction unestablished, while checkpoint evaluation does replay. The threshold of 20 was chosen during development. Another comparator, an LSTM-conditional RealNVP with different layer counts and scale controls, reached 1502.52 on the development windows. The extreme-draw problem extends beyond this architecture.

Historical simulation on unseen dates

The 252-day historical simulation led on the new window. Its Energy Score, which measures the joint scenario cloud against the realized curve change with lower values preferred, was 1.1348. The original flow scored 1.1613 and the stabilized flow 1.1645. Historical simulation also led on marginal CRPS: 0.2927 against 0.3022 and 0.2981. Its 90% coverage was 91.52%, compared with 96.82% for the stabilized flow. Stabilized-flow intervals were 36% wider than historical simulation's, 2.326 versus 1.712. The original flow's interval width was 2.101 at 95.91% coverage.

Historical simulation had a timing advantage, which Mohanty discloses. Its pool used the 252 changes immediately before April 13; neural-model training ended before January 15. A quarterly refit might close some of the gap. The paper does not show that happening.

Results on the development windows are much closer. Energy Score was 1.5040 for historical simulation and 1.5112 for the stabilized flow, a difference of 0.0072 with a block-10 interval of [-0.0305, 0.0406]. Average coverage favored the flow, 92.85% versus 85.64%. But its coverage fell to 87.12% in 2008 and 85.61% in 2020. The stabilized location head beat the training-mean baseline by 0.0061 standardized MSE (0.97%), with an interval of [-0.0176, 0.0035]. On raw RMSE, the baseline led by 6.279 bp to 6.320 bp.

Our SHY, IEF and TLT adaptation

Mohanty's paper trades nothing. We built an adaptation using eleven FRED constant-maturity yields, from 1-month to 30-year, in place of the reconstructed zero-coupon panel. The positions are in SHY, IEF and TLT. This is not a replication: the paper evaluates forecasts on reconstructed Gürkaynak-Sack-Wright yields, whereas we feed FRED yields into an ETF exposure rule. Its reported tail failure reaches our rule only through a 1% VaR trigger. The paper's own risk appendix also trains on eleven FRED constant-maturity series. The flow's sampling mechanism carries over unchanged, and its extremes matter here only when they push estimated VaR past the trigger.

We refit the stabilized flow monthly, training from 2010 with the paper's LSTM size, 8 couplings, Gaussian base and 50 plus 500 epochs. Each day it draws 10,000 joint scenarios. Separate regressions for each ETF, fitted on 252 historical pairs apiece, convert those scenarios into ETF losses. When one-day 99% VaR for the equal-weight book exceeds 1%, exposure falls to 0.5; it returns to 1.0 below 0.8%. Historical simulation follows the same exposure rule for comparison. We charge $0.004 a share on every fill.

Our run covers 2020-01-01 to 2024-07-01. Annualized metrics begin on 2023-07-03. Mohanty reports no trading returns, so there is no paper Sharpe to compare with ours. The nearest paper result uses a 3-month bill price proxy: frozen 95% VaR recorded 12 breaches in 252 and rejected independence (p = 0.013), while monthly refitting recorded 16 breaches with every p above 0.05. Losses on a priced 3-month bill differ from ETF P&L.

I distrust our figures for three specific reasons. The measured year starts in mid-2023, leaving the 2022 sell-off inside the run but outside the scored year, precisely when a VaR trigger should earn its keep. Exposure can only switch between 0.5 and 1.0 of an equal-weight bond book, so volatility of 4.73% and beta to SPY of 0.14 mostly describe Treasury duration. And the reported metrics neither separate flow returns from historical-simulation returns nor include an ETF VaR calibration test. They cannot settle which scenario model forecasts better. This was one seed and one automated pass: total return was -0.04% and Sharpe -0.01 over the scored year. Those figures speak first to our implementation, and there is no paper Sharpe beside them.

Check the mean before using the scenarios

Compare the Monte Carlo mean with the location head on every date, and track the share of generated coordinates past a fixed threshold. The original flow's 33,908.95 scenario-mean MSE against the head's 0.3376 would have set off either check immediately. Its -38.77 log score gave no such warning.

I would skip the model for now. Mohanty's abstract claims no forecasting advantage, and the frozen comparison does replay as stated there. On its clean new window, historical simulation scored 1.1348 against the stabilized flow's 1.1645. Across 300 selected development dates, the flow tied historical simulation on Energy Score (interval [-0.0305, 0.0406]) and came closer to 90% average coverage, though it fell below 90% in 2008 and 2020. Mohanty calls for longer evaluations and matched comparisons across training seeds beyond 300 selected dates. I would add 2022, which none of the five windows includes. A matched ablation across seeds, showing the stabilized flow beat historical simulation on Energy Score through a full walk-forward that includes 2022, would change my view.

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 calendar month:
  Fit the yield scaler and conditional flow on eligible pre-fold observations.
  Freeze the model and a preceding 252-vector historical-simulation pool.
For each eligible ETF close:
  Use FRED observations dated no later than the preceding ETF session.
  Fit each ETF's intercept and 11-yield OLS mapping on 252 eligible pairs.
  Generate 10,000 joint yield scenarios per model; map each to the
    reference-weighted ETF loss and estimate one-day 99% VaR.
  Independently for each model: reduce common exposure from 1.0 to 0.5
    when VaR exceeds 1%; restore it to 1.0 when VaR falls below 0.8%;
    otherwise retain the prior state.
  On a state change, trade the three equal-weight ETF legs at that close;
    otherwise let holdings drift. Skip a model's change when required
    observations, mapping, execution prices or finite scenarios are missing.
Compare with a fully invested buy-and-hold reference.