<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: quietnumbers</title>
    <description>The latest articles on DEV Community by quietnumbers (@quietnumbers).</description>
    <link>https://dev.to/quietnumbers</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4145179%2Fc3cdcc8a-9870-458a-8918-39242aec8fb5.png</url>
      <title>DEV Community: quietnumbers</title>
      <link>https://dev.to/quietnumbers</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/quietnumbers"/>
    <language>en</language>
    <item>
      <title>China's sports lottery is not a betting market — it's a formula</title>
      <dc:creator>quietnumbers</dc:creator>
      <pubDate>Sun, 27 Sep 2026 07:07:57 +0000</pubDate>
      <link>https://dev.to/quietnumbers/chinas-sports-lottery-is-not-a-betting-market-its-a-formula-26g</link>
      <guid>https://dev.to/quietnumbers/chinas-sports-lottery-is-not-a-betting-market-its-a-formula-26g</guid>
      <description>&lt;h1&gt;
  
  
  China's sports lottery is not a betting market — it's a formula
&lt;/h1&gt;

&lt;p&gt;&lt;em&gt;I measured the margin on 897 matches. The surprising part is not the size of the fee, but that&lt;br&gt;
the fee barely moves — and what that implies.&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;The Chinese Sports Lottery (竞彩) publishes fixed odds on football matches. I wanted to know what&lt;br&gt;
they actually cost, so I wrote down the three-way odds for &lt;strong&gt;897 matches&lt;/strong&gt; between 2026-05-17 and&lt;br&gt;
2026-09-25, and paired each of them with the same fixture's &lt;strong&gt;"99 bookmakers average"&lt;/strong&gt; closing&lt;br&gt;
odds from the European market.&lt;/p&gt;

&lt;p&gt;The measure is the &lt;strong&gt;overround&lt;/strong&gt;: the sum of the implied probabilities.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;overround = 1/home + 1/draw + 1/away
payout    = 1 / overround
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the odds were fair, overround would be exactly 1.0. Real books are always above 1.0, and the&lt;br&gt;
excess is the margin — the fee you pay &lt;em&gt;before&lt;/em&gt; your opinion about the match is even relevant.&lt;/p&gt;

&lt;p&gt;Here is what 897 matches gave me:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;market&lt;/th&gt;
&lt;th&gt;n&lt;/th&gt;
&lt;th&gt;overround&lt;/th&gt;
&lt;th&gt;margin&lt;/th&gt;
&lt;th&gt;σ&lt;/th&gt;
&lt;th&gt;range&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Chinese lottery, 1X2&lt;/td&gt;
&lt;td&gt;897&lt;/td&gt;
&lt;td&gt;1.1292&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;12.92%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.0006&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;1.1251 – 1.1299&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chinese lottery, handicap&lt;/td&gt;
&lt;td&gt;897&lt;/td&gt;
&lt;td&gt;1.1291&lt;/td&gt;
&lt;td&gt;12.91%&lt;/td&gt;
&lt;td&gt;0.0006&lt;/td&gt;
&lt;td&gt;1.1251 – 1.1299&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;European average (99 books)&lt;/td&gt;
&lt;td&gt;897&lt;/td&gt;
&lt;td&gt;1.0685&lt;/td&gt;
&lt;td&gt;6.85%&lt;/td&gt;
&lt;td&gt;0.0109&lt;/td&gt;
&lt;td&gt;1.0403 – 1.1085&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The lottery is more expensive in &lt;strong&gt;897 of 897 matches.&lt;/strong&gt; No exceptions. The mean gap is&lt;br&gt;
&lt;strong&gt;6.07 percentage points&lt;/strong&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  The σ is the actual finding
&lt;/h2&gt;

&lt;p&gt;Everyone can guess that a state lottery is expensive. The interesting column is the fourth one.&lt;/p&gt;

&lt;p&gt;Across 897 matches — different leagues, different days, different kick-off times — the lottery's&lt;br&gt;
overround stays inside a band &lt;strong&gt;0.0048 wide&lt;/strong&gt;. In percentage terms, the margin never leaves&lt;br&gt;
12.51%–12.99%. The European average swings &lt;strong&gt;19× more&lt;/strong&gt;, because it is set by people: it follows&lt;br&gt;
league, liquidity, and how close the match is to kick-off.&lt;/p&gt;

&lt;p&gt;That difference is not a curiosity. It tells you what kind of object you are looking at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A market price&lt;/strong&gt; is produced by the interaction of many participants. It moves, because it
aggregates disagreement. &lt;em&gt;A price that moves can be wrong&lt;/em&gt; — and that is exactly what
professional syndicates spend millions looking for.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A formula price&lt;/strong&gt; is produced by a fixed payout parameter. It does not move. &lt;strong&gt;A price that
does not move cannot be wrong.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The confirmation is inside the same lottery: two &lt;em&gt;different&lt;/em&gt; play types — 1X2 and handicap — land&lt;br&gt;
on &lt;strong&gt;12.92%&lt;/strong&gt; and &lt;strong&gt;12.91%&lt;/strong&gt;. The same parameter applied to everything. That is what a formula&lt;br&gt;
looks like.&lt;/p&gt;

&lt;p&gt;The practical upshot: there is no mispricing to find here. Not "hard to find" — &lt;em&gt;nothing to find&lt;/em&gt;.&lt;br&gt;
You are not looking for a bad price in an efficient market; you are looking at a posted fee.&lt;/p&gt;
&lt;h2&gt;
  
  
  What the fee does to multi-leg bets
