Skip to content
← Blog

Why every arb carries an executable size

dino.markets

A price on its own does not tell you how much you can trade at it. A book can show a tempting ask with one contract behind it and nothing underneath. An arb computed on the top of book alone looks great and fills almost none of your size.

So we size every opportunity to the depth that is actually there. The max_stake field is the largest amount both legs can fill at once. The edge_pct is the return left after walking each book down to that size, net of venue fees. Read together, they tell you the trade and how big it can be.

Here is the shape of it on a two-way arb:

{
  "edge_pct": 1.83,
  "max_stake": 240,
  "legs": [
    { "venue": "kalshi", "outcome": "KC", "ask": 0.52, "book_depth_at_ask": 240 },
    { "venue": "polymarket", "outcome": "BUF", "ask": 0.46, "book_depth_at_ask": 310 }
  ]
}

The Kalshi leg has 240 of depth and the Polymarket leg has 310, so the pair can fill 240 before the cheaper price runs out. The 1.83 percent is what survives after the fees on both sides. If the edge held only for the first contract, max_stake would say so, and you would know to skip it.

This example predates the v2 API and uses field names since renamed; see the quickstart for the current shape.

The full field list is in the Opportunity object reference.

More from the blog