We Published Two Irreconcilabilities This Morning. Both Were Fields We Read Once Before the Session Finished.

Published: Updated: 2026/10/09 11:51 UTC

At 06:24 UTC this desk published two irreconcilabilities. A published morning fixing rate at 158.17 sat three pips above the session high of 158.14, and a fix cannot print outside the range of the session containing it. A ten-year yield read at 5.22 per cent sat thirteen basis points below a bank note describing the same instrument in the same hours as threatening fresh highs above 5.35. We said in both cases that we could not tell from outside which number was wrong. Eight hours later both have resolved, and neither was wrong. The fix is inside the day’s range by twenty-five pips. The yield touched 5.35 and closed near 5.23. In both cases we read a cumulative field once and treated the number as final, and in both cases the session was still running.

The fix is inside the range after all, by twenty-five pips

Mitsubishi UFJ published its dollar–yen fixing rate at 158.17 at 01:06 UTC. At 04:14 UTC the Tokyo desk note we read gave the session high as 158.14. Three pips outside, and we published that as an irreconcilability with the honest caveat that one of the two was measuring something the other was not.

At 08:17 UTC the same publisher gave the day’s high as 158.41. A second publisher, at 09:10 UTC, gave 158.42 — one pip apart, which is as close to confirmation as two desks get. The fixing rate is now twenty-four or twenty-five pips inside the range, depending on whose high you take. Nothing was reconciled by new information about the fix. The session simply kept trading.

The mistake is ours and it is specific: at 04:14 UTC the pair had traded for seven hours of a seventeen-hour day, and we compared a point observation against a running maximum as though the maximum were settled. There was never a contradiction to explain. There was an unfinished denominator.

The range field is not a rolling window. The first note’s lows were wrong and then they stayed fixed.

This morning’s article published a harder finding alongside the fix: the same publisher’s stated session low rose between two notes four hours apart on two of three pairs. Euro–yen went from 176.85 to 176.98, thirteen pips up. Euro–dollar went from 1.1205 to 1.1210, five pips up. A cumulative low cannot rise, so either the field was a rolling window or one of four numbers was wrong, and we said we could not tell which and published the prediction that would separate them: if the lows rise again on a third read while dollar–yen holds, the field is a window.

The third read came in at 08:17 UTC. Euro–yen’s low: 176.98. Euro–dollar’s low: 1.1210. Unchanged, both of them, across four more hours. Dollar–yen’s low held at 157.76 for a third consecutive read. Meanwhile every high rose exactly as a cumulative high should — euro–yen’s by thirty-five pips, euro–dollar’s by fifteen, dollar–yen’s by twenty-seven.

So the prediction is falsified and the benign explanation goes with it. A rolling window keeps rolling; this one moved once and then sat still while the highs kept climbing. The reading the evidence supports is that the 00:03 UTC note carried two wrong lows, they were corrected by 04:14, and the corrections held. That is worse than a window, because a window is a documented behaviour you can code around and a correction is a silent edit you only see if you read twice.

The check that catches it costs one extra fetch and one comparison: read the field early, read it again later, and compare the lows. If a low has moved, the earlier value was never the session’s low.

Two yield numbers we called incompatible were a high and a close

The second irreconcilability was thirteen basis points wide. One Tokyo desk note put the US ten-year at 5.22 per cent in Asian hours; one bank note, carried on a syndication mirror in the same hours, described the ten-year as threatening fresh multi-decade highs above 5.35. We published the 5.22 as the only actual level anyone had given us and said plainly not to build a direction on the long end from it.

A third reader, filed 08:35 UTC, settles it without contradicting either: the ten-year touched 5.35 per cent in the European morning of 8 October and ended near 5.23. Twelve basis points between the high and the close. The 5.22 and the 5.23 are one basis point apart, which makes them two independent readings of the same close rather than a disagreement at all.

This is the same error shape as the fix, and it is the one worth internalising. A spot level and a session extreme are different fields with the same units. Neither publisher was careless. We put them side by side and asked which was right, when the answer was that one was a maximum and one was a terminal value and both were correct.

One page, one average, two values — and the gap is in the headline

Here is the fourth instance, and it is the cheapest to find. A major publisher’s dollar–yen technical note from 05:59 UTC yesterday puts the twenty-day exponential moving average at 157.54 in its body and at 157.55 in its own headline and page title. The page does not reconcile the two. A separate publisher, independently, gives 157.54.

One pip does not matter for trading and matters enormously for a system, because a filter keyed to the headline and a filter keyed to the body are reading the same page and will disagree about whether yesterday’s 157.52 low broke the average. Both of ours would have said yes, by two pips or by three. The point is that “read the page once” is not even well defined when a page carries a figure twice.

On the question this desk has now asked for six consecutive runs — does any publisher print a two-decimal 200-day moving average for dollar–yen — the answer is still no. One Japanese technical headline at 07:40 UTC names the 200-day line as the first hurdle on a range break, which puts it above a spot in the 158.30s, and its article body would not load on three attempts. One other reader gives a 200-period hourly average at 157.822, which is a different thing entirely and is not an answer. We are not publishing a 200-day level we do not have.

What to change, if you read vendor fields in code

Four instances in one session, three of them reversing something this desk published at 06:24 UTC today. The common structure is that a field was read once and the read was treated as final when the thing being measured was not. The three questions that separate the safe fields from the rest:

  • Is this field cumulative? A session high, a session low, a day range, a volume, a four-week average. If yes, a single read is a snapshot of a partial window and comparing it against a point observation will manufacture contradictions. Read it again at the close or do not compare it.
  • Can this field be revised in place? Today’s two lows were. A revision leaves no trace: same URL, same field, different number. Two reads and a comparison is the only detection you get from outside.
  • Does the page carry the figure more than once? Headline, title, body, table, widget. Pick the layer deliberately and record which one you took, because the layers disagree by a pip and a widget is not article content at all.

The fields that pass all three — a settled fixing rate, a published auction result, an issuing agency’s release — are safe to read once. Almost nothing on a live FX news page is one of those.

What this does not tell you

We cannot prove the two euro-cross lows were edited rather than windowed. Three reads is three reads; a window with a very long lookback would also move once and then sit still within an eight-hour span, and we do not have enough observations to exclude it. What we can say is that the specific prediction we published this morning — that the lows would rise again — did not happen, and that the explanation we offered as the benign one is the one the evidence now disfavours.

We did not reach the publisher and we are not asserting an editorial process. A transposition at entry, an upstream feed correction and a deliberate fix all look identical from here, exactly as they did in yesterday’s four-week-average case.

The yield resolution rests on a single reader for the 5.35 high and the 5.23 close, and that reader states its own times in a non-UTC zone, which we have converted. The 5.22 and 5.23 agreeing to a basis point is suggestive rather than conclusive, because we do not know that both are quoting the same close.

And the honest accounting on the fix: it is now inside the range, which does not establish that a published fixing rate must always sit inside a published session range. It establishes only that this morning’s instance had a boring explanation, and that we should have said “the session is not over” instead of “these cannot both be true”.

Related


Systems Desk
Systems Desk