Skip to content

The 50bp slippage cap degrades the sqrt model to flat-fee across the whole admissible-but-thin cohort #523

Description

@eaitbrahim

Raised in docs/presentations/se.md §9.3 and backed by a measured shadow run. Distinct from #335: that issue is about the promotion gate still pricing at the flat 5bp fallback. This one is about the cap binding even where per-product pricing is already used.

The finding

slippage_for_quote_volume is floor × sqrt(anchor / median_daily_quote_volume) clamped to [5bp, 50bp]. The cap binds at 100× below the anchor — $5M/day median — while the admission floor is $1M/day.

Every asset in that 5× band is simultaneously admissible and capped, and that band is essentially the entire realistic candidate universe. Across the cohort the square-root model degenerates into a flat-fee model — which is the modelling defect #259/#334 shipped to remove. It was removed for the liquid half of the universe and silently retained for the thin half.

Measured, using keel's own slippage_for_quote_volume:

asset median daily model demands actually used
CRO $1,139,342 104.7bp 50.0bp capped
PAXG $1,224,999 101.0bp 50.0bp capped — and LIVE
STX $1,300,933 98.0bp 50.0bp capped
OP $2,585,800 69.5bp 50.0bp capped
ATOM $3,084,518 63.7bp 50.0bp capped
FIL $3,294,287 61.6bp 50.0bp capped
JASMY $4,161,283 54.8bp 50.0bp capped
BTC (control) $568,943,908 4.7bp 5.0bp

It is already in the live book. PAXG is allowlisted and capped at 2.0× understatement. The rest of the live set is inside the live sqrt region (BTC 5.0, ETH 6.2, DOGE 20.5, ADA 23.9, XLM 35.4bp).

Measured magnitude — a shadow run at a 150bp cap

At a 150bp cap the clamp is inert for this cohort (max demand 104.7bp), so the run measures what the shipped model already computes and is currently overridden on. turtle_breakout, hourly, full cached history:

asset n net @50bp net @150bp rel decline cost ×
CRO 248 0.3195 0.2428 24.0% 2.09×
STX 243 0.2932 0.2276 22.4% 1.96×
OP 221 0.2894 0.2605 10.0% 1.39×
ATOM 268 0.2172 0.2007 7.6% 1.27×
FIL 261 0.4167 0.3904 6.3% 1.23×
JASMY 271 0.6774 0.6663 1.6% 1.10×
PAXG 74 0.0465 0.0155 66.7% 2.02×
BTC / ETH (controls) 293/282 0.1471 / 0.2388 unchanged 0.0% 1.00×

Controls frozen to the digit; gross PF invariant across cells; nothing net-positive in either cell. PAXG is excluded on sample size (n=74, below the floor) — its 66.7% is arithmetic on a net PF of 0.0465.

Relative decline is perfectly monotone in the cost multiple across every asset above the sample floor — 2.09/1.96/1.39/1.27/1.23/1.10 maps to 24.0/22.4/10.0/7.6/6.3/1.6%.

The honest reading — this is not urgent, and that is the argument for doing it

The cap is masking severity, not viability. Nothing was net-positive even at 50bp; the whole cohort sits between 0.1471 and 0.6774. Uncapping shifts that to 0.1471–0.6663. The bias is real and worth 1.6%–24% of net PF, and it changes no verdict, because every verdict was already negative. The binding constraint remains the 1.2% taker fee.

So the case for fixing it is not performance. It is that the bias is inert only while everything is far below break-even, and it activates precisely when something approaches 1.0 — which is exactly when nobody will be hunting for a silent quarter-turn of flattery. Fixing it while it costs nothing is the cheap moment.

Options, none of them obviously right

  1. Raise or remove the cap. 150bp is a research value chosen to make the clamp inert; as a shipped constant it would be arbitrary. Principled versions: remove it, or set it from the corpus tail (~184bp for TON, which is what the current cap's own docstring reasons about).
  2. Add participation-rate scaling. The model scales by the asset's liquidity and not at all by the size of the clip — a $50 order and a $50,000 order in CRO are both charged 50bp. This would also retire the cap's own justification, since "the 1-unit notional this engine fills" would stop being an implicit assumption and become an explicit input.
  3. Raise the admission floor to $5M/day. Closes it from the other end — every admitted asset would land in the live sqrt region by construction. But it disqualifies every current shortlist candidate and live PAXG at $1.22M, so it is a policy decision, not a modelling one.

The current configuration does none of the three.

Acceptance criteria

  • The cohort no longer receives an identical, capped rate regardless of its actual liquidity, or the cap is documented as a deliberate floor-on-pessimism with its cost stated.
  • Whatever ships, keel simulate's per-product table keeps printing floor/cap/anchor beside every result so a number's assumptions stay recoverable.
  • A control asset above the cap threshold (BTC/ETH) is unaffected — regression-tested.
  • If the admission floor moves instead, live PAXG's status is decided explicitly rather than by side effect.

Notes

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions