---
name: project-mm-completion-arithmetic
description: The maker reduces to ONE number — completion rate. PAPER-era break-even was 61.4% on +1.78c/−2.82c; the LIVE maker's constants are +$0.0666/−$0.6956, so live break-even is 91.3% (88.9% excluding over-fills) and 86.4% observed. Use the live numbers.
metadata:
  type: project
---

## SUPERSEDED FOR THE LIVE MAKER (measured 2026-09-14)

The +1.78c / −2.82c constants below are PAPER-era (242 paper books, v1–v3).
They do not describe the live maker, and the 61.4% break-even they imply is
dangerously optimistic — it makes a losing strategy look like it has 25 points
of headroom.

Live, on 191 settled maker-only books (`research/mm_book_dataset.csv`):

| group | n | mean $/book |
|---|---|---|
| complete | 165 | **+$0.0666** |
| partial (strand) | 26 | **−$0.6956** |

    p(0.0666) + (1-p)(-0.6956) = 0  ->  break-even completion = 91.3%
    observed completion = 86.4%
    0.864(0.0666) + 0.136(-0.6956) = -0.0371/book  vs  -0.0372 realised

So realised P&L is fully explained by completion being BELOW break-even. There
is no missing cost. Note the strand cost is −$0.696/book, which is the figure
[[maker-sits-at-breakeven]] uses (11.1% break-even strand = 88.9% completion) —
that note is the one to trust, and it agrees with the clean-book numbers here.

By shape, complete books only: clean n=154 **+$0.0864**, ragged n=8 +$0.0218,
**over n=3 −$0.8300**. The three over-fills — the duplicate-order bug fixed
2026-09-13/14 — are −$2.49, i.e. **35% of the entire −$7.10 loss on 1.6% of
books**. With over-fills gone, break-even falls to **88.9%**, so the live gap to
close is 86.4% → 88.9%: about 2.5 points of strand.

**How to apply:** quote live EV as p*0.0666 + (1-p)*(-0.6956), never the paper
constants, and watch completion against 88.9%. Everything below is the paper
decomposition and remains valid for the paper era only.

Measured 2026-08-09 on `research/mm_paper_results.csv` (242 three-leg paper books,
2026-07-26 → 2026-08-08, regimes v1–v3; v4 had no settled books yet). Reproduces
the completion breakdown in commit 202fa59 (3/3 +1.38c, 2/3 −7.62c, 1/3 −2.27c —
I get +1.37 / −7.76 / −1.89) and then decomposes it.

## The decomposition

Among the 154 books that took on any risk (≥1 fill):

| | n | mean | **SD** | t |
|---|---|---|---|---|
| complete (3/3) | 72 | **+1.78c** | **1.69** | **+8.9** |
| partial (1–2/3) | 82 | −2.82c | 43.53 | −0.6 |

A completed book is essentially deterministic — it collects the overround
outcome-independently, which is the thesis, and it is the one thing in this whole
project measured at t=+8.9. A partial book has **25× the standard deviation** and
a mean indistinguishable from zero.

**All the profit is a near-certainty; all the variance is partial fills.** So the
strategy is a single number:

    BREAK-EVEN COMPLETION RATE = 2.82 / (1.78 + 2.82) = 61.4%

## What the volume gate actually buys

| gate (min leg volume) | n | completion | vs break-even | c/book | t |
|---|---|---|---|---|---|
| none | 154 | 46.8% | −14.6pp | −0.67c | −0.26 |
| ≥250 | 77 | 62.3% | +1.0pp | +1.02c | +0.35 |
| ≥500 (v4) | 58 | 69.0% | +7.6pp | +1.84c | +0.55 |
| ≥1000 | 44 | 70.5% | +9.1pp | +1.28c | +0.32 |
| ≥2500 | 23 | 82.6% | +21.2pp | −3.83c | −0.74 |

**The completion mechanism replicates; the P&L does not.** Split at the 60th
percentile of book start time, gate ≥500: completion **69.2% early / 68.8% late**
— about as stable as a measurement gets. Realised P&L over the same split:
**−3.15c early / +5.13c late**. Every t in the table above is noise.

## THE METHOD POINT — estimate EV from the components, not the sum

    EV = p(complete) x 1.78 + (1 - p) x (-2.82)
    at the v4 gate:  0.69 x 1.78 + 0.31 x (-2.82) = +0.35c/book

