Closing Line Value Scorecard
Bot P&L is high-variance. CLV — the difference between our entry price and the market's closing price — is not. It tells you within a day whether the model beat the market, regardless of which side won the game. Most prediction-market vendors don't measure CLV. The ones that do, don't publish it. Here's ours, every sport, with full data download.
Trades that beat the close win 89% of the time.
Trades that lost the close win 11%.
That spread is real edge. Within 686 settled trades across 12 sports, the side of the closing-line you came out on is by far the strongest predictor of who won — stronger than the model's confidence, stronger than the live market price, stronger than any single feature in the model.
Whether our model's entry price was better than the market's closing price. Positive = we got in cheaper than where the market settled. Negative = the market moved against us between our entry and game start. Independent of which side won the game.
- Profit / loss (variance dominates over short windows)
- Model accuracy on a single game
- Liquidity at our trade size
- Slippage between fair and entry
Per-sport CLV — sorted best to worst
Each row is one sport's mean CLV across every settled trade we have. Green bars = positive (beating the close). Red bars = negative (losing the close). Sports with under 10 measured trades are flagged as preliminary.
| Sport | Verdict | Mean CLV (all-time) | 30d | Beat close | Overall WR | n |
|---|---|---|---|---|---|---|
|
NCAAMB
+CLV WR 100% (n=4) · −CLV WR 0% (n=0)
|
preliminary
PRELIMINARY
|
+17.75c |
+17.75c n=4
|
100%
4/4
|
53%
124W/111L
|
4/242 |
|
NCAAWB
+CLV WR 100% (n=3) · −CLV WR 0% (n=1)
|
preliminary
PRELIMINARY
|
+6.82c |
+27.17c n=3
|
75%
3/4
|
49%
41W/43L
|
4/84 |
|
ATP
+CLV WR 82% (n=44) · −CLV WR 19% (n=47)
|
beating close
PROMOTE
|
+5.16c |
+4.02c n=89
|
48%
44/91
|
49%
45W/47L
|
91/99 |
|
LOL
+CLV WR 84% (n=43) · −CLV WR 6% (n=35)
|
beating close
PROMOTE
|
+3.44c |
+2.52c n=72
|
55%
43/78
|
40%
38W/56L
|
78/96 |
|
NHL
+CLV WR 91% (n=53) · −CLV WR 24% (n=38)
|
beating close
PROMOTE
|
+1.08c |
+1.22c n=88
|
58%
53/91
|
60%
60W/40L
|
91/127 |
|
MLB
+CLV WR 96% (n=86) · −CLV WR 16% (n=69)
|
bleeding
KILL
|
-2.04c |
-2.76c n=151
|
56%
86/155
|
58%
124W/91L
|
155/217 |
|
SOCCER
+CLV WR 73% (n=15) · −CLV WR 10% (n=20)
|
bleeding
PAUSED
|
-2.12c |
-2.12c n=35
|
43%
15/35
|
37%
13W/22L
|
35/36 |
|
WTA
+CLV WR 89% (n=18) · −CLV WR 4% (n=23)
|
bleeding
PAUSED
|
-2.67c |
-2.67c n=41
|
44%
18/41
|
42%
17W/24L
|
41/42 |
|
?
+CLV WR 33% (n=3) · −CLV WR 0% (n=2)
|
preliminary
PRELIMINARY
|
-4.04c |
-4.04c n=5
|
60%
3/5
|
20%
1W/4L
|
5/7 |
|
TENNIS
+CLV WR 100% (n=2) · −CLV WR 0% (n=3)
|
preliminary
PRELIMINARY
|
-5.12c |
-5.12c n=5
|
40%
2/5
|
73%
8W/3L
|
5/11 |
|
CS2
+CLV WR 87% (n=63) · −CLV WR 5% (n=83)
|
bleeding badly
PAUSED
|
-5.46c |
-5.80c n=144
|
43%
63/146
|
43%
145W/191L
|
146/341 |
|
NBA
+CLV WR 94% (n=16) · −CLV WR 0% (n=15)
|
bleeding badly
PAUSED
|
-7.87c |
-7.87c n=31
|
52%
16/31
|
45%
57W/69L
|
31/126 |
Edge bucket detail — where the edge actually lives
For each sport with enough data, mean CLV broken down by the edge size at entry. This is the layer at which gate decisions get made: "do trades at 8-11c edge in MLB actually beat the close?" If the bucket is green, yes. If it's red, the model is selling closing-line value into that band.
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| 8-11c | 2 | +10.50c | 100% | 100% |
| 11-15c | 1 | +26.00c | 100% | 100% |
| 15-20c | 1 | +24.00c | 100% | 100% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| 11-15c | 1 | +32.80c | 100% | 100% |
| 15-20c | 2 | -12.25c | 50% | 50% |
| 25c+ | 1 | +19.00c | 100% | 100% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| 8-11c | 31 | -1.45c | 42% | 55% |
| 11-15c | 20 | -3.90c | 50% | 40% |
| 15-20c | 18 | +12.06c | 50% | 56% |
| 20-25c | 13 | +11.55c | 54% | 31% |
| 25c+ | 9 | +25.06c | 56% | 67% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 2 | +3.00c | 50% | 50% |
| 8-11c | 21 | +3.72c | 67% | 67% |
| 11-15c | 10 | -1.85c | 50% | 50% |
| 15-20c | 12 | +11.42c | 67% | 67% |
| 20-25c | 9 | -13.33c | 22% | 22% |
| 25c+ | 24 | +7.75c | 54% | 33% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 5 | +4.64c | 80% | 60% |
| 8-11c | 29 | -7.38c | 45% | 55% |
| 11-15c | 21 | +4.57c | 71% | 67% |
| 15-20c | 18 | +11.78c | 61% | 83% |
| 20-25c | 9 | -6.13c | 44% | 56% |
| 25c+ | 9 | +4.08c | 67% | 44% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 7 | -13.49c | 29% | 29% |
| 5-8c | 57 | -1.14c | 63% | 72% |
| 8-11c | 26 | -10.14c | 46% | 54% |
| 11-15c | 24 | -5.58c | 50% | 58% |
| 15-20c | 10 | -4.33c | 50% | 50% |
| 20-25c | 13 | +8.15c | 62% | 62% |
| 25c+ | 18 | +9.92c | 61% | 56% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 2 | +39.50c | 100% | 100% |
| 8-11c | 9 | -14.90c | 33% | 44% |
| 11-15c | 10 | -14.55c | 30% | 30% |
| 15-20c | 9 | -0.90c | 33% | 22% |
| 20-25c | 3 | +39.20c | 100% | 67% |
| 25c+ | 2 | +8.50c | 50% | 0% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| 8-11c | 10 | -21.88c | 30% | 30% |
| 11-15c | 3 | +2.33c | 33% | 33% |
| 15-20c | 23 | -0.51c | 48% | 44% |
| 20-25c | 3 | +3.50c | 33% | 33% |
| 25c+ | 2 | +51.75c | 100% | 100% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 5 | -4.04c | 60% | 20% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 5 | -5.12c | 40% | 40% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 6 | -30.83c | 33% | 33% |
| 5-8c | 6 | -42.58c | 0% | 17% |
| 8-11c | 21 | -2.71c | 52% | 52% |
| 11-15c | 27 | -6.88c | 41% | 48% |
| 15-20c | 34 | -2.54c | 44% | 41% |
| 20-25c | 35 | -2.71c | 46% | 31% |
| 25c+ | 17 | +3.97c | 47% | 41% |
| Edge band | n | Mean CLV | Beat % | WR |
|---|---|---|---|---|
| <5c | 1 | +23.50c | 100% | 100% |
| 5-8c | 9 | +3.67c | 78% | 78% |
| 8-11c | 5 | -2.50c | 60% | 60% |
| 11-15c | 3 | -37.20c | 0% | 0% |
| 15-20c | 7 | -15.64c | 43% | 29% |
| 20-25c | 5 | -19.08c | 20% | 20% |
| 25c+ | 1 | +28.50c | 100% | 100% |
Why we publish this
Bot P&L is the wrong scoreboard for whether a probability model is good. P&L is dominated by single-game variance — five coin-flips in a row can wipe out a quarter of edge that took 200 trades to build. CLV doesn't have that problem. It settles within a day, can't be flipped by a buzzer-beater, and answers exactly the question every quant cares about: did the model beat the market on price, before the game even started?
We publish CLV by sport because that is where the trading decisions actually get made. If a sport's CLV is consistently negative, the model is selling closing-line value into the market — the bot will lose money on that sport regardless of which side wins. We use this page to make those decisions in public. As of this update, we trade only sports with positive or breakeven CLV. The bleeders (NBA, CS2, WTA, Soccer) are paused until their CLV either improves or the underlying model is retrained — see the changelog for the suspension log.
The data is updated by a weekly cron that pulls Polymarket price history for every settled trade and computes the closing-line difference. Coverage is currently 48.0% across all trades. Older trades may not have CLV because Polymarket's history API doesn't always return non-terminal prices for resolved markets.
Citing this dataset
CC BY 4.0. Reproduce, quote, and embed freely with attribution. Programmatic access via JSON / CSV is rate-unlimited for non-abusive use.
Definition. CLV is computed as closing_price_c − entry_price_c for each trade. Closing price is the last non-terminal Polymarket midpoint observed before the market converges to its 0/100 resolution. Entry price is the ask we paid at trade-open time.
Coverage. Older trades may lack CLV because the close-price-tracker only stored prices in a 5–95c band; markets that resolved fast can have no non-terminal price recorded. The weekly backfill_clv.py cron pulls Polymarket price history to close that gap retroactively. Current coverage: 48.0%.
Verdicts. A sport is labeled beating close at mean CLV ≥ +1c, breakeven between −1c and +1c, bleeding from −1c to −3c, and bleeding badly below −3c. Sports with under 10 measured trades are flagged preliminary and excluded from go/no-go decisions.
Active vs paused sports. The bot currently trades only NHL, ATP, LOL, and MLB (the sports with positive or breakeven CLV). NBA, CS2, WTA, and Soccer remain in this dataset because their historical CLV is meaningful research data and we'd rather show it than hide it. Their trading is paused until CLV trends positive or the underlying model is retrained.
Why most vendors don't publish CLV. Because most can't measure it (no entry-price stamp, no closing-price archive), and the ones that can usually find their CLV is negative. Negative CLV is uncomfortable to publish. We publish it anyway — it's the same reason the transparency index shows ZenHodl ranked #2 instead of fudging us to #1.