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

Engelund's optimized stop gains 0.009 over a particle-filter plug-in

Simulated Heston paths, 12 observations a day, one shared posterior, no market data or costs.

2026-10-15 · 7 min read · Volatility regime detection and risk management · US stocks

Reviewing: Regime Detection in Latent Factor Models -- A Bayesian Decision-Theoretic Approach · Karl Kristian Engelund · Read it on arxiv

Our backtest of this idea

Our automated quick test, not the paper's

Point-in-Time Heston PFMCDP Volatility-Regime Allocation versus CL-Posterior Threshold

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

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

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.

This is not a replication of the paper

  • The paper's method needs exchange colocation or specialised hardware, which we do not have. Any strategy we build is a substitute (typically the paper's own classical baseline), so our backtest does not test the paper's claim.

The figures below measure what we could run, not the paper's own method, so they are not evidence for or against its claim.

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

  • Paper Heston observation grid Δ=1/(250·12) and horizon T=3 years.: Use daily Δ=1/250 and a reset-bounded 63-session policy horizon, retrained on that grid. (invalidates: Paper Figure 3 simulated Heston detection losses and intervals; paper Figure 3 paired PF plug-in comparison)
  • Paper Heston illustrative parameters (S_0,μ,κ,ξ,ρ)=(100,0.01,2,0.25,−0.7), m_1=0.04, m_2=0.09, λ=2 and Z_0=1; initialize variance from the Regime 1 stationary Gamma distribution.: Fit the stock-specific μ, κ, ξ, ρ, m_1 and m_2 from prior closes and use actual stock prices rather than S_0=100; retain λ=2, Z_0=1 and stationary-Gamma particle initialization. (invalidates: Paper Figure 3 simulated Heston detection losses and intervals; paper Figure 3 paired PF plug-in comparison)
  • Paper Heston PFMCDP uses M=500, 8000 simulated training paths, 5000 simulated testing paths, K=11, ridge regression and two-fold cross-fitting.: Retain M=500, K=11, ridge and two-fold cross-fitting; use 800 training paths per stock/reset and evaluate investment performance on subsequent historical bars rather than claiming a 5000-path paper test. (invalidates: Paper Figure 3 simulated Heston detection losses and intervals; paper Figure 3 paired PF plug-in comparison)
  • Paper's PF plug-in comparator uses the two-dimensional oracle boundary β(ν̂), not a constant posterior-probability threshold.: Compare instead with a training-selected, episode-fixed cutoff on the same π̂^CL. (invalidates: Paper Figure 3 PF plug-in loss 0.433 [0.425, 0.441]; paper Figure 3 paired comparison, interval and p-value against PF plug-in)

4 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 57.2%Jul 2024
Sharpe
0.63
Total Return
57.2%
Max Drawdown
-14.2%
CAGR
10.2%
Volatility
19.4%
Beta vs SPY
0.02
Trades
126

A good regime filter still leaves a trader with the harder question: when is it worth paying to rebalance? Engelund treats that decision as a stopping problem. In his simulation, optimizing the stop cuts loss by just 0.009 beyond a rule that already uses the same filter.

The paper starts with latent factor models and hidden regimes; Heston supplies the main benchmark. Y is observed. X contains latent factors such as variance or a short rate, while Z is a hidden Markov regime whose switching intensities can depend on Y and X. The general risk combines asymmetric misclassification loss among 'abnormal' regimes with weights for false alarms and delay. Since posterior regime probabilities are generally non-Markov, the relevant state is the full filtered law of (X, Z). A separate three-regime Vasicek experiment uses noisy bond prices. There, the market price of risk can be neutral, 'greed' or 'fear': ζ = (0, 3, -1/2), with loss weights (a2, a3, b, c) = (0.2, 0.6, 0.8, 0.8).

Why a posterior cutoff can fail

In the Heston test, one hidden change-point raises long-run variance from 0.04 to 0.09. Its arrival time is exponential, with hazard 2 per year and a six-month mean. The agent observes the stock alone, then chooses when to declare the change. With b = c = 1, risk is b times the false-alarm probability plus c times expected delay. Delay is measured in years: a false alarm carries the same loss as a full year of late detection.

