---
name: project-mm-ratchet-vs-chase
description: Walking a stranded leg's price DOWN (chase/decay) loses on 259 books under BOTH fill bounds — it buys completions at a median 99c against a 1.00 payout. The ratchet stays. The lever that pays is the entry gate, not conceding on stranded books.
metadata:
  type: project
---

Measured 2026-08-19 via `research/mm_ratchet_backtest.py` on **259 three-leg books**
since depth logging began (2026-07-28), queue-aware fill model against real Kalshi
trade prints. Answers "is it worth reducing a stranded leg by 1-2c over time?"

## The result

| policy | bound | complete | med coll | net/book | profitable | total |
|---|---|---|---|---|---|---|
| chase | queue-aware | 19.3% | **0.9900** | **-2.76c** | 14% | -137.8c |
| ratchet | queue-aware | 4.6% | 1.0200 | +0.49c | 58% | +5.9c |
| gate+ratchet | queue-aware | 3.3% | 1.0300 | +1.53c | 100% | +10.7c |
| chase | optimistic | 87.3% | **1.0000** | **-1.26c** | 38% | -283.9c |
| ratchet | optimistic | 71.8% | 1.0300 | +1.17c | 78% | +218.0c |
| gate+ratchet | optimistic | 69.5% | 1.0300 | +1.64c | 100% | +239.8c |

**BOTH BOUNDS AGREE IN DIRECTION.** That is why this one is trustworthy where the
2026-07-30 decay test was not: [[project-mm-queue-reality-check]] distrusted its own
result precisely because optimistic and queue-aware disagreed in DIRECTION (policy C
best on one, worst on the other). Here they agree, on 259 books instead of 15.

## The mechanism — it is the `med collected` column

Chasing works on fill rate exactly as intuition says: 4x more completions
(19.3% vs 4.6%). It completes them at a **median 99c against a 1.00 payout**.
You buy completions by making them unprofitable. Every cent walked down comes
straight off the book's collected total, and the books newly completed are the
ones where the market moved against you — so **decay is adversely selected**.
This is the ALAGET 2026-08-15 incident (quoted 100c, GET re-quoted down to 25c,
collected 0.99 owed 1.00) generalised across 259 books rather than one anecdote.

## Scope limit — read this before citing

`chase` re-quotes at the touch EVERY cycle (unbounded following). A bounded 1-2c
decay is milder and was NOT directly tested; it lands between chase and ratchet.
So this does not prove a small decay is net negative — only that the gradient
points the wrong way, and that with median collected at 99-100c under chase, a
couple of cents eats most of a book's 2-3c margin.

## The actionable finding is the third row

`gate+ratchet` beats plain ratchet on BOTH bounds (+1.53 vs +0.49 queue-aware,
+1.64 vs +1.17 optimistic) and is 100% profitable in both, by refusing 49 of 259
books at entry. **The lever that pays is refusing more books up front, not
conceding on books already stranded** — the opposite direction from where the
question pointed. Caveat: 100% rests on 7 completions under the queue-aware
bound. Signal, not a settled number.

## Why the two floors both exist

`mm_maker_live.book_budget()` applies `f = max(budget_floor, latched_floor)`:
- **budget floor** (`asks[t] * scale` when scale > 1) — guarantees any fill
  completes the book above `1.00 + fees + margin`. Economically necessary.
- **ratchet floor** (`floor_px`, latched at first post, rises but never falls) —
  chase prevention. This backtest is its justification.

Absolute totals are tiny (+5.9c over 259 books queue-aware), consistent with
[[project-mm-completion-arithmetic]] — the edge is thin and this is a RELATIVE
comparison, not evidence the maker is strongly profitable.

## How to re-run

`python research\mm_ratchet_backtest.py` (add `--refresh` to re-pull trade
prints). Reads `research/mm_paper_quotes.csv`, needs `k_ask` + `kickoff` and
rows on/after 2026-07-28.

Related: [[project-mm-completion-arithmetic]] (partial-book cost is still the
biggest open number, SE +/-4.8c), [[project-mm-queue-reality-check]] (the
superseded decay test), [[project-mm-gross-margin-gate]] (the entry gate this
result points at).
