Starting small

Kalshi vs Polymarket in soccer 1X2 markets, part 4 of 4: which of the three resting orders earn their place, how tight the guard should be, how small an order and how much cash a first real-money test needs, and where its profits and losses come from.

Part 4 of a trade-tape study of soccer 1X2 markets on Kalshi and Polymarket: the maker/maker replay with fewer orders, a guard buffer, order sizes from 100 to 10 contracts, a cash cap per venue, a fixture-by-fixture decomposition of P&L, and strong against weak teams, leading to the configuration of a small real-money test.
Author

Zehao Zhou

Published

October 8, 2026

Part 3 ended with a replay of three resting orders per team-win outcome, a Polymarket YES bid, a Polymarket YES ask and a Kalshi YES ask, against both venues’ recorded order books. At 100 contracts per order, its best club configuration made $14.9 per fixture at the back of every queue. It also had a standard deviation of $49 per fixture, a worst fixture of −$113, and, as section 3 shows, a busiest fixture that tied up $10,603 across the two venues.

Before putting money behind it, the same replay was run again to answer the questions a first real-money test raises, above all one: how small can the test be and still be informative?

Unless stated otherwise, every run is part 3’s replay with its best club variant: team-win outcomes in play, the 996 club fixtures of the six club competitions, the worst-case queue (ρ = 1), the Kalshi order at Kalshi’s best ask, and the guard on. The World Cup appears where it behaves differently; that tournament is over.

Summary

  1. All three orders beat either pair. In club play, three orders make $14.9 per fixture at ρ = 1, against $10.5 for the Polymarket bid with only the Kalshi ask and $11.8 with only the Polymarket ask. Dropping either ask costs $3–8 per fixture. Kalshi adds value twice, as a signal for the guard and as an exit.

  2. The guard’s one-tick reactions are not noise. Letting Kalshi cross the order by 1–3 ticks before pulling it leaves club P&L where it was ($14.2–26.0 across buffers and queues). It trades fewer cancels for more and worse bid fills. A 1-tick buffer is a robust default; it is not a profit lever.

  3. Smaller orders keep more per contract. At 10 contracts the replay makes $2.86 per fixture: 0.29 per contract of order size against 0.15 at 100, with a worst fixture of −$17 instead of −$113.

  4. Cash, not losses, is what a small account runs out of. Every pair completed across venues locks $1 until settlement, so the cash a fixture needs grows with how much it trades. At 10 contracts, a cap of $200 on Polymarket and $300 on Kalshi costs 10% of the P&L and leaves the losing side of the distribution unchanged.

  5. Profit comes from a few busy fixtures; losses from inventory held into price jumps. The median club fixture makes $1.11, and the top 10% of fixtures produce 63% of the total. Edge is positive in every volume band; fixtures lose when a position is open as the price jumps, mostly short YES when that team scores.

  6. Quote both team-win outcomes, favourite and underdog. The two outcomes of a fixture do not offset each other, and the favourite’s higher total comes from trading more, not from earning more per contract.

The resulting first test runs 10 contracts per order on all three orders with the guard, a cash cap per venue, and both outcomes of every enabled club fixture. Section 7 lists the configuration and what is still unknown; the system built to run it is described in Building the maker/maker trading system.

Definitions added in this part

The vocabulary of part 3 carries over: pm_yes, pm_no and k_no are the three orders, q is inventory (Polymarket YES held minus NO held on either venue), and ρ is the share of the displayed queue that trades ahead of an order.

Term Meaning here
L Order size and inventory scale, in contracts. The bid is sized L − q and each ask L + q, at most 3L. Part 3 used L = 100.
Guard buffer How far, in 1 c ticks, Kalshi’s book may cross a Polymarket order before the guard pulls it. Buffer 0 is part 3’s guard.
Double fill A fixture where both asks filled together, so that inventory exceeded L.
Cash needed Per venue and fixture, the peak during the match of cash paid for open positions plus the collateral of resting orders.
Fixtures needed The number of fixtures before a 95% interval on the mean P&L excludes zero, if the replay is right: (1.96 × SD ÷ mean)².
Edge, inventory P&L split into the value of each fill against Kalshi’s mid at that second (net of the Kalshi fee), and the net position times later mid changes.
Jump second A second in which Kalshi’s mid moves by 3 c or more: a stand-in for goals and other sudden repricings.
Strong, weak team The team priced higher, or lower, by both venues’ pre-game prices averaged over the last 30 minutes before kickoff.

