Research finding from an intraday price-drift backtest on Polymarket weather (max-temp) buckets. The NAIVE drift strategy is dead; a FORECAST-CONDITIONED variant is a live candidate. Buying unlikely buckets blind at open and selling on a +50% pop loses ~27% net because of survivorship bias — you cannot tell, at open, which longshots will moon and which will quietly decay to zero, and the losers dominate. But the Follow-up (v2): forecast-conditioned re-analysis (same 112-market-day cache, no re-fetch) shows the edge is real once you select the bucket via forecast proximity and hold to afternoon convergence: buy-blind ≈ −15% → near-forecast +1% → near-forecast + 18:00 exit +9.6% mean blended return. That is a CANDIDATE, not a confirmed GO (n=125, single month, 80% LCB still −6.9%), and it directly confirms the 2026-06-11 nowcast / information-timing pivot — the edge is picking the right cheap bucket via forecast (and ultimately a live nowcast), not the drift itself.
For Agents
This is a research finding, not code documentation. The NAIVE buy-the-drift strategy is REJECTED (see But the naive strategy is NO-GO, ~−15% to −27% blind). The FORECAST-CONDITIONED variant is a live CANDIDATE (see Follow-up (v2): forecast-conditioned) — +9.6% mean blended return when selecting cheap (10–25¢) buckets at or just above the forecasted high and exiting at 18:00 local convergence, but not yet statistically confirmed (n=125, one month, 80% LCB −6.9%). The two levers — forecast-proximity (winner selection) and exit-timing (hold to convergence) — each help and stack. Liquidity is NOT the blocker (median bucket volume ~1K). The supporting
wx-researchcrate is documented separately in wx-research-crate; the data clients it runs on are wx-market-prices-history and wx-market-trades-client. Market-structure ground truth (11 neg-risk 1°C buckets, ICAO/Wunderground whole-°C resolution) is in polymarket-weather-market-structure.
Question
Does the observed intraday up-drift of unlikely Polymarket weather buckets — the casual observation that “even very unlikely bets drift up during the day” — support a mechanical buy-at-open / sell-before-close-when-up-enough strategy?
- Cities: London, Paris, Seoul, Beijing — daily max-temperature markets.
- Framing: treat each event’s 11 buckets as a discrete distribution (see market structure); ask whether the open-price cohorts that drift up are tradeable blind.
Dataset
- 112 market-days = 28 dates × 4 cities. (May 17–18 absent — no markets existed those days.)
- 1,224 buckets, each with a full intraday price curve.
- Per bucket: lead-0 / lead-1 / lead-2 Open-Meteo previous-runs forecasts + the realized daily high.
- Cached at
research/data/; report atresearch/report.md. - Code: the new
wx-researchcrate on branchresearch/intraday-drift(uncommitted at time of writing). Crate skeleton: wx-research-crate. Runs off wx-market-prices-history (CLOB/prices-history) and wx-market-trades-client.
Quick Reference
Re-runs of conditioned variants execute off the existing cache in seconds — no re-fetch needed. Cache:
research/data/. Report:research/report.md.
The drift is REAL
By open-price cohort, the fraction of buckets whose sellable peak reached ≥ +50% of entry:
| Open-price cohort | Entry band | Fraction reaching ≥ +50% peak |
|---|---|---|
| Deep-longshot | (very low) | 35.7% |
| Longshot | (low) | 39.4% |
| Unlikely | 10–25¢ | 49.0% |
| Live | (mid) | 43.1% |
- The unlikely (10–25¢) cohort is the sweet spot: ~half reach a ≥ +50% sellable peak at some point intraday.
- Median MFE (max favourable excursion) for the unlikely cohort = 10¢.
- Peaks cluster at 17:00–19:00 local time — late afternoon, when the day’s actual high is being realized and the market converges toward the answer.
So the observation is correct: unlikely buckets genuinely tend to tick up during the day, peaking in the late-afternoon window as the realized high comes in.
But the naive strategy is NO-GO
Pre-registered test (fixed rules, decided before looking at the result):
- Cohort: unlikely buckets only.
- Subset: ultimately-LOST buckets only (the honest population for a blind entry — see mechanism below).
- Exit: fixed +50%, causal (sell the first time price is ≥ entry × 1.5; no look-ahead).
- Costs: applied spread-haircut (Polymarket charges 0 trading fee, so cost = spread only — see Liquidity & volume (observed 2026-06-07)).
- Stats: 80% bootstrap CI.
Result:
Naive buy-open / sell-+50% — REJECTED
Mean net return −27% (80% bootstrap CI −32% to −22%, n = 422). After costs, on the realistic (loser-inclusive) population, the strategy is a clear loser. NO-GO.
Mechanism: survivorship bias
- ~Half the unlikely buckets quietly decay to zero over the day.
- At open you cannot distinguish the future winners from the future losers — they look identical.
- Of the ~11 buckets per market, the longshots that ultimately lose number ~8–9 of 11, so the loser population dominates any blind basket.
- The “drift up” you observe is the survivor path; selecting on it requires hindsight. Trade it blind and the decayers swamp the poppers.
Where the edge likely is
The same +50% causal exit, applied to unlikely buckets that ultimately WIN, returns +54%.
The edge is selection, not drift
Drift is real but un-tradeable blind (−27%). The 100+ pp swing between the loser cohort (−27%) and the winner cohort (+54%) means the entire edge lives in PREDICTING which bucket wins, not in harvesting the intraday drift.
- The obvious predictor is the forecast: buckets near the forecasted high win far more often. A forecast-conditioned filter is the natural way to bias the basket toward the +54% population.
- This is the same thesis as the 2026-06-11 session’s recommended pivot (“intraday nowcast vs stale prices — information-timing edge”): the market does reprice toward the realized high through the afternoon (confirmed here — peaks at 17–19h local), so the opportunity is an information-timing / nowcast edge that picks winners ahead of the crowd, not a blind buy-the-drift trade. This study is the empirical confirmation of that pivot’s premise and the rejection of the naive alternative.
Next step → DONE (see Follow-up v2)
The planned conditioned experiment has been run off the same cache and is captured below. Both levers landed:
- Forecast-conditioned cohort — restricting to unlikely buckets within ±1°C of the lead-2 forecast flips the blended basket from ~−15% (FAR/blind) to roughly break-even (+1.2%), exactly the predicted shift toward the winner population.
- Time-based exits — holding to 18:00 local convergence instead of selling the first +50% pop lifts the same NEAR universe to +9.6%.
→ Full numbers, buckets, and caveats in Follow-up (v2): forecast-conditioned.
Follow-up (v2): forecast-conditioned
Re-analysis off the same 112-market-day cache (no re-fetch). The v1 NO-GO killed the naive blind trade; v2 tests the two predicted levers — forecast proximity (winner selection) and exit timing (hold to convergence). Both land, and they stack. The result is a CANDIDATE, not a confirmed GO.
Lever 1 — forecast proximity is a real winner-predictor
Among unlikely (10–25¢) buckets, split by distance between the bucket’s temperature and the lead-2 forecast (|bucket_temp − lead2_forecast|). Returns are after-cost, buy-ALL, +50% causal exit:
| Cohort | Filter | n | Win-rate | Blended after-cost return | 80% LCB |
|---|---|---|---|---|---|
| NEAR | ` | dist | ≤ 1°C` | 125 | 20.0% |
| FAR | ` | dist | > 1°C` | 373 | 13.7% |
- Within the NEAR cohort, won-only = +63.6% (n=25) vs lost-only = −14.2% (n=100) — same survivorship split as v1, but the basket is now tilted enough that blended is roughly break-even instead of −15% to −27%.
- Win-rate vs forecast-distance peaks at dist 0 and +1°C (~21%) and collapses to ~5% at dist ≤ −2°C.
Buy AT or just ABOVE the forecasted high
The buckets that win most are the forecasted high and the one above it (dist 0 and +1). Buckets below the forecast win rarely. Net: forecast proximity is a genuine winner filter — selecting on it moves the blind ~−15% basket to roughly break-even (+1.2%) before any exit-timing improvement.
Lever 2 — exit timing matters more than the threshold
Same NEAR universe (the +1.2% basket above), varying only the exit rule:
| Exit rule | Blended after-cost return | 80% LCB | 80% hi |
|---|---|---|---|
| Sell first +50% pop (causal) | +1.2% | −8.0% | — |
| Hold to 18:00 local convergence | +9.6% | −6.9% | +26.4% |
- Selling the first pop leaves most of the move on the table; the market keeps repricing toward the realized high through the afternoon (consistent with the v1 finding that MFE peaks at 17–19h local).
- Holding to 18:00 nearly 8בs the mean (+1.2% → +9.6%) on the identical entry universe. Exit timing is the bigger lever once selection is fixed.
Liquidity is NOT the blocker
Fills are plausible for this universe
- Unlikely-cohort median bucket volume ~19K.
- 100% of universe-U buckets have ≥ $1,000 volume.
- This is the cheap-bucket cohort specifically — the v1 thin-tail caveat (~9k on deep longshots) does not gate this trade. The blocker is sample size / CI, not liquidity.
The progression, and why it is a CANDIDATE not a GO
Progression — both levers help and stack
buy-blind ≈ −15% → near-forecast (select) +1.2% → near-forecast + 18:00 exit +9.6%. Forecast-proximity and exit-timing are independent levers that each add edge and compound.
CANDIDATE, not a confirmed GO
Even the best version is +9.6% mean with an 80% LCB of −6.9% on only n=125 over a single month. The lower bound is still negative — this is a promising candidate, not a statistically confirmed strategy. Do not size real capital on one month of one city-set.
This is direct evidence for the 2026-06-11 “intraday nowcast / information-timing” pivot: the market reprices toward the realized high through the afternoon, so the edge is picking the right cheap bucket via forecast (and ultimately a live nowcast that tracks realized temperature), not the drift itself.
Next steps (v3)
- Extend the data window to several months (and ideally more cities) to tighten the CI — the single binding constraint is sample size, not signal or liquidity.
- Tighten + sweep, free off cache: restrict to dist ∈ {0, +1} (the winning buckets) and sweep the exit hour 16–20h to find the convergence sweet spot.
- Add a live intraday nowcast (realized-temp tracking) to sharpen winner-prediction beyond the static forecast — the natural bridge from “forecast-conditioned” toward the information-timing edge the pivot targets.
Charts and the full report live at research/report.md + research/charts/.
Caveats
Read before trusting the numbers
- The v2 candidate rests on n=125 over a single month (4 cities). The 80% LCB is still −6.9% — promising, not confirmed. Treat the +9.6% as a hypothesis to validate on a wider window, not a tradeable edge.
- Forecast = Open-Meteo previous-runs proxy. Literal historical Wunderground forecasts are NOT retrievable (verified) — the lead-0/1/2 figures are a reconstructed stand-in, not the forecasts a trader would have literally seen. The v2 forecast-proximity filter inherits this proxy risk: a live trader’s actual forecast may bucket differently.
- Realized high is best-effort via TWC — the same authoritative-source posture as fix-resolve-twc-primary-source.
- Thin-bucket fills make longshot paper returns optimistic — per-bucket liquidity is ~9k and tails are wide-spread; real fills on longshots would be worse than the paper marks.
- Polymarket has 0 trading fee, so modeled cost = spread only. Slippage beyond top-of-book is not modeled.
Related
- wx-research-crate — the
wx-researchcrate (branchresearch/intraday-drift) this study runs in - wx-market-prices-history — CLOB
/prices-historyclient supplying the intraday curves - wx-market-trades-client — data-api
/tradesclient - polymarket-weather-market-structure — market structure, bucket layout, ICAO/whole-°C resolution, liquidity
- fix-resolve-twc-primary-source — TWC as the authoritative realized-high / resolution source
- weather-bet — project overview