---
name: xlow VERDICT — the edge is real and it is smaller than the spread. Stop trading it at the ask.
description: 2026-07-25 conclusion. xlow's own line movement is +0.31c (95% CI [-0.05, +0.67]) against a 0.67c half-spread = net -0.36c/bet. Even the optimistic end of the CI is break-even, before fees. Filtering to tight-spread bets nets -0.02c. Selection carries real information; execution costs about exactly what it is worth. Only tighter spreads change this.
metadata:
  type: project
---

The conclusion of the whole xlow effort, reached 2026-07-25 after a full day of
dead ends. **This is the finding that explains everything else — cite it before
re-running any of the analyses below.**

## The measurement

For every xlow-fired bet, entry at the first qualifying snapshot, close at the
last pre-KO snapshot, on the firing book:

| | |
|---|---|
| line moves toward our side | **+0.31c** (t=+1.70, n=112) |
| 95% CI on that movement | **[−0.05c, +0.67c]** |
| half-spread paid to enter | **0.67c** |
| **net** | **−0.36c per bet** |

Out-of-sample (n=105) is the same: +0.36c move vs 0.67c spread.

**The upper end of the confidence interval equals the half-spread exactly.** The
best case the data supports is break-even, before Kalshi fees.

Split by entry spread — filtering to cheap-to-enter bets does NOT rescue it:

| half-spread | n | move | cost | net |
|---|---|---|---|---|
| 0.3–0.6c | 80 | +0.48c | 0.50c | **−0.02c** |
| 1.0c+ | 23 | −0.09c | 1.17c | −1.26c |

## Why this settles it

On a ~22c contract, 0.31c of movement implies an edge of roughly **1.4%**. The
backtest claimed **+24.7%**. A genuine 24.7% edge would reprice the closing line by
several cents, not a third of one. **The market's own repricing says the backtest
overstated the edge by an order of magnitude** — which is the simplest explanation
for a forward test that sat near zero from the day it started.

This also retro-explains every failed hunt of 2026-07-25: South America, the
draw-fade trade, betting home, the 20–25% price bucket, the outlier-reversion
mechanism. Nothing was there to find because the edge was always ~1%, and
execution took ~3%.

It independently reproduces [[project_clv_spread_finding]] (2026-05-30, baseline
signal, n=395: +0.30c move vs 0.73c half-spread). Two signals, two samples, five
months apart, same answer. That study ALSO killed the obvious fix: resting limits
below the ask fail to adverse selection — the fills are the bets moving against you.

## What is NOT wrong

The selection genuinely carries information. The line moves toward our side, and
Pinnacle-anchored CLV does identify something real. This is not a broken model;
it is a real signal that is worth about what it costs to act on.

## CORRECTION (same day): "wait for tighter spreads" is IMPOSSIBLE

I originally wrote that the fix was waiting for half-spreads to fall toward 0.3c.
**That was wrong and I had not checked the tick size.** All three venues price on
a 1-CENT grid (`price_level_structure: linear_cent`, step 0.0100):

| venue | quotes at 1c spread | below 1c | median |
|---|---|---|---|
| Kalshi | 76.8% | 0% | 1.00c |
| Poly.com | 87.8% | 0.6% | 1.00c |
| Poly-US | 63.2% | 0.0% | 8.00c |

**The minimum possible spread is 1c, so the minimum half-spread is 0.5c — and
77% of Kalshi quotes are ALREADY there.** Liquidity is not the binding
constraint; the tick is. Against a 0.31c edge:

    best execution the venue structurally permits = -0.19c per bet

xlow cannot be profitable on these venues at ANY liquidity level. This is not
"not yet" — it is arithmetic.

**The only things that would change it:**
1. an edge larger than 0.5c (xlow's is 0.31c and was measured twice),
2. a venue with sub-cent ticks (none of the three qualify),
3. **MAKING rather than TAKING** — the 0.5c is a structural rent paid to whoever
   posts the resting order. That is the profitable side of this trade, and it is a
   different business (see [[project_no_subask_limits]] for the adverse-selection
   problem that would define it).

Do NOT re-enable real trading pending "spread improvement." There is no such
improvement available.

## FEE CORRECTION — the real cost was HIGHER than this note originally said

Ground truth from 100 actual Kalshi fills (`kalshi_trader.get_fills()`):

- **Taker fee = `0.07 × P × (1−P)` per contract**, confirmed to 4 decimals against
  real `fee_cost` values. ≈1.0c on an 18c contract, 1.4c at 28c, peaking ~1.75c
  at 50c. **Across our 100 fills: $9.40 of fees on $213.99 notional = 4.39% of
  stake.**
- ~~**Maker fee = $0.**~~ **WRONG — CORRECTED 2026-08-22.** Kalshi charges the
  maker `0.0175 * p(1-p)` per contract. Verified on 248 real maker-side fills
  (`is_taker: false`), whose `fee_cost` matches the formula exactly: 0.40 ->
  $0.0042, 0.70 -> $0.0037, 0.13 -> $0.0020. That is ~1.18c on a three-leg book
  against a ~2c gross margin — more than half the maker's edge, not zero.
  The original claim rested on ONE maker fill that happened to show
  `fee_cost` 0.0000; occasional zero-fee fills still appear, but they are the
  exception. The TAKER figure above is unaffected and still stands.
  See [[project-venue-compare-maker]] for what this does to venue choice.
  Original note follows: we had exactly one maker fill in the history then
  (7.8 contracts @ 0.36, `fee_cost` 0.0000). Every other order was IOC, i.e.
  taker, because `kalshi_trader.place_limit_order` sets
  `time_in_force: immediate_or_cancel`.

So the true round-trip cost of taking was **~0.67c spread + ~1c fee ≈ 1.7c** on a
~22c contract, not the 0.67c this note first stated. The verdict gets stronger,
not weaker: a 0.31c edge against ~1.7c of cost.

## MARKET MAKING — the structurally correct answer, and why it is still hard

Fees invert completely: a maker EARNS the spread and pays nothing, while the
counterparty pays ~1c to Kalshi. Volume is genuinely there — median **175,232
contracts** per settled soccer market (MLS median 508,086; EPL max 4.6M), and 0%
of markets traded under 1,000 contracts.

**But the spread sits at the 1c minimum tick 77% of the time.** That is the
signature of makers having ALREADY competed it to the floor. You cannot quote
inside a one-tick market — only join the back of a queue, against participants
optimising for queue position. And fills concentrate adversely, which
[[project_no_subask_limits]] measured directly here (37% fill rate, P&L +$213 →
+$19).

Poly-US is the one venue with wide spreads (median ~8c) — because almost nobody
trades there; our own 6.25 contracts were the only trade one market had ever seen.
Wide spread with no flow, tight spread with flow. That tradeoff is the business.

**Verdict: real, correctly identified, and an infrastructure business rather than
a project.** Do not attempt it as a script.

## Honest caveats

- Closing-line logic assumes the closing line is efficient. These markets are
  thin, so it may not be — this cuts both ways and does not overturn the result.
- n=112. Not huge.

Related: [[project_clv_spread_finding]], [[project_xlow_rejection_criteria]],
[[project_book_sharpness_compare]], [[project_south_america_calibration]].
