Retraction · 2026-07-21
Amended · 2026-08-06
original snapshot 2026-05-08

The 78-point gap: a retraction

This page used to be a whitepaper claiming that our CLV-conditioned win-rate split — trades that beat the close won 89.9%, trades that lost it won 11.2%, a 78.8-point gap with z = 24.27, p ≈ 10⁻¹³⁰ — was "empirical evidence of forecasting skill."

That claim was wrong, and we retract it. The numbers were real. The inference was not. Here is exactly why, and the placebo test that demonstrates it.

Amendment, 2026-08-06. An audit of this page found that its own centrepiece was overstated. We had presented the rejected-side split as a control — a test the anti-model could have failed. It could not: the rejected side is stored as the arithmetic complement of our own, so the two gaps are equal by construction. Publishing an identity with a date and a sample size, as though it were a measurement, is a smaller version of the error this page retracts. We have relabelled it, and added the placebo test — which can fail and doesn't — as the actual evidence. Corrections to a retraction get published the same way the retraction did.

Why the split cannot measure skill

For each trade our ledger also stores the arithmetic complement — the side the model rejected — as inverse_won = not won and inverse_clv_c = −clv_c, on 92% of rows. (The opposite token's own book is never independently observed; we do not quote it.) Split the rejected side by CLV sign and it shows the same gap:

Population CLV+ win rate CLV− win rate Gap
Our trades (the model's picks) 90.8% 9.3% 81.5 pp
The side the model rejected 89.4% 9.5% 79.9 pp

This is not an experimental result — it is an identity. Because the rejected side's CLV-positive bucket is our CLV-negative bucket relabelled, the two gaps are equal by construction for any dataset: a skilled model, a coin flip, or a deliberately terrible one. We originally published this table as though the rejected side had been measured and had failed a test it could have passed. It could not have. Presenting an identity as a measurement is the same error this page retracts, so we are naming it rather than restating it.

The identity is still the argument, just a stronger one than a test: a statistic that is invariant under flipping which side you took cannot distinguish a model from its own opposite, and therefore cannot be measuring skill.

Why the split is mechanical

About 90% of our entries are placed in-play, after scoring has begun. For those markets, the "closing price" we can capture is the last quoted price before the market converges to its 0/100 resolution — a price that already reflects most of the outcome. On our ledger, eventual winners' captured closes average ~83c (median 89.5c) and eventual losers' average ~17c (median 11c), while entries center near 50c.

Under that close definition, "beat the close" is close to a restatement of "bought the eventual winner" — the sign of CLV agrees with the game outcome on 90% of rows. Conditioning win rate on CLV sign therefore produces an enormous gap for any entry strategy, skilled or not. The z-test we published was a p-value on a tautology. The threshold-robustness pattern we cited as support (gap widening at stricter thresholds) is also predicted by the mechanism, so it corroborated nothing.

Our own measurement code had documented this contamination — the tracker's comments call final-close CLV for in-play markets a mix of "signal" and "score change bailed us out" noise, and name fixed-horizon markouts as the honest read. The page ignored what the code knew.

The test that can fail — and what it shows

The identity above proves the statistic is uninformative but, being an identity, it cannot be falsified. So we ran the falsifiable version: hold our real captured closes and real game outcomes fixed, then replace the model with strategies that have no skill by construction. If the gap came from forecasting ability, these should lose it.

Entry strategy Skill? Gap reproduced?
Our model (as traded) claimed yes
Every entry at a flat 50c none yes — larger
Entries shuffled across markets none yes
Side chosen by coin flip none yes

All three no-skill placebos reproduce the gap, and they reproduce the threshold-widening pattern we had cited as corroboration. The flat-50c placebo — an entry rule containing no information whatsoever — produces a wider gap than our actual model does, widening from 88.8 to 95.3 points as the CLV threshold tightens. A metric that rewards a constant more than it rewards the model is measuring the close, not the forecast.

What remains true

What replaces it

The honest skill instrument for in-play entries is a fixed-horizon markout: the price move at T+60s and T+180s after entry, before the next major game event, with the timestamp and horizon recorded. Our tracker already snapshots these windows. Coverage stands at 88 rows — up from the three we had when this page was first written, still too thin for a scorecard, but no longer a handful. We will publish a markout scorecard when the sample supports one.

Until then: judge the models on the unconditioned CLV aggregate, the public trade record (losses included), and the pre-committed playoff benchmarks, which were designed before the games and don't have this defect.

Verify the retraction yourself

Download all three artifacts into the same directory. The verifier fails closed if the correction sidecar is absent, malformed, duplicated, or disagrees with a legacy raw ledger's token identity. The current public files join by one-way public_fill_id so raw order ids and token ids stay private. It prints the current unconditioned aggregate and both outcome-conditioned splits — our side and the rejected side. The two gaps will match; as explained above that is an identity, not a result. What the run actually lets you check is that the aggregate we publish is the aggregate the ledger produces.

Two limits, stated so the check is not over-trusted. The script's population filter is inert on the public file: redaction strips the fields it screens on, so it admits every row and the real exclusions already happened server-side — you are verifying our arithmetic, not our admission rules. And "fails closed" is structural only: it detects a missing, duplicated or mismatched sidecar, but it cannot detect altered values inside one, because the sidecar carries no signature. Rewriting every corrected price would produce a clean exit and a flattering number. Signing it is on our list.

curl -fsS https://zenhodl.net/api/trades.jsonl -o trades.jsonl
curl -fsS https://zenhodl.net/api/exchange_fill_reconciliation.jsonl -o exchange_fill_reconciliation.jsonl
curl -fsS https://zenhodl.net/api/verify_clv_gap.py -o verify_clv_gap.py
python3 verify_clv_gap.py trades.jsonl

Companion data

Cite this page

ZenHodl. "The 78-Point Gap: A Retraction."
Original snapshot 2026-05-08; retracted 2026-07-21.
https://zenhodl.net/clv-evidence

Page content licensed CC BY 4.0. Underlying dataset is public. The original whitepaper is preserved in the repository's git history.