Every quantitative result sits on a stack of data decisions that readers never see. When a result changes, the first question is whether the code changed or the data did. Without an answer, research turns into argument. NOVAQ built the foundation to answer that question, in three steps.

Why futures data is hard

A futures contract expires, so a long price history has to be assembled from many contracts. At each roll the series moves from one contract to the next, and the two trade at different prices. Handled badly, that seam produces bars from the wrong contract, false jumps and inflated volatility, and all of it flows quietly into features, models and backtests.

A clean corpus

A monthly breakdown of an attractive study showed nearly all its gain in rollover months. Bars of another contract sat in 37 of 64 rollover windows, which appeared as jumps of 250 to 320 points in a minute. NOVAQ rebuilt the series from individual contracts.

Two design decisions matter here. The series is not back-adjusted, because adjusted prices never traded, and a position held through a roll really does meet that gap. And spikes are not filtered, because a filter needs a criterion for what reality should have been, and sharp moves around news are real trading conditions.

Jumps above 150 points fell from 6,541 to 108 while keeping 99.9% of about 5.5 million bars. Comparing old and new features showed that 282 of 301 had differed, because a false jump inflates each volatility-scaled measure for weeks. A small error in the raw data had reached almost everything built on it.

Technical

Clean continuous corpus: false jumps and affected features

Before6,541After108Features changed282 / 301
Jumps above 150 points in about 5.5 million NQ minute bars, before and after the rebuild (24 August 2026), and the share of features that had differed.

An estate-wide audit

Knowing that one series is clean is not enough when a project holds many copies and versions. In October an audit mapped 341,992 files, 41 data versions and 13,256 storage locations, and it recorded which processes read which version. It found zero mixed bars among about 11 million live minute bars, reproduced by three separate implementations. A synthetic mixing test caught 5 of 5 planted cases, which shows that the detector works as well as that the data is clean.

Exact reproduction

On a pinned snapshot, 87,260 trades across 66 legs were rebuilt with zero value mismatches. A result can be recreated on demand, and any later difference can be traced to its cause.

Why it matters

This foundation supports everything else on this site. Portfolio analysis, session research and the migration of the live engine all rely on the ability to say exactly which data a result came from.

Limits

On a rewritten live archive the median match fell to 92.4%, which is the point of the exercise: identity holds on pinned inputs, and a difference then belongs to the data.