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.