1. All three orders, or two?

The replay was run with one of the two asks switched off, to see what each exit adds:

Setup Resting orders What it tests
Three orders pm_yes + pm_no + k_no Part 3’s design, the reference
PM bid + Kalshi ask pm_yes + k_no One exit: no double fills, one venue to cancel on after a fill
PM bid + PM ask pm_yes + pm_no A plain Polymarket market maker; with the guard on, Kalshi’s book is still used as a signal
Clubs, L = 100 three orders PM bid + Kalshi ask PM bid + PM ask
ρ = 1 · guard off $13.0 $8.0 $10.1
ρ = 1 · guard on $14.9 $10.5 $11.8
ρ = 0.25 · guard off $23.4 $16.1 $15.7
ρ = 0.25 · guard on $25.9 $19.9 $18.2
losing / 5th percentile / fixtures needed (ρ = 1, guard on) 38% / −$42 / 42 39% / −$47 / 74 37% / −$44 / 47

In club play, all three orders beat either pair in every run, by $3–8 per fixture.

Kalshi adds value twice. A plain Polymarket market maker without the guard, which uses nothing from Kalshi, makes $10.1 at ρ = 1 and $15.7 at ρ = 0.25. Using Kalshi’s book as the guard’s signal lifts it to $11.8 and $18.2; adding the Kalshi order as an exit lifts it to $14.9 and $25.9, 48–66% more than without Kalshi at all.

The double-fill risk is worth taking. The three orders double-fill in 9% of club fixtures and the pairs never do, yet the downside is similar: 37–39% of fixtures lose in each setup, and the 5th percentile is −$42, against −$47 and −$44 for the pairs.

PM bid + PM ask is the fallback. It trades on one venue, has the lowest variance and needs the fewest fixtures at ρ = 0.25 with the guard (24), but its pairs take the longest to complete (a median of 212 s, against 106 s). At the World Cup without the guard it about matches three orders ($41.2 against $41.3 at ρ = 1). The test keeps all three orders, with a switch per order so the fallback is a setting, not a code change.

2. How tight a guard?

Part 3’s guard pulls the Polymarket bid as soon as Kalshi’s best ask reaches it. A goal moves Kalshi several ticks at once, while a move of one or two ticks may come back. The idea tested here is to let Kalshi cross the order by a buffer before pulling it:

  • rest pm_yes only while b < Kalshi best ask + buffer;
  • rest pm_no only while a > Kalshi best bid − buffer.

A larger buffer keeps the order up through small Kalshi moves and still pulls it when a jump arrives.

Clubs, ρ = 1 P&L per fixture Guard cancels per fixture Bid contracts filled Bid markout at the fill Double fills (fixtures)
guard off $13.0 0 1,208 0.41 c 15%
buffer 0 $14.9 35 940 1.53 c 9%
buffer 1 $14.7 10 1,125 1.15 c 13%
buffer 2 $14.3 4 1,165 1.04 c 15%
buffer 3 $14.2 2 1,177 0.98 c 15%

In club play the buffer is neutral. P&L barely moves across buffers 0–3, and every interval overlaps. A buffer trades fewer guard cancels (35, 10, 4, 2 per fixture at buffers 0–3) for more bid fills, each with a worse markout, and more double fills. So the one-tick crosses that buffer 0 reacts to are not pure noise: the fills they avoid are worse ones.

At the World Cup the buffer removes the guard’s cost. Buffer 0 gives $32.0 there against $41.3 without the guard at ρ = 1; buffer 1 recovers most of it ($39.1), and buffers 2–3 are back at or above no guard ($42.1–42.6).

A 1-tick buffer is therefore a robust default: club P&L is unchanged ($14.7 against $14.9 at ρ = 1) with 71% fewer guard cancels, which cost a live system rate limits and latency that the replay does not charge.

3. Smaller orders

The replay was repeated at L = 50, 20, 15 and 10 contracts, with everything else unchanged except the minimum order: at 20 contracts and below, no Polymarket order or top-up under 5 contracts and no Kalshi order under 1, the venues’ minimums.

The cash a fixture needs is tracked each second, per venue and summed over both team-win outcomes (one account per venue):

  • Polymarket: cash paid for positions, with every Polymarket YES + NO pair merged back into $1 at once, plus the collateral of resting orders;
  • Kalshi: cash paid for NO, locked until settlement, plus the collateral of the resting NO bid.

A fixture’s requirement is the peak of that series.

L P&L per fixture Per contract of L Mean ÷ SD Losing 5th pct / worst fixture Cash, 95th pct (PM / Kalshi) Cash, max (PM / Kalshi) Fixtures needed
100 $14.89 [11.8, 18.1] 0.15 0.30 38% −$42 / −$113 $1,269 / $1,519 $4,741 / $6,411 42
50 $9.24 [7.6, 11.0] 0.18 0.33 35% −$20 / −$53 $731 / $918 $2,535 / $3,721 35
20 $4.86 [4.0, 5.7] 0.24 0.37 33% −$8 / −$32 $344 / $450 $1,057 / $1,664 29
15 $3.91 [3.3, 4.5] 0.26 0.38 32% −$6 / −$25 $274 / $358 $812 / $1,290 28
10 $2.86 [2.4, 3.3] 0.29 0.39 31% −$4 / −$17 $195 / $254 $556 / $897 26

Half the size keeps 62% of the P&L. At L = 50 the replay makes $9.2 per fixture against $14.9 at L = 100, because fills fall only to 61%: a trade that reaches our price fills a larger share of a smaller order. P&L per contract of L rises with every step down, from 0.15 at L = 100 to 0.18 at 50 and 0.29 at 10. The gain slows at 10, partly because Polymarket’s 5-contract minimum leaves small shortfalls unfilled.

Risk falls faster than P&L. The standard deviation per fixture drops from $49 to $7.3 and the worst fixture from −$113 to −$17. The ranking of part 3’s four variants is the same at every size.

The sample a test needs barely changes. If the replay is right, a live test at L = 10 needs about 26 club fixtures for a 95% interval that excludes zero, against 42 at L = 100, with a tenth of the money at risk.

Cash grows with turnover, not with L alone. Every YES/NO pair completed across venues locks $1 until settlement, so busy fixtures stack up locked pairs through the match. Halving L cuts the 95th percentile only to 58–60%; at L = 10 it is $195 on Polymarket and $254 on Kalshi, and fixtures played at the same time add up.

4. A cash cap per venue

At L = 10, 6% of club fixtures need more than $200 on Polymarket or $300 on Kalshi (section 3). This run caps the cash instead.

Rule: stop opening, keep hedging. Each second, order sizes are cut to what the remaining cash can fund; remaining cash is the cap minus cash already paid for positions. Whichever order reduces |q| is funded first, and the order that opens new exposure gets what is left. Selling YES already held needs no cash. The replay runs each team-win outcome separately, so each gets half the budget; a live account shares it between the two outcomes, so this split is slightly conservative.

Clubs, L = 10 P&L per fixture Losing 5th pct / worst SD PM cash, median / p90 / p95 / max Kalshi cash, median / p90 / p95 / max
no cap $2.86 [2.45, 3.33] 31% −$4.0 / −$16.9 $7.3 $39 / $139 / $195 / $556 $40 / $171 / $254 / $897
cap $200 / $300 $2.57 [2.16, 3.03] 31% −$4.0 / −$16.9 $6.9 $39 / $110 / $122 / $200 $40 / $156 / $197 / $300

The cap costs about a tenth of the P&L: 10% for the best variant ($2.86 to $2.57 per fixture), 10–11% for the other three, with their ranking unchanged. The cash peaks stay within the cap.

It binds on the fixtures that earn the most. Only 56 of 996 club fixtures needed more than $200 / $300 without the cap, but they carried 22% of the total P&L. Capped, they still earn $7.3 per fixture on average, against $11.3 without the cap: the cash a fixture needs grows with the pairs it completes, and so does its P&L.

Hedging is not affected. The priority rule keeps the reducing order funded: the largest inventory is 30 contracts (3L) and the worst fixture is the same with or without the cap. The World Cup, which trades far more per fixture, is cut by 15–28%.

Most single fixtures are close to zero, the shape to expect from a live test. The median club fixture makes $1.11 against a mean of $2.86, and losses stay small (5th percentile −$4.0, worst −$16.9). The profit comes from a long right tail: the 95th percentile is $13.9, the 99th $28.8, and the top 10% of fixtures produce 63% of the total. The cap trims that tail (95th percentile $11.8) and leaves the left one alone.

