
Latency was the one lever that moved a live result. Not a better model, not a better filter: the same rule, fired from a closer box, went from flat to positive for a week. Then the market caught up, which is a different guide.
Where the exchanges are
Matching-engine regions as reported or inferred from latency tests, not CDN edges. Measured round-trip times per region are being added.
What one region move did
Two regions away, a budget box needed about 700 milliseconds per order. A burstable cloud instance in the right region was fast for a few days, then throttled once its CPU credits were spent by the polling loop. A dedicated-CPU instance in Amsterdam settled at about 190 milliseconds and stayed. For Polymarket that means Western Europe; for Kalshi and Coinbase, US East.
Measure the order path, not the ping
Ping tells you the network. The number that matters is read-to-fill: the time from your book read to the exchange confirming your order. Log four timestamps per order (read, decision, sent, confirmed) and look at the median and the 95th percentile. A rule that is positive at 300 milliseconds and negative at 2 seconds needs the 95th percentile under a second, not the median.
Which VPS
| Provider | Why | |
|---|---|---|
| DigitalOcean | Amsterdam, London, Frankfurt, New York. Dedicated-CPU droplets from a few dollars a day. Affiliate link. | Site |
| Vultr | Many regions including Amsterdam and London; hourly billing makes testing a region cheap. Affiliate link. | Site |
| Hetzner | Cheapest by far. Finland and Germany only in Europe; fine for the research box, too far for the live bot. | Site |
Avoid credit-based burstable tiers (Lightsail, EC2 t-series, Azure B-series). A bot polling a book burns the credits in days, then the box throttles and every latency number you measured before is wrong.
What matters in the spec, in order
- Region. Nothing else recovers a wrong region.
- Dedicated vCPU. Two are enough for one exchange.
- NVMe disk. Tick logs grow 1 to 2 GB a day per exchange before compression.
- RAM only if you do research on the same box, and you should not: a 13 GB SQLite merge on a 7 GB machine took nearly five hours for minutes of work.