kalshi-spread-strike-mechanics draft

How Kalshi expresses spread and total markets as a ladder of independent binary markets — and how this composes with cross-strike blended positions

Tags
kalshi spread total strike blended-position position
Vocabulary
strike_ladder
On Kalshi, a spread or total is expressed as a series of independent binary markets at different integer thresholds — e.g. 'Patriots win by 3 or more', 'Patriots win by 7 or more', 'Patriots win by 10 or more'. Each market is its own Yes/No book.
half_point_translation
Sportsbook spreads typically use half-points (-3.5, -7.5) to eliminate pushes. Kalshi binary markets use integer thresholds ('win by 4 or more'). The semantic equivalence is: -3.5 sportsbook cover = 'win by 4 or more' Kalshi binary.
independent_markets
Each Kalshi strike-binary is its OWN market, with its OWN order book, its OWN Yes/No prices, and its OWN fee model. Different strikes do not share probability mass at the order-book level — they are correlated only through the underlying game.
composition_with_blend
When you hold positions across multiple Kalshi strike-binaries on the same game, you are holding a blended-spread-position whose payoff curve is computed by summing per-leg P&L over the integer-margin (or total) outcomes. Each Kalshi binary contributes one leg.
fee_exempt_bucket
Spread and total markets on Kalshi are fee-exempt today (game/moneyline markets are not). This affects the cents → American conversion (raw vs. fee-adjusted) and the dollar economics of holding a blend.

A sportsbook quotes a spread as a single line with a single price — "Patriots −3.5 at −110." Kalshi quotes the same economic structure differently: as a ladder of independent binary markets at integer thresholds. "Will the Patriots win by 3 or more?" is one market, with a Yes/No book. "Will the Patriots win by 7 or more?" is a separate market, with a separate Yes/No book. To take a spread position on Kalshi you pick the strike that matches the cover line you want and trade that one binary.

The two consequences for an operator coming from sportsbook conventions are: (1) different strikes on Kalshi are different markets, not different points on a single quote — your Yes-on-"win by 4+" and Yes-on-"win by 7+" share no order-book mechanics and only share the game's outcome; (2) the half-point sportsbook convention has to be translated to integer Kalshi thresholds — "Patriots −3.5" and "Patriots win by 4 or more" are the same bet, while "Patriots −3" and "Patriots win by 3 or more" differ by whether the integer 3 pushes (sportsbook push) or wins (Kalshi binary, which has no push state because it is a strict ≥ comparison against the threshold).

When you hold positions across multiple Kalshi strike-binaries on the same game, you are holding a blended-spread-position in the sense of blended-spread-position. Each Kalshi binary is one leg; the combined P&L is the per-outcome sum across legs. The hooks, key numbers, and dead zones discussed in that entry apply directly. The bucket-by-bucket aggregator described there (aggregate_spread_total_sides) sees one Kalshi binary as one bucket — not the whole "Patriots spread market" — because that's how Kalshi structures the data.

For exact field semantics (how Kalshi names strike thresholds in tickers, how event_ticker differs from ticker, the fee schedule on spread/total vs. game markets), defer to kalshi-mcp via search_gotchas(spread), search_gotchas(strike), and lookup_field(yes_price). Mimir owns the conceptual mapping; kalshi-mcp owns the API-level details.

Worked example

A Patriots-vs-Jets game. The operator believes the Patriots will win comfortably (somewhere around 7-10 points) but wants protection if the game is closer than expected. Two Kalshi positions, on two different binary markets that both reference the same game:

The legs combine to express the view: "I'm long Patriots covering −3.5 (Leg A's Yes-on-4+ resolves Yes if margin ≥ 4, equivalent to sportsbook −3.5 cover) but I'm hedged with a No on the bigger spread (Leg B pays out if margin ≤ 6, the No outcome of 'win by 7 or more')."

Build the per-outcome P&L curve over Patriots' margin of victory M. Each leg's contribution depends on whether M clears the leg's threshold:

Margin M Leg A (Yes on 4+) Leg B (No on 7+) Combined P&L
Pats win by ≥ 7 +$53 (Yes resolves) −$32.50 (No loses) +$20.50
Pats win by 4-6 +$53 (Yes resolves) +$17.50 (No resolves) +$70.50
Pats win by 0-3, tie, or Jets win −$47 (Yes loses) +$17.50 (No resolves) −$29.50

Notice the structure:

This is exactly the framework in blended-spread-position. The Kalshi-specific detail is that each leg is its own binary market with its own Yes/No book — Leg A and Leg B don't share liquidity or order-book mechanics. If the order book on the "win by 4+" market is thin, Leg A's execution doesn't benefit from depth on the "win by 7+" market, even though both reference the same game. Use kalshi-mcp__lookup_field(yes_price) to pull current quotes per binary; use position-aggregation for combining the lots into a portfolio view.

For the cents → American conversion on each leg, follow kalshi-yes-to-american-odds. Note the fee-exemption: spread/total markets on Kalshi are fee-free today, so use the raw American conversion (Kairos's is_fee_exempt_bucket("spread") returns True; american_from_kalshi_cents(47, "spread") calls no_maker_fees, not kalshi_half_maker). On the game/moneyline market the fee adjustment applies; on the spread/total binaries it doesn't. Confirm the current bucket-vs-fee mapping via kalshi-mcp__search_gotchas(fee).

Gotchas

Open questions

Cross-references