&lt;/h2&gt;

&lt;p&gt;The margin compounds per leg. Per 100 staked, long-run expected return:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;legs&lt;/th&gt;
&lt;th&gt;returned&lt;/th&gt;
&lt;th&gt;taken&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;88.6&lt;/td&gt;
&lt;td&gt;11.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;78.4&lt;/td&gt;
&lt;td&gt;21.6&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;61.5&lt;/td&gt;
&lt;td&gt;38.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;48.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;51.8&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;37.8&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;62.2&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;A 6-leg accumulator gives up &lt;strong&gt;more than half&lt;/strong&gt;. For scale: American roulette with double zero&lt;br&gt;
takes 5.26%. A 6-leg ticket here takes roughly &lt;strong&gt;10×&lt;/strong&gt; that.&lt;/p&gt;

&lt;p&gt;This is also why the usual advice — "find value, bet singles, avoid parlays" — is right about&lt;br&gt;
parlays and hopeless about value. You would need a 12.92% edge to break even. Professional&lt;br&gt;
betting teams build models to find &lt;strong&gt;2–4%&lt;/strong&gt;. The bar here is 3–6× higher than the edge that&lt;br&gt;
professionals consider a good year.&lt;/p&gt;
&lt;h2&gt;
  
  
  I also tested this on myself
&lt;/h2&gt;

&lt;p&gt;To be fair to the other side, I ran &lt;strong&gt;15 betting rules over a 1,617-bet sample&lt;/strong&gt; — favourite&lt;br&gt;
backing, home/draw/away, handicap variants, odds-band filters, a model-value filter, and a&lt;br&gt;
daily 2-leg combination. Stated precisely:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;12 of 15&lt;/strong&gt; rules are negative; &lt;strong&gt;9&lt;/strong&gt; are significantly negative (95% CI upper bound below 0).
Worst: −58%.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;3 of 15&lt;/strong&gt; are positive: +23.78% (n=37), +5.79% (n=127), +3.94% (n=52) — and &lt;strong&gt;all three have
95% confidence intervals that cross zero&lt;/strong&gt; (±116%, ±15%, ±86%). The largest makes +143% and
+43% in its first two months and −100% in each of the last three.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;0 of 15&lt;/strong&gt; pass the rule I fixed &lt;em&gt;before&lt;/em&gt; looking at the data: n ≥ 300 &lt;strong&gt;and&lt;/strong&gt; CI lower
bound &amp;gt; 0.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the honest summary is not "every strategy loses." It is: &lt;strong&gt;nothing survives the sample-size&lt;br&gt;
bar, and the positive results are indistinguishable from noise.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One more result worth keeping, because it is the one thing that &lt;em&gt;is&lt;/em&gt; real: hit rate rises&lt;br&gt;
monotonically with confidence tier, from 46.6% to 82.2%. The information is there. But the average&lt;br&gt;
odds fall to 1.23, so breaking even needs 81.3% — and the best tier hits 82.2%. It lands exactly&lt;br&gt;
on the margin line. That is what a 12.92% fee looks like from the inside: you can be right, and&lt;br&gt;
still be paying tolls.&lt;/p&gt;
&lt;h2&gt;
  
  
  Limitations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;One market, one period: a four-month season fragment, not a full year.&lt;/li&gt;
&lt;li&gt;The benchmark is the 99-bookmaker average &lt;strong&gt;close&lt;/strong&gt;, not a single book's live price.&lt;/li&gt;
&lt;li&gt;Overround measures the &lt;strong&gt;price of entry&lt;/strong&gt;, not any individual's loss rate — that depends on what
and how much you actually stake.&lt;/li&gt;
&lt;li&gt;The σ comparison is well supported (overround is a per-match constant). The finer breakdowns —
by league, by month — are not, and are not claimed here.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Reproduce it
&lt;/h2&gt;

&lt;p&gt;Everything ships as raw data plus scripts, standard library only, no API keys:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/quietnumbers/china-sports-lottery-overround
&lt;span class="nb"&gt;cd &lt;/span&gt;china-sports-lottery-overround
./reproduce.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;overround.py --check&lt;/code&gt; recomputes the headline numbers from the raw odds CSV and &lt;strong&gt;exits&lt;br&gt;
non-zero if any of them moved&lt;/strong&gt;. &lt;code&gt;backtest.py&lt;/code&gt; recomputes the 15-rule table from the per-bet&lt;br&gt;
files. The dataset is also published as a &lt;a href="https://github.com/quietnumbers/china-sports-lottery-overround/releases/tag/v1.0" rel="noopener noreferrer"&gt;GitHub release&lt;/a&gt; if you would rather grab the CSVs in one file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Disclaimer
&lt;/h2&gt;

&lt;p&gt;This is data analysis, not betting advice. I do not recommend matches, sell selections, or&lt;br&gt;
promise any return. I measured this number precisely to make the opposite point: &lt;strong&gt;in this market&lt;br&gt;
every strategy must first clear a 12.92% wall.&lt;/strong&gt; If it cannot, you are paying someone else's toll.&lt;/p&gt;

</description>
      <category>statistics</category>
      <category>datascience</category>
      <category>sports</category>
      <category>china</category>
    </item>
  </channel>
</rss>
