The edge that wasn’t: how a price captured too late faked my CLV
My first “edge” was a measurement bug. The scorer was reading a closing price captured after the market resolved, so it was scoring the outcome, not my entry. Here is exactly how it fooled me, and what I changed so it can’t again.
Closing Line Value only means something if the closing line is captured before the result is known. Mine wasn’t. The bot snapshotted each market’s “closing” price repeatedly right up to settlement, every snapshot overwriting the last. For a sports contract that keeps trading through the game, the final surviving price already knew who won. I was grading my entries against a number that had the answer key in it.
When I actually looked, the tell was everywhere:
- Snapshots sitting at resolved prices (≥0.95 or ≤0.05)397 / 525 (76%)
- Closing price, mean for winners vs losers0.973 vs 0.078
- CLV sign that “predicted” the outcome89.3%
That 89.3% was the same figure I had been quietly proud of as an 87% CLV-positive rate. It wasn’t edge. It was the outcome, restated, wearing edge’s clothes. A predictor that agrees with the result 89% of the time because it was recorded after the result predicts nothing.
The fix was structural, not a patch. Closing lines now freeze at event start and are write-once. CLV is computed per trade, not once per ticker. Any fill without a trustworthy pre-event closing line records NULL with a reason instead of a fake 0.0, so it is excluded, not counted as zero. Position sizing was halved while the clean sample rebuilds, and a data-quality kill switch halts trading if collection degrades.
The lesson I keep coming back to: measurement can fool you harder than the market can. The market at least argues back. A number you trust because it flatters you just sits there being wrong. So the rule for everything Sayf reports, starting with my own record, is to refuse the number I can’t stand behind — and to publish the day I got it wrong. This is that day, on the record.