The spike at zero is fixtures that barely traded. 117 club fixtures end between −$0.50 and $0, 65 of them with no fill at all. Their markets did trade, but our orders were rarely live: a median of 154 quoted seconds across the three orders, against 3,886 for fixtures above $1. A stale book, the 5–95 c price band, the guard or the back of the queue kept them off.

A run of small losses at the start of a test is therefore expected, and is not evidence against the strategy; the edge shows only across many fixtures.

5. Where the P&L comes from

Why do fixtures differ, and where are the losses made? This section decomposes the L = 10 run without the cap. With m(t) the Kalshi mid at the start of second t, each outcome’s P&L splits into:

  • edge: each fill’s value against m at its second, net of the Kalshi fee, the spread captured;
  • inventory: Σ q(t) · (m(t + 1) − m(t)), the net position times the price change, of which the part in jump seconds stands in for goals; there are no goal timestamps in the replay.

Edge plus inventory reproduces the replay’s P&L to within about $1 per fixture.

Club fixtures Number P&L Edge Inventory of which jump seconds of which other seconds
all 996 $2.86 $4.39 −$1.53 −$1.52 −$0.01
losing 306 −$2.31 $1.90 −$4.21 −$3.35 −$0.86
worst 5% 50 −$5.90 $1.94 −$7.85 −$6.34 −$1.51

Volume separates fixtures; depth matters only given volume.

  • Rank correlation with P&L: our fills 0.46, quoted seconds 0.36, Kalshi taker volume 0.29, Polymarket taker volume 0.23, depth at the touch alone −0.05 to −0.02.
  • From the lowest to the highest taker-volume quintile, P&L rises from $1.0 to $5.0 per fixture. Nearly all of the rise is edge ($2.4 to $7.2); inventory is −$2.2 to −$1.3 in every quintile.
  • Within a volume quintile, deeper books earn less, because at ρ = 1 the whole displayed queue must trade first. In the top quintile: $7.3 with thin books, $5.6 mid, $4.1 deep.

Losses come from carrying inventory into jumps, not from being filled at the jump.

  • Over all fixtures, edge is $4.39 per fixture and inventory −$1.53, of which −$1.52 falls in jump seconds: outside jumps, inventory nets to about zero.
  • Losing fixtures still have positive edge ($1.90); they lose −$4.21 on inventory, −$3.35 of it in jumps.
  • Short YES as the price jumps up, an ask filled and then that team scores, is the main loss: −$7899 across the club fixtures. Of that, −$6866 comes from positions held earlier and not yet paired; only −$899 from Kalshi asks filled in the 10 s before the jump.
  • Long YES as the price drops costs −$1868, and bids filled in the 10 s before the drop lose only −$194: the guard mostly prevents being hit just before a goal.
  • Jumps the other way pay back $8251. Net, jump seconds cost $1515, about a third of the total edge of $4373.

Why mostly short YES. Two asks rest against one bid, each sized L + q, so the ask side fills more often and q is usually negative; a short YES loses when that team scores.

Future work could therefore target how long inventory is held rather than the guard: for example, sizing the two asks so that together, rather than each, they cover L + q, or closing an unpaired position as a taker after a fixed time.

6. Per outcome or per fixture, strong or weak team

The replay runs each team-win outcome on its own and adds the two up per fixture, with no rule linking them. Because our orders do not change the tape, that sum is exactly what a joint run would give unless a rule used both outcomes, such as a shared cash cap or a joint inventory limit.

The two outcomes do not offset each other. Their P&L within a fixture is positively correlated (+0.16 in the capped run). What they share is the fixture’s volume: busy fixtures earn on both, quiet ones are near zero on both. Per fixture, the mean doubles against a single outcome ($2.57 against $1.31), while the left tail barely moves: worst −$16.9 against −$15.8. A shared cash cap is therefore likely to win back little, since both outcomes tend to need cash at the same time.

Strong against weak team (no cap):

