AXOQUANT

Library

Decommission notice

Retired after sixteen days. The forecast followed the volatility it was meant to lead.

2026-07 · decommission · current

On 2026-06-25 we commissioned a machine forecasting service to generate trading signals. On 2026-07-11 we stopped it, disabled its scheduled job and reclaimed the hardware. In between we tested three uses — a veto on entries, a per-trade direction call, and an input to the regime read we use at the allocation layer — against rejection conditions written down before each run. All three were refused. Nothing live depended on it, so the retirement cost us the hardware back and an admission.

One mechanism explains every result. The model sets the width of its forecast band from the realised volatility of the history it is handed, so the band moves with that history rather than ahead of it. A quantity that tracks the past cannot lead it. This notice is short on purpose; the finding is one sentence long and padding it out would undo the point.

Status of record, as at publication. Dates from the service and commit record.

Programme
Machine time-series forecasting for signal generation
Commissioned
2026-06-25
Decommissioned
2026-07-11
Uses tested
Three — entry gate, per-trade direction, regime input. The regime test ran two separate candidate models.
Verdict
Refused on all three, against criteria fixed before each run
Live exposure
None. No book in the running fleet held a forecast signal.
Disposition
Service stopped and disabled; the hourly prefetch removed from the scheduler; the walk-forward forecast cache and all evidence records retained
Replaced by
Nothing. The hardware went to other work.
Reversible
Yes — one service enable and one scheduled job. We have not.

What we built

A pretrained probabilistic time-series model, served on one of our own cards, returning quantile paths a day ahead on a four-hour grid for a fixed universe. A scheduled job pulled those forecasts forward into a walk-forward cache whose contexts end at the forecast bar, so every backtest joined a table and no test ever queried the model at evaluation time. The leakage contract lived in one auditable builder script instead of being re-implemented inside each strategy.

The second candidate was a tabular classifier trained on our own causal price and volume features, fitted with an embargo and frozen before it scored a single out-of-sample row. The whole programme cost the spare memory on one card and one scheduled job.

Each use carried a falsification condition written before the run: a minimum trade count for the gate sweeps, a minimum out-of-sample discrimination for the classifier, and a minimum incremental contribution after the backward-looking volatility feature for the regime test. The thresholds were pre-registered; their values are withheld, as all our cut-offs are.

The first pass looked like a success

It graded at the top of our internal scale, and it was an artefact twice over. The authored module had inverted its own fail-open specification, so a missing forecast vetoed the trade instead of degrading to the ungated baseline. The optimiser then throttled the gate until nineteen trades survived and reported the win rate of those nineteen. Its sibling module was a stub with no forecast logic in it at all: it traded zero times while reporting success.

Neither defect was in the model. Both were in our code, and both returned success while doing nothing — which is the dominant failure mode of a machine estate and the reason our engineering is built to fail loudly rather than quietly. Rebuilt to spec and re-run at honest trade counts, the gate reduced both the win rate and the risk-adjusted return of both books it was tested on. Per-book performance is not published.

Why it was retired

Measured over 607 four-hour bars, the width of the predicted band correlated with trailing realised volatility at +0.82, contemporaneously. Its correlation with forward realised volatility measured seven days ahead was +0.21, below the +0.33 scored on the same target by a plain trailing realised-volatility feature computed from the same history — and the lead-lag profile peaked at zero to one day ahead. Conditioned on that backward feature, the forecast added nothing. The incremental figures, and the bar they had to clear, are withheld.

As a next-day regime-shift classifier it scored below chance. A purpose-built alternative track, trained for the same job, also scored below chance, and its single directional read was inverted against the label. Discrimination values for our own candidate instruments are not published; the direction is. Timescale compounds the failure: a one-day forecast sits below a structural label defined over months, and forward information at one horizon does not move a label defined at another.

