London Data

Nexus deep diveStep 2 · Validate and cleanCompanion to the case study

Validate and Clean.

Raw data kept as delivered, every check result recorded, every fix reversible, and a series promoted only when it passes.

Bad data rarely announces itself. It shows up as a strategy that looks too good, or as a live book trading on a stale price. Nexus checks history in batch and the live feed as it arrives, and records what each check found. Every correction is a logged operation that can be reversed. Each control below is marked with what runs today, including the checks that have stopped running.

Check types3725 in the dataset battery, 11 nightly futures checks, 1 history-length check
Results recorded256,578pass, warn, fail, skip or too little history, across 6,642 datasets
Logged operations6,632promotions, outlier drops, roll records and contract corrections
Quarantined45datasets held back, each with its reason on record

Read on 2026-10-15 from the validation, dataset, disposition and cleaning tables, and from the checks' own code. The dataset battery last ran on 23 September 2026.

01Five steps

From vendor delivery to a clean series in five steps

The Nexus overview shows validation and cleaning as one picture. Here is each step: what Nexus does, and whether it runs today.

Animated schematic: checks run over every dataset, an outlier is fixed by one logged, reversible operation, the raw bar is kept, and the dataset is promoted to clean.
Step 2 of the platform walkthrough on the Nexus overview.
  1. 1

    Raw kept

    As delivered, tagged with its source

    Every vendor bar lands tagged with its source and feed. A unique key allows one row per bar per source, so a duplicate cannot be stored. Hourly and daily bars are insert-only: a bar delivered again never overwrites the stored one. Each live broker bar is written once.

    Runs

    Minute bars from vendors accept a re-delivered bar in place. Some raw repairs have set corrupt zero or missing fields to empty in place.

  2. 2

    Validate

    25 checks per dataset, plus nightly futures checks

    The dataset battery runs 25 checks and records one result per dataset per check: pass, warn, fail, skip or too little history. A failed bar-level check, such as an outlier or a duplicate, can send the dataset to quarantine. A failed series-level check, such as a flat range or a crushed adjustment, puts the whole series under review for a person to confirm. The rest only warn. Separately, 11 futures checks run every night on the front and next contract pairs and the contract symbols.

    Stalled

    The battery last ran in full on 23 September 2026, across about 3,200 datasets. Putting it back on a schedule is the first open item. The nightly futures checks ran last night.

  3. 3

    Clean

    One logged operation per fix

    Each fix is one operation in a log, with statistics before and after. A dropped bar moves to a quarantine table, from which it can be restored. The clean copy of a dataset is a pure function of its raw bars and its operation log, so it can be rebuilt from scratch at any time.

    Runs

    6,632 operations logged.

  4. 4

    Promote

    Clean only when the checks pass

    A dataset moves from unclean to validating, then to cleaning, and then to clean, or else to quarantined. Today 6,432 datasets are clean, 45 are quarantined and 21,868 have not been through promotion.

    Runs

    Most datasets have not been promoted, so research does not require clean.

  5. 5

    Serve

    One data API for research and trading

    Research and trading read through the data API. At the start of a research run, a series marked corrupt or misderived is dropped, with its reason recorded, and a run left with no series is refused. A stale series raises an alert and is noted on the run, which continues.

    Runs, with limits

    Reads return raw bars by default. The clean layer is read only when asked for.

02Checks

What the checks look for

Each check is aimed at a failure that has happened somewhere: a flat range from a stale feed, a timestamp shifted by an hour, a roll that looks like a crash, a currency quoted upside down. A failure quarantines the dataset or puts the series under review, as in step 2; advisory checks only warn.

