Case study
Kalshi Automated Trading System
A weekend that turned into two trading bots sharing one execution engine. One chased whale consensus, one traded crypto binaries, and together they traded live across 820+ markets. I ran it for about a month, then switched it off.
The thesis
Prediction markets price events by aggregating opinions, but the opinions are not equal. A handful of accounts on Kalshi consistently moved markets when they traded. If those accounts agreed on a direction, following them should be profitable, because their information was better than the crowd average. The question was whether that signal was strong enough to survive fees and slippage, and whether I could detect it fast enough to act on it.
What it did
- Whale consensus bot: watched where the biggest traders on Kalshi were agreeing, then took the same side.
- Crypto binaries bot: traded the crypto yes/no contracts on their own signal.
- Shared execution engine: both strategies placed orders through one code path, so sizing and fills behaved the same way for each.
- Risk infrastructure: Kelly sizing on every position, circuit breakers, and a kill switch at 40% drawdown.
- Telegram control: every fill, every signal, and every breaker trip landed on my phone, and one message shut the whole thing down.
How it was built
Python throughout, with WebSocket streams feeding live prices to both strategies and one execution layer underneath them, so sizing and fills behaved identically whichever bot fired.
I did not trust it, which turned out to be the useful instinct. Before any real money went in I backtested the whale strategy across 12,775 markets and ran a 10,000-path Monte Carlo, less to prove it worked than to find out how it would die. Then I built the parts that stop it: fractional Kelly sizing so no single position could matter too much, circuit breakers on the strategy level, and a kill switch at 40% drawdown. In its first week live it turned $20 into $500, on stakes deliberately small enough that a bad week would have cost me nothing.
The last piece was a Telegram bot, and it is the part I would build first next time. Every fill, every whale signal, every breaker trip arrived on my phone, and one message killed everything. It ran in Docker on GCP, which meant I was never at the machine when it mattered. Being able to stop it from a train was the difference between something I could leave running and something I could not.
Python, WebSockets, Docker, GCP.
No longer running, April 2026.
Back