The structural result matters. Even when variance is observed, the change posterior need not be Markov by itself: the current variance sets the signal-to-noise ratio for the drift shift. Engelund therefore derives a boundary that depends on variance rather than relying on a posterior threshold alone. For the infinite-horizon quickest detection problem with m1 < m2 and observed variance, the boundary falls as variance rises. Stopping never occurs below bλ/(c+bλ), or 2/3 here. The simulation has a finite horizon of T = 3 years. Engelund computes this "oracle" rule, with variance observed, by finite differences on a 351x351 grid.

With variance hidden, the state is the conditional distribution of (variance, regime). PFMCDP (particle-filter Monte Carlo dynamic programming) approximates it using 500 particles. Ridge regression then estimates the value of waiting from 11 summaries of that particle cloud, fitting backward on 8,000 simulated paths and evaluating on another 5,000. The filter needs a repair: because the post-change regime absorbs the process, resampling can eliminate every pre-change particle and leave the naive regime estimate stuck at one. Engelund instead uses a conditional-likelihood (CL) posterior. He applies the observed-variance formula to each particle's variance path and weights the answers by particle weight. He describes it as an approximation to the discrete-time construction, rather than an exact filter on the grid.

The parameters are illustrative, not calibrated. The other experiment, a three-regime Vasicek model with noisy bond prices, checks sensitivity to tuning only. The paper makes no empirical claim about any market. Its Bayes-risk units price a false alarm against a year of delay.

How much does optimizing the stop buy?

PFMCDP records 0.424 [0.415, 0.433]. The "PF plugin" records 0.433 [0.425, 0.441]. That rule takes the same CL posterior and the particle mean of variance, then applies the oracle boundary. Filtering output is identical for both rules, leaving the stopping decision as the source of the gap.

The paired test is significant.

Its mean pathwise difference is -0.008813, with a 95% interval of [-0.015252, -0.002374] and p = 0.007319. Pairing supplies the significance even though the marginal intervals overlap. Engelund says the intervals "do not include variation from repeating the training procedure." The comparison therefore depends on one trained regression.

The Heston results give no measure of that training noise. The Vasicek table offers a rough indication from a different model. Each cell in its grid of particle counts, resampling thresholds and covariate sets gives a standard error across 20 independent train-and-test replications. Those errors range from 0.0008 to 0.0016; the baseline is 0.0015. Across 20 runs, a 0.0015 standard error suggests run-to-run spread near 0.007, on the order of the 0.0088 Heston gap. It includes test noise and belongs to another model, so the comparison remains suggestive.

At c = 1 per year, the 0.0088 loss gap amounts to about 2.2 trading days of delay. A two-day delay equivalent is the whole claim. The abstract is similarly restrained: the latent-information procedure "can outperform feasible plug-in rules."

Engelund's response to the narrow margin follows the paired test. PFMCDP "applies to the general latent-factor setting without requiring a finite-dimensional oracle boundary." The plug-in is available in single-change-point Heston because PSOR can calculate that boundary on a 351x351 grid. Neither the general setting nor the Vasicek model offers such a boundary, and Vasicek consequently has no competing rule. This leaves the paper in an awkward position: where a plug-in is available, it finishes within 0.009; where it is unavailable, there is no benchmark.

Particle filtering does most of the work

The full ordering is oracle 0.412, PFMCDP 0.424, PF plugin 0.433, best fixed calendar stop 0.551, exponentially weighted moving average (EWMA) plugin 0.563, and RV plugin 0.705. The oracle cannot be traded; it marks the ceiling. Its gap to the plug-in is 0.021. PFMCDP takes back 0.009, roughly 43% of that distance.

The larger gain comes from filtering rather than stop optimization. Moving from EWMA to the PF plugin cuts loss by 0.130; the particle-filter comparison with the realized-variance plug-in is 0.272. Engelund singles out the proxy results. Both realized-variance and EWMA estimates, when put through the oracle boundary, lose to a calendar stop fixed in advance. A noisy proxy "need not improve upon a simple non-adaptive timing rule." These rules detect changes earlier and incur more false alarms, despite using a boundary that performs well with true variance.