The direction classifier missed its pre-registered out-of-sample bar on 8,078 held-out rows, by a margin that would not have survived costs at that cadence. Adding market-level context features made it worse out of sample while its internal validation score went near-perfect, and that gap is itself the finding: a market-level feature carries the same value for every symbol at a given timestamp, so a validation split drawn from the training period rewards memorising the training period's market trajectory. The model learned one year's story and the next year told a different one.

The regime measurement is honest about its sample. The label overlap is 84 to 88 days over a single market episode, mostly in one direction, with two days carrying the highest-volatility label. That is small, and we do not claim more than it supports. But the +0.82 contemporaneous correlation and the lag-zero peak are not marginal, and they are exactly the failure the mechanism predicts. A model that reports the regime you are already in is a description, not a signal.

The scope of the negative

This is a negative about our use of these models, on our data, at our horizons, against our targets. It is not a negative about the literature. The papers on the forecasting shelf are not claiming the thing we were testing for: general-purpose probabilistic forecasting, calibrated across a broad corpus, is a different object from a tradeable directional signal at a four-hour cadence on the instruments we happen to hold. A model can be exactly as good as its authors say it is and still be useless to us.

Every paper on that shelf carries its own verdict, and the verdict attached to this programme is implemented and refuted — a statement about the fit between a method and a job, not about the science. The shelf, with its verdicts, is at reading · forecasting.

What this verdict does not yet carry

A kill is not a finding unless you can state the smallest effect the test could have detected. Without that, the verdict is a statement about the search rather than about the market. We now require every fund, forward and kill verdict to cite the power measurement for its own class and timeframe: a missing measurement makes the result a prerequisite batch, not a kill, and the obligation is retro-fitted to closed campaigns rather than applied only to new ones.

This notice predates that rule. The three refusals here were made against criteria fixed in advance, which is necessary and not sufficient. We can say the forecasts did not clear bars we wrote down first. We cannot yet say how large an improvement these particular tests would have been able to see, so the verdict is owed a restatement as either a true kill or a below our floor.

Nor do we present the instrument that would settle it as validated. The measurement harness owes its own out-of-sample check — that the synthetic series it rests on reproduce the moments of the market they imitate — and the campaign that produced its first numbers is under re-audit. The self-checks that make such an instrument credible rather than decorative are the obvious ones: plant an edge the harness should certainly find and confirm the power approaches one, then plant no edge at all and confirm the false-positive rate matches what was pre-registered. A harness that cannot see a planted edge is measuring its own bugs.

The one branch left open

One branch was never run to conclusion. A fine-tune on our own history — trained against forward realised volatility or the regime transition itself rather than the next bar's price, and judged on the single number that matters, its incremental contribution after the plain backward-looking feature — was specified and never built. It is deferred, not refuted. The criterion it would have to clear was written before the decommission and has not moved since.

Saying which branch remains open is what separates a decommission from an obituary. If a champion ever clears that bar on held-out data, the programme comes back, and we will publish that with a date on it too.

Why it was cheap to kill

Why we publish this

A retirement with a date on it is rarer than a launch with a date on it, and a firm that only announces starts is telling you which half of its record it keeps.

Stands on

Cited by

Cross-references are hand-maintained; a link check runs before publish.

Redaction policy. This notice publishes the direction, the sample size and the policy, and withholds every calibration value: the pre-registered bars these tests had to clear, the discrimination values of our own candidate instruments, and per-book performance. Clauses marked withheld describe numbers that exist in our record — we hold them and chose not to print them.

Naming. Model, vendor and product names are omitted throughout, as are the instruments and venues the tests ran on. The finding concerns a class of model applied to our data at our horizons; naming the products would invite a comparison this sample cannot support, and naming the markets would describe where we look.

Library entry. This notice is listed in the library as A forecasting programme, retired, published 2026-07. Title and date are how it is cited; both were fixed when it was published.

Correction policy. Library items are never silently edited. If this notice is wrong, it will be corrected by a new item that cites it, and this one will carry the correction in its status line.