Kalshi MM

← Trading

How an event moves from a name you type today to live orders the moment its Kalshi markets open. The goal: have prices staged and the mapping pre-checked so a human only has to validate and click Place.

The flow, end to end

1

Arm a future event live

Click next to a project. The Arm a future event modal collects the name, Kalshi series (e.g. KXNASCARRACE), an optional event ticker, and a link. You can reuse the rows from a previous event — last week's NASCAR grid, say — so the outcomes, prices and quantities are staged before any market exists. Tickers and fills are not copied; only your inputs.

2

Watch for the markets to open live

Kalshi lists a game/race event ticker only hours before start. The autonomous mapper polls each armed event's series on a set interval (default ~10s, tunable on the Settings page), matches the appearing event by row overlap, and auto-runs Map the moment it opens — firing a Slack alert to #nv_trading. You can still set the event ticker yourself to force it; the watcher just means you don't have to.

3

Map — name matching & auto-mapping live

Click Map. Each row's friendly name is matched to a Kalshi market ticker using exact-name, team+score, and unique-surname strategies. Every row comes back matched, ambiguous, or unmatched. Populate from ticker instead loads every outcome on the event so you can trade any of them.

4

Alert & validate planned / live

When markets are auto-mapped, an alert (Slack + an in-app notification & sound) tells someone to come validate. Today you review the grid directly: fix any ambiguous / unmatched rows, confirm tickers (the ✓/⚠ badge validates against Kalshi live), and eyeball the prices you staged in step 1.

5

Place live

Click Place orders…. You get a preview with the exposure gate (it refuses orders that would exceed the project's capital limit), then a two-step Place LIVE confirm. Because prices were staged up front, validating and firing takes seconds.

Fill qty (above the grid): type a quantity and click Apply to priced rows to drop that qty onto every row that already has a price but no quantity — a fast way to size a whole staged field at once. Rows that already carry a qty are left alone.

Auto checkbox (per row): tick it to have that row's order placed automatically the moment it maps to a live Kalshi ticker — whether you click Map or the background auto-mapper does. Only rows with a price + qty staged auto-place, and the same exposure & guard gates still apply. Use with care: this fires real orders with no human confirm.

Reusing rows from a previous event

Recurring markets (a weekly race, a nightly slate) have the same outcome structure and often similar prices. When arming a new event, pick a source from Reuse rows from — events in the same project are listed first, each with its row count.

What gets copied

So you can price up this week's race off last week's numbers before Kalshi has even listed it, then just Map → validate → Place when it opens.

Event states

future — armed, not yet mapped current — mapped to live markets settled — every mapped market finalized past — closed out

An event becomes current when Map (or Populate from ticker) succeeds, and flips to settled once all its markets finalize on Kalshi.

More

Full write-up lives in the repo at marketmaker/docs/event-arming-flow.md. The Feed Monitor shows which tickers the recording backend is watching.