Polymarket lets people bet on whether it will rain in a particular city by a particular date. NOAA publishes a probability of precipitation for the same city and date, for free, as an API.
If those two numbers disagree by enough, there is an edge. That is the whole idea.
How it works
The bot fetches forecasts from api.weather.gov, extracts the probability of
precipitation for the relevant window, and derives a fair price. It then compares
that to what the Polymarket order book is asking, and takes a position only when
the gap is wide enough to survive fees and slippage.
Weather is the default market class. There is configuration for non-weather markets, but it exists as an escape hatch rather than the point.
The part I care about
Dry run and live execution are genuinely separate. dry_run.py has no
order-placement path at all — not a disabled one, not a flag, none. Placement
exists only in live_execution.py, behind three gates, one of which refuses
outright without an explicit --confirm-live.
That separation is deliberate and it is the thing I would defend. A trading bot where the simulation and execution paths share code is a bot that will one day place a real order while you believe you are testing.
There is also a promotion gate: configurations have to clear thresholds across multiple runs — minimum survival rate, maximum average drawdown — before they are allowed anywhere near real money. Nothing has passed it yet. That is the gate working, not failing.
Honest status
It has never traded real money. The bankroll in the config is fifty dollars, and the interesting part was never the profit — it was building something where the safe path is the default and the dangerous one takes effort to reach.