FamilyWhat is checkedRule
Bar integrityHigh, low, open and close agree; flat rangesFails if more than 0.1 % of the last 1,000 daily bars break the high and low, or more than 20 % have a flat range.
Repeated pricesRuns of identical closes, the mark of a frozen feedOn daily bars, fails on five or more runs of at least five identical closes, or any run of 20. Rates and volatility, which can sit unchanged for days, only warn.
Gaps and timingGaps and duplicates, missing bars, bars outside trading hours, alignment, and timestamps shifted against peer marketsGaps, duplicates and misalignment can quarantine a dataset, and a shift against peers puts the series under review. Missing and out-of-hours bars are recorded.
OutliersSingle prints far from their neighboursHampel filter (Hampel 1974). By default, a rolling median with a robust z of 5, over 7 bars either side for daily data and 30 for intraday, with a tighter, minute-specific noise floor on 1-minute bars. A deviation of 10 % in log terms is flagged for review, and above 18 % it fails and can be cleaned automatically. Daily equities and ETFs, whose real moves can reach 20 to 60 %, use a z of 8, with review at 25 % and failure at 50 %. Rates and volatility only warn. Difference-adjusted series are checked in price levels and only flagged for review.
Futures adjustmentThe adjusted series against the raw contractsFails if the latest adjusted level does not anchor to the raw price, if adjustment crushes the size of price moves, or if the declared method does not suit the data. Warns on roll returns far beyond the market's own and on long-run drift from raw.
Peers and referencesCorrelation with its peer group; the sign against its nearest sibling; a short-rate future's implied rate against the published short rate; a future against its cash or rate reference; two vendors' constructions of the same marketWarns, for example, when a peer group's median correlation is at least 0.40 but the series' best peer is below 0.35.
Conventions and specsWhich way a price is quoted, measured not assumed; prices on the declared tick grid; volume against the series' peer groupAdvisory. A wrong declaration is a reference-data fault, not a bad price, so it never quarantines a series.
Recency and revisionsAge of the latest bar; history changed after the factWarns after five trading days. A year whose bar count is unchanged but whose content hash has changed fails.
Nightly futuresEight checks on front and next contract pairs; three on contract symbols for collisions, coverage and stalenessRuns Nightly, across 41 and 47 series.
The 25 dataset checks plus the 11 nightly futures checks. The 37th, a minimum-history check, last ran in July 2026. Thresholds shown are defaults; the asset classes named have their own.

For your firmWhen a result looks too good, every bar behind it can be traced to the vendor's delivery, to the checks it passed or failed, and to every change made to it.

03Cleaning

Every fix is an operation you can undo

Cleaning never edits raw data. It writes an operation to a log and rebuilds the clean copy from raw plus the log. Removing an operation and rebuilding restores the data as it was.

The operation log

Every operation recorded to date.

Promotions to clean6,323
Derived-bar rebuilds159
Outlier drops (20,784 bars)94
Roll records (4,229 rolls)41
Wrong-contract corrections (407 bars)15

Dispositions

A judgement on a whole series, with its reason.

Corrupt: dropped from research131
Misderived: dropped from research2
Under review1,199

A series under review is flagged for a person to look at. It is not dropped.

  • Quarantine, not delete

    A bar removed by cleaning is moved to a quarantine table with the operation that removed it. Undoing the operation puts the bar back.

  • Wrong contract

    When a continuous series picks up a bar from the wrong contract, the correction is its own operation, with the bars it touched, rather than a quiet edit.

  • Restatements refused

    The simulation stores each nightly forecast once. If the data under a stored forecast later changes, the nightly job refuses to overwrite it and fails, so the change is investigated instead of quietly absorbed. In October 2026 this caught a restatement of two soft-commodity series.

04Live guards

Checks on the live feed, as it arrives

History can be checked at leisure, but a live price has to be judged before the book trades on it. These guards run on the live capture and on the series the live book reads.

  • Capture rules Runs

    Ticks are stamped on arrival and each bar is written once. A late tick is dropped and a gap is never filled with a made-up bar. Watchdogs reconnect a silent feed. The rules are set out in Capture.

  • Gap refetch Runs

    Each weekday night, gaps of 30 minutes or more are fetched again from the broker. The minutes that should exist are learned from each market's own last four weeks, not assumed from a timetable.

  • Hourly gap sweep Runs

    Each morning, any hour that has minute bars but no hourly bar pages operations.

  • Splice guards Runs

    The series the live book reads refuses a first broker return of more than about 5 %. It reports a market stale after six refusals in a row, and it times the broker tail in open-market hours. The join is described in History meets live.

  • Market status Runs

    Open, closed and holiday status is recomputed every five minutes for 47 calendars, so a closed market is not mistaken for a dead feed.

  • Freshness panel Age only

    The trader's console shows each market's data as fresh or stale by the age of its newest bar: up to 16 hours is fresh for exchange data and 48 hours is stale, while for the blended series the limits are 4 and 18 hours. Age alone misses thin data. One coffee series showed fresh for three months while it held about one bar a day instead of ten.

