You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
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).
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.
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
PAXG's own median is measured on 470 daily bars (PAXG-USD since 2025-05-08). Cross-checked against the cached PAXG-USDT series (1,826 bars, 2021-07 → 2026-07): median $3,386,380 → 60.8bp, so the short window understates its longer profile by 2.76×. It is capped in both views, so the finding holds; only the magnitude moves (2.02× → 1.22×).
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_volumeisfloor × 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: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: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
The current configuration does none of the three.
Acceptance criteria
keel simulate's per-product table keeps printing floor/cap/anchor beside every result so a number's assumptions stay recoverable.Notes
PAXG-USDsince 2025-05-08). Cross-checked against the cachedPAXG-USDTseries (1,826 bars, 2021-07 → 2026-07): median $3,386,380 → 60.8bp, so the short window understates its longer profile by 2.76×. It is capped in both views, so the finding holds; only the magnitude moves (2.02× → 1.22×).