line movement study: is steam fully priced? (5 leagues, 20yr)
← lab · 78,279 selections · does steam beat the close? · ran 7/3/2026
What this is: Compares opening and closing odds over 20+ years: when a price shortens (steam), is that information already fully absorbed by kickoff, or does following the move still pay?
Selections bucketed by how much their probability moved between opening and closing. If the “actual” column matches “close implied” in every bucket, the market absorbs its own moves — no free lunch in following them.
| Move bucket | n | Avg move | Close implied | Actual won | Residual |
|---|
| big drift | 2,023 | -5.48pts | 37.11% | 36.09% | -1.02pts |
| drift | 5,026 | -2.81pts | 33.35% | 34.2% | +0.86pts |
| flat | 64,170 | 0pts | 32.27% | 32.23% | -0.05pts |
| steam | 5,028 | +2.8pts | 39.89% | 39.12% | -0.77pts |
| big steam | 2,032 | +5.5pts | 46.79% | 49.11% | +2.32pts |
| Rule (flat stakes) | n | ROI |
|---|
| Follow steam at the close | 7,060 | -3.15% |
| Fade drift at the close | 7,049 | -1.93% |
| Bet everything at the close (margin baseline) | 78,279 | -5.55% |
| Bet steamers at the OPEN (perfect-foresight bound) | 7,060 | +7.29% |
Reading the columnswhat each number actually means
| Move bucket | how much the selection's implied probability moved open → close |
| Close implied | win rate the closing price predicts |
| Actual won | what actually happened in that bucket |
| Residual | actual − implied; 0 everywhere = the market absorbs its own moves |
Spec · the reproducible recipe
{
"kind": "line_movement",
"market": "1x2",
"competitions": [
"EPL",
"ELC",
"EL1",
"EL2",
"SPL"
]
}