Research · Methodology

Where the numbers come from.

Every figure we publish is a measurement, which means it is only worth what its data is worth. This page is the chain from the exported trade tick to the headline number, with the awkward parts written down rather than left out, including where the chain stops.

UPDATED 20 Sep 2026 SNAPSHOT v1 · cutoff 17 Sep 2026 AUDIT research/audit_v1.py

Correction · 20 September 2026

Study 01 originally described its 41,796 five-minute observations as coming from 522 sessions. That description was wrong. The observations span 548 sessions, including 26 shortened and holiday sessions. The 522 figure belongs to Study 02, which measures whole days and therefore excludes incomplete ones.

Across all 41,796 observations the median range is 28.0 NQ points. Restricted to the 522 complete-enough sessions used by Study 02, the sample is 40,716 observations and the median is 28.5 points. Under the stricter rule now used, a session with all 390 minutes present, it is 39,858 observations and again 28.5 points.

The number moved by half a point. The substantive conclusion is unchanged: a stop of ten or fifteen points sits well inside the range an ordinary five-minute NQ candle covers. Both figures are published side by side below rather than one of them being chosen after the fact.

A second, smaller correction: the row counts published for the dataset were taken from three different stages of the pipeline and presented as though they were one subtraction. The full ledger is now below, and it balances.

Both were found by an external reviewer who checked our arithmetic rather than taking it on trust. We would rather publish this than quietly edit the pages.

The chain, and where it stops

One thing first, so nothing below is read as more than it is. This chain is complete from the Quantower export onward. It is not complete behind it. Which market-data provider stood behind that connection is not recorded in the export metadata, so the link between the exchange and the export is the one part of this we cannot show you.

Our one-minute bars are not supplied by a vendor as bars. They are built here, from individual trades. That is worth stating plainly, because it means the high and the low of every candle we publish are the output of our own aggregation, not of somebody's API.

Step 01Trade ticksExported through Quantower for XCME-listed NQ and ES instruments. Trade prints only, no bid or ask. One export alone carried 42,570,588 ticks.
Step 02Bars built hereTicks aggregated into one-minute OHLC plus order-flow fields by our own code, using the tick rule. Timestamps arrive in UTC and are converted to America/New_York.
Step 03Recent daysFrom 12 July 2026 the bars come from the desk's own live one-minute recordings rather than a historical export. 61,743 of the rows, about 7.6%.
Step 04SnapshotRows de-duplicated by timestamp, cut at the declared date, resampled to five minutes, filtered to the session window.
Step 05PublishedFigures frozen against that snapshot and versioned. A refresh is published as a new version with the differences listed, never as a silent edit.

Every row accounted for

The three numbers we used to publish came from different stages, so they did not subtract cleanly. This is the whole ledger for NQ.

Rows across 64 source files809,970
Removed: rows sharing a timestamp already counted− 61,861
Removed: bars dated after the 17 Sep 2026 cutoff− 654
Bars used in the studies747,455

The 654 rows are simply bars from 18 September onward, removed because the snapshot is frozen at the seventeenth. They were never missing; they were never in scope. ES needs no such ledger: it arrived with no duplicate rows at all, and 716,615 bars go in and come out.

The duplicates, and why keeping the first copy is safe

Roughly 7.6% of the raw NQ rows shared a timestamp with a row already counted. That is a large fraction, and the honest question is not how many there were but whether the copies disagreed. If two rows carry the same minute but different highs, choosing one of them silently changes a measurement.

So we checked all of them.

Distinct timestamps carrying more than one row33,003
Of those, every copy identical in open, high, low, close and volume32,996
Of those, copies that actually disagreed7
Disagreeing timestamps inside 09:30 to 16:000

Seven timestamps in the entire dataset carry conflicting values, and not one of them falls inside the session window every published figure is drawn from. Five sit at 19:59 and two at 06:57, New York time. The rule of keeping the first copy therefore cannot have moved any number on this site, and that is a fact you can check rather than a reassurance you have to accept.

The cause turns out to be mundane. Several historical exports cover overlapping date ranges, so the same minutes were exported more than once. These are repeated exports, not two contracts printing at the same moment.

Which contract, and the part that is not uniform

Most of the window was exported under Quantower's continuous front-month symbol /NQ:XCME, covering 23 June 2024 to 30 June 2026. A handful of later exports used the named September 2026 contract, /NQU26:XCME. From 12 July 2026 the rows come from the desk's live recordings instead.

That is not a single uniform construction, and we are not going to describe it as one. Contracts are not back-adjusted. For the two measurements published here it does not matter: the high-to-low range of a candle and the timing of a session extreme are both unaffected by shifting every price in a series by a constant. It would matter a great deal for anything measuring returns across a roll, which is why no such study is published.

What counts as a session

A full session on our window is 390 one-minute bars, 09:30 through 15:59. We previously accepted any session with at least 350, which allowed a day to be missing up to forty minutes. For a study about when the high of the day is printed, that is too loose: the missing stretch could contain the high.

Study 02 now requires every one of the 390 minutes to be present, checked against the expected grid rather than by counting rows. The looser version is kept so the two can be compared, which is more useful than swapping one number for another.

NQ, first hourAt least 350 barsAll 390 minutes
Sessions in the sample522511
High or low already set81.0%80.8%
Both extremes already set3.4%3.5%

Tightening the completeness rule moved the headline by two tenths of a percentage point. The result is not an artefact of how generous the filter was. The same check on ES moves it from 75.1% to 74.6%.

Study 01 under three different populations

A five-minute candle does not need a complete day to be a valid observation, which is why Study 01 does not exclude shortened sessions. Here is what happens if it does.

PopulationCandlesSessionsMedian range
Every session in the window41,79654828.0 pts
Sessions with at least 350 bars40,71652228.5 pts
Sessions with all 390 minutes39,85851128.5 pts

ES is unmoved by the same test: 5.75 points under all three.

What we still owe you

Take the audit and check it yourself

Every figure on this page is produced by one script, which reads the source files and writes a single JSON file. Nothing here was typed in by hand. Both are published, so you can read exactly what was counted and how.

Download the audit output Read the audit script

The JSON carries the row ledger, the duplicate analysis, both session populations, every half-hour block and both runs of Study 02. The script is the one that produced it. What we cannot publish is the raw bars themselves, which we are not licensed to redistribute.

Snapshot v1 is frozen. sha256, first 16 characters: audit_v1.py fca282ea6eb5ebc6 · audit_v1.json 73afa80e1d578f24 · mae.py 85c280b5f8a0d48d · mae_v1.json 2888bd568ccc99cf.