I Profiled 12,125 Polymarket Weather Traders. Copying the Winners Loses Money
What this post is. A research log from 10 and 11 October 2026. All data is public: the Polymarket APIs, airport weather reports, and public weather model runs. The window is the market dates 19 September to 9 October 2026. Wallet names are the public Polymarket handles. No real money was traded. This is not trading advice.
Short version
- Polymarket lists a daily market for the highest temperature in 51 cities. I tested a forecast rule on 1,052 resolved events. Every variant lost money after fees. The best one lost 11.4% per $ risked.
- Then I pulled 4,162,493 fills from 12,125 wallets in the same 21 days and computed the PnL of each wallet.
- The 3,953 active wallets lost $157k together on $49.8M of volume. Taker fees in the same 21 days were $189k.
- I copied the top 20 wallets of the first 11 days into the next 10 days. The copy lost 1% to 5% per $, even at a 2 minute delay.
- One edge is mechanical. When the live temperature passes a bucket, that bucket cannot win. The best wallet on this buys the No side a median 1.1 minutes after the observation. It was positive on 20 of 21 days.
- In my live test, public airport reports arrived 1.5 to 8.5 minutes after the observation. That is too late for this race. I stopped the project on 11 October.
The markets
Each event asks one question: what is the highest temperature in a city on a date? An event has about 11 buckets. US cities use 2 °F buckets. Other cities use 1 °C buckets. Each bucket is a Yes or No market. A winning share pays $1.
The result comes from one weather station, usually the city airport. Most markets resolve on NOAA station data. A few use Weather Underground. Hong Kong uses the Hong Kong Observatory.
Only the taker pays a fee. The market config gives fee = C x 0.05 x p x (1 - p), where C is the number of shares and p is the price. At 100 shares and 50¢, the fee is $1.25. Makers pay no fee. They get 25% of the taker fee as a rebate, plus liquidity rewards.
Where it started: a post about a bot
On 10 October an X post by xmayeth described a weather bot. The rule was simple. Watch the forecast models. When a new run moves the forecast high, buy the bucket it points to and hold it to the end. The post named the Bilberry wallet as the proof.
I checked Bilberry's public trades before I wrote any strategy code. In its last 3,000 fills:
- 1,483 were buys and 1,517 were sells. The rule says hold, but the wallet sells as much as it buys.
- 47% of the buys were on the No side.
- The buys did not cluster after the GFS or ECMWF model releases. Later I found that all of its taker fills land between minute 10 and minute 14 of each hour. It is a bot on a fixed hourly timer.
Bilberry made money in my window: +$10.5k on $624k of volume. But its long positions on the forecast bucket lost $4.3k. Its profit came from the short side, and taker fees took about half of its gross edge. The rule in the post does not explain the PnL.
I tested the rule anyway, because a test is cheaper than an opinion.
Test 1: the forecast rule
Method
- Markets. All closed temperature events from the Polymarket Gamma API: 1,052 events, 51 cities, market dates 19 September to 9 October 2026. The winner of each bucket comes from the closed market prices.
- Prices. The CLOB
prices-historyendpoint, at 1 minute steps. - Forecasts. Every 6 hour run of GFS and ECMWF IFS 0.25° from the Open-Meteo single-runs API. The daily high is the max of the hourly values in the station's local day.
- Release time. A run counts as available at its start time plus 5.5 h for GFS and 7.1 h for ECMWF. These lags come from the Open-Meteo
meta.jsonfile. - Signal. A new run moves the forecast high by 0.5 °C or 1 °F or more. That gave 5,677 signals.
- Entry. Three variants.
adjsteps one bucket from the market favorite toward the new forecast.containbuys the bucket that holds the new forecast. A control buys that bucket after every run, with no move filter. Only buckets with an ask of 5¢ to 60¢, $25 per trade. - Costs. Ask = the 1 minute price + 1.5¢ half spread + 1¢ slippage, plus the taker fee. Live books on 10 October support this: the median spread was 3¢, and a $25 order walked a median 0.9¢ past the best ask.
- Delays. 5, 15, 60 and 180 minutes after the run is available.
- Statistics. The t value uses the PnL summed per day, because trades on one day are not independent.
Result
| Variant, exit, delay | Trades | Hit rate | Avg entry | PnL per $ | t |
|---|---|---|---|---|---|
adj, hold, 5 min | 4,158 | 24.4% | 26.8¢ | -11.4% | -2.78 |
adj, hold, 180 min | 4,125 | 23.9% | 27.0¢ | -13.2% | -3.19 |
contain, hold, 15 min | 5,040 | 23.1% | 26.7¢ | -21.6% | -6.47 |
| Control, hold, 15 min | 15,068 | 25.4% | 27.6¢ | -19.3% | -7.56 |
adj, hold, 15 min, near-mid fills | 4,185 | 24.4% | 25.0¢ | -4.1% | -0.86 |
Read the hit rate next to the entry price. A bucket bought at 25¢ must win more than 25% of the time to make money before fees. None of the variants did. The last row uses a fill only 0.5¢ above the mid price. It still loses 4.1%, which is about the size of the fee.
Four more facts from the test:
- The mid price is a fair probability. At near-mid fills, the control won 27.4% of the time at an average price of 27.5¢.
- Speed does not help here. The loss goes from 11.4% at 5 minutes to 13.2% at 3 hours. The price does not jump when Open-Meteo publishes a run, so there is no race to win at that moment.
- City picks are noise. 18 of 51 cities were positive, some by 30% to 50%. No city had a t value above 1.1. With 51 cities, this is what chance looks like.
- It does not scale. A $25 order filled in full on 99% of buckets. A $250 order would walk the book by several cents.
Test 2: profile every wallet
If a simple rule loses, the next question is who wins, and how. So I pulled every trade in the same markets.
Method
- Fills. The public data API,
/trades?market=, all pages, for 11,572 bucket markets. That gave 4,162,493 fill rows from 12,125 wallets. - Maker or taker. The same endpoint with
takerOnly=truereturns only the taker side. A fill that appears in the full list but not in the taker list is a maker fill. - PnL. Sell cash, plus $1 per winning share held at the end, minus buy cash, minus the taker fee. A wallet that holds more shares than it bought must have split $1 into a Yes and a No, so I charge $1 per pair.
- PnL per fill. Each fill gets its own PnL against the final result. The fill PnLs of a wallet add up to its total exactly. A unit test checks this. With it, I can split a wallet's PnL by price, by time, by maker or taker, and by distance from the winning bucket.
- Weather observations. Hourly METAR airport reports for 49 stations from the Iowa Environmental Mesonet archive. The METAR daily max fell in the winning bucket on 1,014 of 1,020 events.
- Forecast at fill time. The latest GFS and ECMWF run that was available when the fill happened, from Test 1.
- Cross-check. 9 of the top 10 wallets on Polymarket's 30 day weather leaderboard are in my top list. My numbers are lower, because my window is 21 days and only counts resolved daily-high markets.
For the top 12 wallets by PnL, 3 steady wallets and the 3 biggest losers, I computed features from the fills. Some examples: maker share, Yes or No side, price band, share held to the end, time after each model cycle, hours before the local day ends, buys on buckets the observed temperature had already passed, and non-trade activity such as rewards, splits and merges. Then I grouped the wallets by hand, by where their PnL came from.
The population
3,953 wallets have at least 30 fills in at least 10 markets. 1,383 of them are profitable. Split by how much of their volume is maker volume:
| Maker share of $ | Wallets | PnL | PnL per $ volume |
|---|---|---|---|
| 0 to 20% | 2,004 | -$18,624 | -0.11% |
| 20 to 40% | 498 | -$2,531 | -0.03% |
| 40 to 60% | 559 | +$33,652 | +0.35% |
| 60 to 80% | 327 | -$33,368 | -0.59% |
| 80 to 100% | 565 | -$136,391 | -1.25% |
The pure makers lose the most on their fills. This table does not include liquidity rewards, because the reward rows in the API have no market id. More on that below.
Seven archetypes
| Archetype | Example wallets | What they do | Result |
|---|---|---|---|
| A. Day-ahead taker | badatmath., hello.67, averageuser, OutOfMemory, Bilberry | Mostly taker. The PnL comes from fills 24 h or more before the local day ends | 2% to 13% per $. The edge is their own forecast model |
| B. Model-release trader | TunSahur | 38% of its $ trades in a 30 minute window after each GFS release | 3% per $ |
| C. Live-observation sniper | HighTempTation, Weatherstappen, fastestclick | Buy No on a bucket the observed temperature already passed, 1 to 3 minutes after the report | 99% of events won, 20 of 21 days positive |
| D. Late winner buyer | shamu88 | Buy the winning bucket after the daily peak, at about 69¢ | 13 of 13 days positive, small size |
| E. No-ladder | balthazar | Buy No on about 5 buckets per event | 1% to 2% per $, positive on 18 to 20 of 21 days |
| F. Mismatch longshot | 2 wallets | Buy a passed bucket at under 1¢ on days when the official result differs from the airport report | $7.7k and $17.5k, each from one day |
| G. Reward-farm maker | the 3 biggest losers | Quote all buckets 12 to 48 h ahead, 99% to 100% maker | -2% to -4% per $ on fills, before rewards |
No top wallet simply buys the forecast bucket. Their long positions sit 23% to 37% on the forecast bucket, about 45% on its neighbors and about 30% far away. That mix is close to the mix of the losers. The edge is in the price they pay, not in which bucket they pick.
TunSahur: the GFS clock
TunSahur made +$8.1k on $267k of volume, about 3% per $. 38% of its dollar volume trades between 4h00 and 4h30 after each 00, 06, 12 and 18 UTC model cycle, with a peak at 4h08 to 4h13. If its trades were spread at random, that window would hold 11%.
4h08 after the cycle is when GFS data appears on NOAA NOMADS. Open-Meteo has the same run about 1.5 h later. My Test 1 used Open-Meteo, so it always arrived after this trader. This is a likely reason why delay did not matter in Test 1. When the Open-Meteo data arrives, the market has had the same run for about 1.5 h.
The lesson for the method: the data source sets your place in the queue. A free, clean API is often the slow one.
HighTempTation: the dead bucket
This is the one mechanical edge in the data. Take an event where the 18 °C bucket is still open. At 13:00 the airport reports 20 °C. The daily high can only go up from here, so 18 °C cannot win. I call it a dead bucket. For a short time, some quotes still sell its No at 75¢ to 95¢.
HighTempTation buys only No. 93% of its buys are above 80¢. It bought $83k of No on dead buckets for +$6.7k, at an average price of 93.6¢. The median delay after the report that killed the bucket is 1.1 minutes. 90% of its buys come within 3.2 minutes. It then sells most of the No back at 99¢, so its money turns over the same day. Total: +$7.6k on $233k of volume, 99% of events won, positive on 20 of 21 days.
Three facts limit this edge:
- It is a race, and it is crowded. Most of the money is gone 5 minutes after the report. HighTempTation takes about 28% of the short side in the first 10 minutes. Other fast wallets take the rest. For all snipers together, the first 10 minutes hold about $1.4k per day. A sniper that arrives after 2 to 5 minutes sees about $300 per day, market-wide.
- A slow rule fails. I tested fixed check times at 14, 16, 18 and 20 h local. Buying the bucket that holds the observed max lost 13% to 66% per $. Buying No on dead buckets at those hours found almost no trades.
- The airport report is not always the result. On 6 of 1,020 events the official result was one bucket below the METAR max: Singapore, Beijing, Guangzhou, Qingdao and Manila on 20 September, and Paris on 7 October. On those days a dead bucket won. The two archetype F wallets bought such buckets at 0.2¢ to 1¢. One of them turned $30 into $6.1k on Qingdao. I do not know how they knew. For a sniper, these days are the tail risk.
Test 3: copy the winners
This is the test the title is about. I ranked wallets on the first 11 days, 19 to 29 September. Then I copied the buys of the top 20 on the next 10 days, 30 September to 9 October. The copier pays the 1 minute history price + 1¢, pays the taker fee, and holds to the end.
| Who I copied | Their own buys | Copy +2 min | Copy +10 min | Copy +60 min |
|---|---|---|---|---|
| Top 20 by PnL | +1.7% | -4.3% | -4.3% | -5.0% |
| Top 20 by ROI, volume $10k or more | +6.8% | -1.0% | -1.0% | -1.4% |
The winners stayed positive out of sample. The copy did not. Their edge is the price they get at the moment they trade. Two minutes later, that price is gone, and the copier also pays the taker fee.
adj, hold, 5 min. Contain bucket and control = hold, 15 min. Near-mid fills = 0.5¢ above the mid, no slippage.Makers, rewards, and the bucket sum
The three biggest losers are 99% to 100% maker. They quote every bucket 12 to 48 hours ahead and lose on every horizon. Snipers and informed takers pick off their quotes. Together they lost $47.5k on fills in 21 days.
Each of them also received $55k to $104k in reward payouts since 17 September. Those rows cover all their markets, not only weather, and have no market id. So their net result is unknown. What the data does show: on fills alone, quoting these markets loses money.
I also checked for a free trade across buckets. If all bucket prices of an event add up to more or less than $1, you could buy or sell the full set. The hourly sum of the mid prices was 0.999 at the 10th percentile, 1.032 at the median and 1.099 at the 90th percentile, over 59,807 samples. But the mid is not the price you can trade at. No top wallet bought or sold a full set in a 10 minute window, except for 3 cases. There is no bucket-sum arbitrage here.
The paper test, and the stop
The sniper was the only rule worth a live test. On 11 October I started a 14 day paper test. It polled METAR for 49 stations every 20 seconds and the Hong Kong Observatory 10 minute data. When a report killed a bucket, it read the live order book and paper-bought No if the report was at most 5 minutes old and the No ask was at most 97¢. The pass bar was $30 per day after fees, and at least 30% of signals still fillable.
The first hours showed the problem. Public METAR on aviationweather.gov arrived 1.5 to 8.5 minutes after the observation time. In Asia it was 5 to 8.5 minutes. For Hong Kong it was 7 to 8 minutes. The fast wallets fill a median 1.1 minutes after the observation, so they read a faster source. Most of my signals were stale on arrival.
The same day I stopped all Polymarket work. My note says: too risky, low reward. The paper job was shut down. The code has no wallet, no key and no order code. It only reads public data.
What I learned
- A public PnL is not a rule. Bilberry is profitable. Its trades do not follow the rule in the post that made it famous.
- Test fees first. The fee plus the spread is about 3.4¢ per share at a 25¢ entry. At near-mid fills the best rule still lost about one fee. The market price was already a good probability.
- Copying is late by design. The top wallets stayed positive out of sample. Their copies lost 1% to 5% per $. What they own is the timing, and you cannot copy timing.
- The real edges are a model or a clock. Day-ahead takers use their own forecast. TunSahur reads GFS 1.5 h before the free API. HighTempTation reads the weather in about a minute. The margins are small: 2% to 13% per $ for the day-ahead takers, about 3% for TunSahur and for HighTempTation.
- Check what the market resolves on. 6 of 1,020 events resolved one bucket away from the airport report. Those days made two wallets about $25k. They would hurt any rule that trusts the report.
- Count $ per hour, not $ per day. A late sniper shares about $300 per day with every other late sniper. Build and watch time comes on top.
The same lesson, in two other markets
Two viral backtests this month broke the same way. A gold breakout script claimed about +800% since 2011 with zero costs. I reproduced +790%, but real spreads and $0.20 slippage cut it to +5.5% per year with a 26% drawdown. A yen trade on Japanese gotobi days is real on USDJPY at +3.6 pips per trade after costs, but its Sharpe fell from 1.56 (2018 to 2022) to 0.52 (2023 to 2026).
No real money was traded in the backtest or in the paper test.