Half the lake's symbols cross a split

Found 2026-09-03, checking trainer#50 against our own data Status OPEN — the bars are unadjusted, as delivered Relevant to trainer#50, which found this first on a smaller sample

What we saw

trainer#50 reports Databento's ohlcv-1d is unadjusted and found 2 of 8 symbols contaminated over 400 sessions. Run against the 125 symbols now in the lake, over four years:

symbols in lake                          125
symbols with >=1 split-like jump          60      (48%)
total jumps                              148
jumps beyond 5x (near-certain splits)     54

The largest, by close-to-close ratio:

RDGT   2026-04-08     0.0233 ->   3.46    x148.5
XTIA   2025-01-10     0.05   ->   7.04    x140.8
WETO   2026-08-03     0.0505 ->   6.63    x131.3
WBUY   2025-05-08     0.088  ->   9.12    x103.6
XPON   2024-10-09     0.03   ->   2.91    x97.0
...
BHVN   2022-10-04   151.8    ->   8.30    x0.055    (a forward split / spinoff)
RDGT   2026-03-24     2.95   ->   0.1375  x0.047

48%, not 25%. The rate is far higher here than trainer#50's sample because this desk trades small-caps and movers, and that universe reverse-splits constantly to hold a listing. It is a property of what we trade, not of the sample size.

Several are symbols the scorer has already produced numbers for: WCT (x46.4 on 2026-03-06), LIDR (x24.7 on 2023-12-27), NCPL (x56.9 on 2024-08-02), DAIC (x31.9 on 2026-06-01).

Why it matters — and precisely how much

Being exact about the blast radius, because it is narrower than the headline:

The scorer is largely insulated today. It reads tbbo inside one ride's window — hours, occasionally a couple of days — and does not read daily bars at all. A split only corrupts a score if it falls inside a ride's window, which is rare, and a 40× discontinuity mid-ride would almost certainly trip the entry gate or produce an obviously absurd R.

The lake is contaminated for anything reading long windows. Relative strength, ATR, SMA distance, gap statistics, 20/60/120-day returns — every one of those crosses split dates on half our symbols. trainer#50 measured base_rs_60 for CRWD at −69.6%, entirely manufactured. That is what this service is building the store for.

So: not urgent for scoring, blocking for the trainer, and the lake is the shared surface.

What we did

Pulled them. 106 corporate actions across 59 of 125 symbols now sit at market-history/parquet/schema=splits/data.parquet, beside the raw bars. src/splits.ts carries the arithmetic; bin/pull-splits.ts --verify reconciles.

Of the 148 observed jumps, 57 are real corporate actions and 91 are real moves. Clean splits leave a residual near x1.0 — BIAF's 30:1 gives x1.011, ASST's 5:1 gives x0.961 — which is what validates the factor arithmetic. AEHL 2025-04-04 is the instructive one: a 40:1 split AND a genuine 78% move on the same session, which is why matching is by DATE, not by magnitude. GPRO has 0 actions, exactly as trainer#50's fixture requires.

The bars stay raw. The lake layout already specifies the right shape — store bars unadjusted with a separate factors table, and apply at read — which matches trainer#50's own recommendation to keep the raw close alongside the adjusted series. The raw prices we have are correct as what printed; what is missing is the factors.

Worth stating why the obvious shortcut is wrong, since it will be tempting at 48%: you cannot detect splits by move size. trainer#50 makes the point with GPRO, which tripped a naive detector three times and has no splits — a $0.60 stock doubling on news is exactly what the movers lane exists to find. The detector above is a census, not a fix; every one of its 148 hits needs confirming against real corporate-action data before anything is adjusted.

Still open