# Is gold sold down into the London PM fix?

**Verdict: killed** — F = 0.5207 against a placebo centre C = 0.4978, one-sided p = 0.3014, on 169 London days.

Bars: 232215 one-minute rows, 2026-01-01 23:00:00+00:00 to 2026-08-27 20:59:00+00:00 (UTC as stored; every window below is on the Europe/London clock). Price is the mid of the bid and ask closes.

## The test

| | |
|---|---:|
| days kept, n | 169 (of 204 London days seen) |
| down days (run_in < 0) | 88 |
| F, fraction negative | 0.5207 |
| C, placebo centre | 0.4978 |
| null sd of F | 0.0386 |
| one-sided p | 0.3014 |
| critical count k01 (p < 0.01 at C) | 100 |
| certified floor q\* | 0.653 |
| null's own size at k01, exact binomial | 0.0089 |
| null's own size at k01, from the draws | 0.0080 |

The null is the pre-registered placebo-window null: 10000 draws, each picking one start minute per day uniformly from the 496 minutes 08:00-16:15 London that have a bar exactly 15 minutes later. Seed 20260912.

## Days dropped by the floor

| reason | days |
|---|---:|
| no 14:45/15:00 bar and pool under 400 | 35 |

## Descriptive only — none of this can move the verdict

**The mean.** MU = -0.2881 bp, per-day sd 31.2166 bp, placebo p = 0.4445 (the fraction of draws whose mean is at or below MU; the null's own mean centre is -0.0779 bp).

**The AM fix, 10:15 to 10:30 London.** F = 0.6331, C = 0.4984, p = 0.0002, mean -4.1387 bp (p = 0.0082) on 169 days; 0 kept days had no 10:15 or 10:30 bar. Its own draws, not the PM test's.

**The auction itself, 15:00 to 15:10.** Mean +0.2245 bp, negative on 46.7 % of 169 days.

**After it, 15:10 to 15:25.** Mean -0.1375 bp, negative on 48.5 % of 169 days.

**Busy, not just lower.** Median |run_in| = 16.7042 bp against a median |placebo return| of 8.9875 bp, pooled over all 83801 valid placebo windows.

**By weekday** (descriptive; the rule fixes no weekday claim).

| weekday | days | F | mean run-in |
|---|---:|---:|---:|
| Monday | 34 | 0.5882 | -4.797 bp |
| Tuesday | 34 | 0.5294 | -2.991 bp |
| Wednesday | 34 | 0.4412 | +4.844 bp |
| Thursday | 34 | 0.5882 | +1.483 bp |
| Friday | 33 | 0.4545 | +0.030 bp |

## The positive control: shift injection for the mean

DELTA bp subtracted from every day's run-in, 300 runs a level, each against a fresh null, counting the runs that reach p < 0.01 on the mean. 2,000 draws per control run rather than 10,000: 1,800 nulls at full size was too slow. The main test keeps 10,000.

| DELTA | shifted mean | runs at p < 0.01 |
|---:|---:|---:|
| 1 bp | -1.288 bp | 0.0 % |
| 2 bp | -2.288 bp | 0.0 % |
| 3 bp | -3.288 bp | 0.0 % |
| 5 bp | -5.288 bp | 100.0 % |
| 8 bp | -8.288 bp | 100.0 % |
| 12 bp | -12.288 bp | 100.0 % |

Smallest shift this sample certifies at 95 % or better: **5 bp**.

The column reads 0 % or 100 % and little between because the injection is deterministic: subtracting DELTA moves this one sample's mean by exactly DELTA, so the only thing varying across the 300 runs at a level is the null's own Monte Carlo noise. The table is therefore a statement about where the p < 0.01 threshold sits for this sample, not a power curve over resampled data. That is what the sealed rule asked for and it is reported as it came.

Method, windows and kill rule: `rule.py`, sealed before any return around the fix was computed. This file is written by `analyse.py` and never by hand.

This is a test record, not advice.