The observation schedule helps explain the proxy results. About 12 intraday returns arrive each day, and Engelund cites the O_p(Δ^{1/4}) pointwise rate for local realized variance as a reason to treat variance as latent. Five-minute bars would supply 78 returns a day rather than 12. We expect that to narrow the gap, though the paper tests no other frequency. Training paths were used to tune the RV and EWMA windows as well as the fixed stop date, giving those comparisons their best chance within this setup.

Daily data and other open questions

Heston runs at Δ = 1/(250·12). Vasicek runs daily, but reports PFMCDP alone. With no competing rule, its losses near 0.82 lack a comparison. I would start with a daily Heston test against the plug-in.

We did not find a parameter-estimation step. The filters appear to use the model that generated the paths. For real stocks, κ, ξ, ρ and both variance levels would have to be estimated. Misspecification would affect the borrowed oracle boundary for the plug-in and the simulated paths used to train PFMCDP.

Trading costs are outside the paper's scope by design; its schematic also places the subsequent rebalance or hedge outside the analysis. A detection loss of 0.424 does not price the spread and impact of a false de-risking. We found no runtime figures either. Tuning can matter: at a resampling threshold of 0.5, Vasicek loss drops significantly from 0.8301 with 250 particles to 0.8202 with 500. At 1,000 particles it reaches 0.8171, a further change that is not significant.

Our daily run used a different strategy

Engelund's Heston filter receives 12 observations a day. Running it live would call for intraday infrastructure and specialised hardware we do not have. We drafted a daily substitute for a small group of liquid US stocks, using stock-specific Heston fits on prior closes, 500 particles with periodic resets, and simulated training paths. Its comparator was a fixed CL-posterior cutoff. Engelund's plug-in instead varies its boundary with variance. Our substitute also lacked the likelihood innovation required by the CL posterior.

The code that ran departed further still. It used a rolling variance-proxy Heston approximation to rank stocks by the forecast probability of an up move, then traded at the close. From 2 January 2020 to 1 July 2024, that directional book returned 57.21%. Its Sharpe was 0.63, annualized volatility 19.38%, and maximum drawdown -14.19% (Sortino 0.27, Calmar 0.72). The Sortino of 0.27 sits well below the Sharpe of 0.63, pointing to heavy downside volatility. More directly, these are figures for a ranking strategy we constructed; neither stopping rule ran. We charged a per-share commission subject to a minimum per order. Borrow, financing and market impact were not modelled.

Engelund reports detection losses of 0.424 and 0.433 on simulated paths. Our 57.21% return and 0.63 Sharpe describe a portfolio. The figures are incomparable, and our run is no reproduction: it measures neither stopping rule nor their gap and says nothing about Engelund's result.

Verdict on PFMCDP

The theory will last longer than the trading claim. Engelund explains why a posterior threshold can fail even with variance observed. The case for optimizing the stop, though, rests on 0.009 of loss, about two days of delay at c = 1 per year. That comes from one training run on known-parameter simulations at intraday frequency. A daily Heston comparison with estimated parameters, where the paired gap survives repeated retraining, would change my mind.

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.

Specified research design:
1. Verify each annual screening snapshot as point-in-time; select up to 10 eligible stocks using trailing dollar volume.
2. At selection and each 63-session reset, fit a stock-specific Heston change-point model from the preceding 500 closes.
3. Update 500 variance/regime particles and the CL posterior at each daily close.
4. Compare the 10-feature, simulation-trained PFMCDP stopping decision with an episode-fixed CL-posterior cutoff.
5. Start eligible stocks at 10% weight; after a stop, reduce to zero for the episode. At a reset, restore only if the diagnostic CL estimate is at most 0.5. The specification schedules trades for the next available adjusted open.

Visible backtest code instead fits a rolling variance-proxy Heston approximation, ranks names by forecast P(up), and describes market-on-close execution. The provided metrics do not identify a PFMCDP portfolio, a threshold portfolio, or their paired difference.