Direct measurement of that same quantity has SE 3.35c — a ~10x worse estimator of
its own target. Realised per-book P&L needs **~841 books at the gate to reach
significance** (we have 58); the unconditional series needs ~10,505. That is the
same power trap as [[project_xlow_rejection_criteria]], and the same fix as
`pin_accuracy_test` / `clv_realisation`: measure the low-variance component, not
the high-variance outcome. **Never judge a maker rule by its realised c/book at
these sample sizes.**

## The v4 cap at 500 is probably too low

The reversal above 1000 that motivated capping the gate there rests on **4 partial
books averaging −31c with SE ±29c**. The obvious mechanism for a real reversal —
fuller books being tighter, so completing one pays less — is **dead**: complete-book
payout by volume bucket is flat at +1.56 / +2.75 / +2.14 / +0.98 / +1.97c, no trend.

Flat payout plus completion rising to 82.6% gives **+0.98c/book at ≥2500**, ~3x the
≥500 gate. Not acted on — it is the same in-sample reasoning that set 500, and
raising the gate cuts book count from 58 to 23. Logged so the next gate review
starts from the arithmetic rather than re-reading the P&L column.

## Honest weak link

Break-even 61.4% is only as good as the partial-book cost of −2.82c, which carries
**SE ±4.8c**. One SD in either direction swings break-even between ~0% and ~81%,
i.e. between "always quote" and "essentially never". **Pinning down what a partial
book actually costs is worth more than any further tuning of the gate** — and
unlike P&L it is estimable from data already on disk (the 82 partial books, plus
whatever the queue-aware scorer says about which leg strands and at what price).

## How to re-run

Group `research/mm_paper_results.csv` by `match`, keep `legs==3`, compare
`pnl_cents` sums for `fills==3` vs `0<fills<3`, then sweep `volume.min()` per book.
Refresh the numbers before citing them — this is 13 days of data and v4 was frozen
the day it was written.

Related: [[project_mm_queue_reality_check]] (the queue-aware model is the lower
bound on completion), [[project_mm_gross_margin_gate]] (book P&L = sum of leg
margins — the +1.78c IS that overround), [[project_market_making_early_edge]] (the
independent historical evidence the edge exists), [[project_mm_paper_implementation]]
(why every headline number here gets a sanity check first).


## 2026-08-28: BOTH VENUES' COMPLETION NUMBERS WERE WRONG (fixed)

Completion was being derived from LOCAL records that stop writing whenever a
venue hiccups, and both undercounted badly:

* KALSHI -- `filled` came from joining mm_live_realfills.csv on
  (ticker, price_cents) plus a time window. The budget ratchet re-prices legs
  constantly, so a leg re-priced between posting and filling missed the key
  entirely; and the local log only records while the maker is up, so everything
  that filled during the aborts/stalls/restarts was never written.
  Exchange said 115 complete books; the dataset said 45.
* POLY-US -- `pus_live_state.json` is written by detect_fills, which prints
  'positions unreadable, not marking fills' on every 503. That venue 503s for
  hours. 16 settled books in state against 62 the venue had resolved.

CORRECTED, from each venue's own record:

| | before | corrected | break-even |
|---|---|---|---|
| Kalshi completion (risked) | 49.5% | **82.2%** | 61.4% |
| Poly-US completion | 56.2% | **67.9%** | 65.5% |

Both are ABOVE break-even. The earlier "the maker is under water" conclusion was
an artifact.

**THE GATE HYPOTHESIS IS DEAD.** It came from the same lossy data: thin books
re-price more, re-priced legs missed the join, so they looked like they failed
to complete. On corrected Kalshi data completion by opening gross is FLAT
(82.7% / 81.0% / 80.0%). Do not raise the gate on that evidence.

RULE: completion comes from the VENUE (Kalshi /portfolio/fills, Poly-US
ACTIVITY_TYPE_POSITION_RESOLUTION), never from a local log. `mm_book_dataset`
keeps `legs_filled_log` beside `legs_filled` so the gap stays visible.
Poly-US activities are the ACCOUNT's history -- filter to books the maker
actually quoted or World Cup futures land in the completion rate.