05Point in time

What was known, and when

A backtest should see only what was known on the day. For prices that means bars that had closed. For reference data it means the version that had been published.

  • Completed bars only. Research and the live book use a bar only once it has closed by the decision time, through the same engine. There is no forward-looking mode.
  • Contract observations. Settlement, volume and open interest are append-only, enforced in the database. Each row carries three timestamps, a content hash and a revision number.
  • Rate vintages. One interest-rate reference series is kept with two clocks: when a value applies and when it became available. Each of its 73 revisions is chained to the one before, with a content hash.
  • Broker contracts. Changes to the broker's contract details are kept as an append-only history.
  • Forecast availability. A stored model forecast carries the time it could first have been known: the end of its last input bar, plus a publication lag and a compute allowance.
  • Not yet for prices. Price bars have no vintages. Research reads up to a cut-off on bar time, not on arrival time, so a vendor's later revision or late delivery is not replayed.
06Next

Next: a data-quality panel on the trading screen

The freshness panel judges age alone, and the dataset battery has stalled. The planned panel covers every tradeable market in three tiers: downloaded history, the broker-blended series and the live stream. A single green, amber or red banner sits at the top of the trading screen.

  1. 1

    Revive the inputs

    Put the dataset battery and the store's coverage summary back on a schedule, and show that both run.

  2. 2

    Measure history and the blend

    Density against each market's own baseline over the last 5 and 20 sessions, gaps and overdue bars by the market's calendar, bad bars, roll agreement, and how far the broker's returns stray from the exchange's after the handoff.

  3. 3

    Measure the stream

    Tick age, quote delay, 1-second coverage, and crossed or zero spreads, rolled up into the banner on the trading screen.

  • Every measure follows the market's calendar, so a closed market is never red for age or gaps.
  • A measure that cannot be computed shows as unknown, never as zero.
  • The first version displays only. It does not stop the book trading.

StatusPlanned. The work is scoped and its design is under review. Nothing on this list runs yet.

07Stated plainly

What runs, stated plainly

A data-quality page that hides its own gaps would undercut its point. Each line here was checked against the database or the code on 15 October 2026.

Runs today
  • One row per bar per source, insert-only hourly and daily bars, and live bars written once.
  • Logged, reversible cleaning with quarantine, and a clean copy that can be rebuilt from raw.
  • The 11 nightly futures checks.
  • Live capture rules, watchdogs, the nightly gap refetch and the morning gap sweep.
  • Splice guards on the series the live book reads, and market status for 47 calendars.
  • Corrupt and misderived series dropped from research. Stored forecasts refuse restated inputs.
Runs, with limits
  • Reads return raw by default. The clean layer is read only when asked for.
  • A stale series raises an alert at the start of a research run, and the run continues.
  • The freshness panel measures age, not density.
  • Vendor minute bars accept a re-delivered bar in place. Some raw repairs have set bad fields to empty in place.
  • 21,868 datasets have not been through promotion.
Stalled or planned
  • The 25-check dataset battery last ran on 23 September 2026. Restoring its schedule is open work.
  • The coverage summary for broker and minute feeds has not refreshed since 24 September.
  • The data-quality panel in section 06.
  • Feed arrival delays were measured once, on 3 October 2026, and are not yet on a schedule.
Not built
  • Tick-level reconciliation of the broker's prices against exchange ticks.
  • Holiday-aware staleness on today's panel.
  • Price vintages, so that a backtest could replay what a vendor had delivered by each date.
  • This page describes the data platform. It shows no strategy returns and makes no performance claim.
  • Counts move as data lands and checks run; each is dated to the day it was read.

Sources, read 2026-10-15: the validation results, dataset states, dispositions and cleaning operation log in the market-data store; the check registry and the cleaning, splice and capture code on the services' main branches; the data gate at the start of a research run; and the work board for the stalled and planned items.

08Reading

Reading

Robust outlier detection

  • Hampel, F. R. (1974). The influence curve and its role in robust estimation. Journal of the American Statistical Association.

On this site

Onboarding a systematic trading system?

I can put these checks around your data, or audit the series your strategy already depends on.