No cap, per outcome Mean Median Losing Losing, if filled No fill Mean fills SD Worst
strong team $1.76 $0.45 33% 36% 10% 215 $5.5 −$15.8
weak team $1.19 $0.51 23% 28% 17% 126 $4.1 −$11.7
  • Paired within the fixture, the strong team earns $0.55 more per outcome, 95% interval [0.13, 0.95]. With the cap the gap is $0.35, [−0.02, 0.79]: the cap trims the strong team’s busiest fixtures.
  • At equal fills the strong team is worse, not better. Within each quintile of contracts filled, the weak team earns more and loses less often, until the busiest quintile ($5.06 against $3.71). The strong team’s higher total comes from trading more. A likely reason, not tested here, is section 5’s short YES: the stronger team scores more often, which is the jump that hurts a short position.

For a small bankroll, the losing share matters less than it looks. 100 fixtures drawn at random 2,000 times, fixtures independent and not overlapping:

Traded (no cap) Mean per fixture Mean ÷ SD P&L after 100, median Max drawdown, median / 95th pct Behind after 100
strong only $1.76 0.32 $172 $13 / $24 0.00%
weak only $1.19 0.29 $115 $12 / $22 0.05%
both outcomes $2.86 0.39 $281 $12 / $23 0.00%

A 95th-percentile drawdown of $23 is under 5% of a $200 + $300 budget: loss size is not what a small account runs out of; cash locked in open positions is (sections 3–4). Trading the weak team alone barely lowers the drawdown and gives up most of the P&L. Both outcomes stay in, with no filter on team strength.

7. The first test

Setting Value Evidence
Scope Team-win outcomes of club fixtures, both outcomes, in play Part 3; section 6
Orders All three: pm_yes, pm_no, and k_no at Kalshi’s best ask Section 1; part 3 section 6
Order size L = 10 contracts Section 3: the most P&L per contract and per unit of risk, about the same sample needed
Guard On, buffer 0, as replayed; a 1-tick buffer is the first candidate change Section 2
Cash cap Per fixture, shared by both outcomes: $300 on Polymarket and $300 on Kalshi Section 4. The replay capped Polymarket at $200 but merged pairs at once; the first live version does not merge, so pairs stay locked and the Polymarket cap is higher
Sample About 26–28 club fixtures before a 95% interval can exclude zero Sections 3–4, without and with the cap
Changes One setting at a time, between fixtures

The first fixtures are a measurement more than an income: they have to pin down what the replay could only assume. The trading record therefore keeps, in full:

  • every decision with its reason, and every order event and fill with exchange and local timestamps;
  • the queue at each resting order (displayed size at our price on acknowledgement, volume traded there, cancellations ahead), which gives the realized ρ, and Kalshi’s own queue position for each order;
  • for every fill, both venues’ books and trades from 5 s before to 30 s after it;
  • one-second books on the traded markets, so the replay can be run on exactly the fixtures traded and compared order by order;
  • match events, balances, and the configuration and code version of each fixture.

The architecture of that system is in Building the maker/maker trading system. Its results will be published once enough fixtures have been traded to compare the live fills with the replay.

What is not measured

  • The replay’s limits carry over from part 3: our orders do not change the tape, cancellations ahead of us exist only through ρ, Polymarket books arrive about every 3 s, latency is 1 s, residual inventory is marked at the last Kalshi mid, and draws are not replayed.
  • The cash model assumes Polymarket pairs are merged at once; the first live version does not merge, so it ties up more Polymarket cash than modelled.
  • The jump decomposition uses moves of 3 c or more in one second as a stand-in for goals.
  • Strong and weak teams are labelled by pre-game prices, with no threshold; fixtures without a pre-game price are left out of that split.
  • The bankroll draws treat fixtures as independent and sequential; fixtures played at the same time add up in cash and drawdown.

Data, methods and updates

This is a dated static snapshot. The page contains 6 interactive charts, each with its plotted aggregates downloadable as CSV and Plotly JSON, and a snapshot manifest with source hashes. The source notebook is available without outputs (sections 7.1–7.6 are this part); it requires the local research modules, curated trades and recorded order books, so on its own it does not recreate the pipeline. The publication notes describe the build.

Method notes:

  • Runs: sections 1–2 at L = 100 with ρ ∈ {1, 0.25}; sections 3–6 at ρ = 1. Intervals are 95% fixture-bootstrap intervals.
  • Fees: Kalshi maker 1.75% × p(1 − p) per the published schedule; Polymarket maker 0.
  • Cash needed: each fixture’s peak, summarised across fixtures; the two venues peak at different times.
  • Strong and weak teams: both venues’ pre-game volume-weighted prices over the last 30 minutes before kickoff, averaged, one venue when the other is missing.