Automated weather trading for Polymarket
Polymarket Weather runs a 4-model meteorological ensemble against every active Polymarket weather market and trades the gap between forecast probability and crowd consensus.
Edge by the numbers
Bucket-hit rate
Blended ECMWF / GEFS / UKMO / NWS · 1–2 day, 2°F markets
Minimum edge to trade
Model probability vs market price
Scan interval
WebSocket + REST polling
Max bankroll per trade
Fractional Kelly cap, $100 hard ceiling
The Pipeline
How it works
Polymarket weather markets ask questions like “Will the high temperature in Chicago be between 46–47°F on April 14?” Shares in each temperature bucket trade between $0.01 and $0.99. Winning shares pay $1.00. The crowd collectively sets prices — and the crowd often hasn't read the latest model run.
Polymarket Weather continuously compares what the ensemble models say against what the market is pricing. When those two numbers diverge by more than the configured edge threshold, it enters a position. When prices converge, it exits or holds to resolution.
Market discovery.
The Gamma API scans all active weather markets, extracts condition IDs, token IDs, temperature thresholds, resolution sources, and time to expiry. Markets resolving in under 2 hours are skipped.
GET gamma-api.polymarket.com/markets?tag=weather&active=trueForecast ingestion.
Four models are queried in parallel for each city. Forecasts are matched to the exact airport weather station that Polymarket uses for resolution — city-centre coordinates introduce 3–8°F error on 1–2°F bucket markets.
ECMWF IFS · GEFS (31-member ensemble) · UK Met Office · NWS hourly observationsProbability calculation.
Each deterministic forecast is treated as a Gaussian centred on the predicted temperature, with σ derived from the forecast horizon (0.8°F at 6 hours to 5.5°F at 10 days). The normal CDF is evaluated over the market's temperature bucket. GEFS contributes its member-agreement fraction directly. Outputs are blended by weight and Bayesian-adjusted with NOAA NCEI 10-year base rates.
P(bucket) = CDF(upper) − CDF(lower) | μ=forecast, σ=horizon_errorEdge detection.
Edge = blended model probability minus current market price. Both sides of the market are evaluated: a YES edge fires a buy, a NO edge (where market price significantly exceeds model probability) fires a sell. Only trades with edge ≥ 8% and z-score ≥ 1.5 are queued.
edge = model_prob − market_price | min_edge=0.08, min_z=1.5Kelly sizing.
Position size is determined by the fractional Kelly criterion at 15% of full Kelly, hard-capped at 5% of bankroll and $100 per trade. Larger edges produce proportionally larger stakes; marginal edges produce near-zero stakes automatically.
size = kelly(win_prob, odds) × 0.15 × bankroll | cap=$100Order execution.
Limit orders are posted via the CLOB API on Polygon chain ID 137, settled in USDC. The WebSocket feed monitors fills and price movements. Unfilled orders older than the configured TTL are cancelled and re-evaluated on the next scan cycle.
POST clob.polymarket.com | tokenID, price, size, side=BUY | GTCMARKETS
What we trade
Polymarket runs multiple weather market types per city. Polymarket Weather supports all of them.
| Market type | Example | Resolves on |
|---|---|---|
| Daily high (buckets) | "Chicago high Apr 14: 46–47°F?" | Airport station daily max |
| Daily low (buckets) | "NYC low Apr 14: 38–39°F?" | Airport station daily min |
| Threshold (binary) | "London > 70°F on Apr 14?" | Station reading vs threshold |
| Precipitation (binary) | "Miami ≥ 0.01″ rain Apr 14?" | Station daily precipitation |
| Snowfall (threshold) | "Boston ≥ 2″ snow this week?" | Station cumulative snowfall |
Temperature bucket markets are the largest share of Polymarket weather volume and where the model edge is most consistent. Precipitation and snowfall markets are supported but have wider confidence bands — the sizer automatically takes smaller positions on them.
THE STACK
Models & data sources
Ensemble weights are calibrated from historical Brier scores (a standard probability-forecast accuracy metric — 0 perfect, 0.25 random) per city and adjusted dynamically when one model's recent accuracy diverges. Outlier models — those whose forecast falls outside 1.5σ of the ensemble mean — are down-weighted by 50%.
Forecast models
| Model | Horizon | Update cycle | Base weight | |
|---|---|---|---|---|
ECMWF IFS European Centre for Medium-Range Weather Forecasts | European Centre for Medium-Range Weather Forecasts | 10 day | 6 h | 0.35 |
GEFS NOAA Global Ensemble Forecast System (31 members) | NOAA Global Ensemble Forecast System (31 members) | 16 day | 6 h | 0.25 |
UKMO UK Met Office Global | UK Met Office Global | 7 day | 6 h | 0.20 |
NWS NOAA National Weather Service (hourly observations) | NOAA National Weather Service (hourly observations) | 2 day | 1 h | 0.20 |
For ensemble probability: each of the 31 GEFS members votes on whether a threshold is exceeded. The fraction of agreeing members is the raw ensemble probability. The agreement score (how one-sided the vote is) feeds directly into the confidence tier that Kelly sizing reads from.
API endpoints
Every data point Polymarket Weather uses comes from a public source. Three for forecasts, three for Polymarket market state, one for historical climatology — all queryable, all auditable.
| Endpoint | Base URL | Auth | Used for |
|---|---|---|---|
| Gamma API | gamma-api.polymarket.com | None | Market discovery, condition IDs, token IDs, resolution sources. Polled every 5 min. |
| CLOB API | clob.polymarket.com | Wallet (writes only) | Order placement, cancellation, order book depth. 100 req/min when authenticated. |
| Data API | data-api.polymarket.com | None | Positions, trade history, P&L attribution. |
| WebSocket | wss://ws-subscriptions-clob.polymarket.com/ws/ | None | Real-time price ticks. Sub-2s from event to trade queue. |
| Open-Meteo | api.open-meteo.com | None | ECMWF + GEFS + UKMO forecasts. |
| NWS | api.weather.gov | None | US hourly observations. |
| NOAA NCEI | www.ncdc.noaa.gov/cdo-web | Free token | Historical base rates for Bayesian adjustment. |
GUARDRAILS
Risk controls
Kelly sizing calculator
Full Kelly (uncapped)
50.0% of bankroll ($500)
Your position (after caps)
Position size: $50.00 (5.00% of bankroll)
Capped — full Kelly would size this at $500.00 (truncated to the 5% bankroll cap).
| Control | Rule |
|---|---|
| Circuit breaker | Halt trading if daily P&L < −10% |
| Max position size | 5% of bankroll, $100 hard cap |
| Slippage filter | Skip if spread > $0.03 |
| Min edge threshold | 8% probability divergence |
| Min z-score | 1.5 |
| Expiry filter | Skip if market resolves < 2 h out |
| Max open positions | 20 concurrent markets |
Circuit breaker gauge
STATUS: TRADING — within the safe band
RESOLUTION DISCIPLINE
Verified station mapping
Every Polymarket temperature market resolves against a specific NOAA station or Weather Underground ID — not a city centre. The resolution source must match the data source exactly: using city-centre coordinates introduces 3–8°F error on 1–2°F bucket markets — a guaranteed loss on the wrong side. The catch: markets for the same city don't always resolve at the same station, and Polymarket has occasionally changed the resolution station mid-cycle. Polymarket Weather verifies the resolution station from each market's published rules before every deployment, every time.
| City | ICAO | Airport | Coordinates |
|---|---|---|---|
| New York | KLGA | LaGuardia | 40.7773, −73.8740 |
| Los Angeles | per-market | Verify per market | — |
| London | per-market | Heathrow (EGLL) or City (EGLC) | — |
| Paris | LFPB | Le Bourget (not CDG) | 48.9695, 2.4419 |
| Tokyo | per-market | Haneda (RJTT) or Narita (RJAA) | — |
| Hong Kong | VHHH | Hong Kong International | 22.3080, 113.9185 |
| Shanghai | per-market | Verify per market | — |
| Beijing | per-market | Verify per market | — |
| Seoul | per-market | Verify per market | — |
| Taipei | per-market | Verify per market | — |
| Wuhan | per-market | Verify per market | — |
Verifying the resolution station from the market's own rules is part of every trade, every time. Coordinate mismatch — pulling forecast data for the wrong station — is the single most common cause of unexpected losses in this category.
CALIBRATION
Self-calibration
After every market resolves, Polymarket Weather records the final temperature, the model's pre-resolution forecast, and the outcome. Brier scores are tracked per city and per forecast horizon. Ensemble weights are recalculated weekly. Cities where the model consistently underperforms the edge threshold are soft-disabled until accuracy recovers.
Target benchmark: Brier score below 0.15 per city.
0.00 is a perfect model. 0.25 is random. Below 0.20 is skilled. Below 0.15 is where this strategy is profitable after fees and slippage.
THE INTERFACE
What you see
The Polymarket Weather app is the control surface sitting on top of the engine.
Live signals feed
Every active mispricing, with model probability, market price, edge, z-score, Kelly size, and confidence tier. Filter by confidence tier to focus on the highest-conviction calls.
Position dashboard
Open positions by city and market type. Unrealised P&L ticks live as prices move. Time to resolution keeps you ahead of the close.
Resolution log
Every closed position with entry, exit, forecast vs. outcome, and P&L attribution. The full audit trail for every call the engine has made.
Controls
Edge threshold, max position size, circuit breaker percentage. Adjust any parameter and see the expected daily trade count respond in real time.
QUESTIONS
Frequently asked questions
The forecast already updated.
The market hasn't.
Start trading the gap.