Poly Research & Robotics
PR&R / Trader Report
Home / Reports / GGHFF
Polymarket / On-chain

GGHFF

On-chain analysis of Polymarket trader GGHFF. Active over 23 days with 13,004 trades across 1,301 markets, netting +$10,926 at +9.9% ROI.

Published May 13, 2026 ~9 min read By PR&R Research View on Polymarket →
Volume traded
$162.9K
23-day window
Realized return
+9.9%
Cash-flow accounting
Top category share
100%
Other of total volume
Both-sides rate
10.8%
Mixed MM + directional
// 001 / Analysis

The portfolio shape, and where the edge appears to come from.

Wallet activity across 23 days, every fill mapped, profile traced.

GGHFF is a weather forecasting bot running a probability-distribution edge on Polymarket's daily temperature markets. Not politics. Not crypto. Not sports. The entire 13,004-trade book across 23 consecutive days is dedicated to a single product category: "Will the highest temperature in [City] be [X]°C/°F on [Date]?" markets across Singapore, Miami, Warsaw, Houston, London, Istanbul, Seoul, Wellington, Paris, Moscow, Los Angeles, and dozens of other cities worldwide. The strategy is legible once you see the CSV: buy every bucket in a city's temperature distribution, weight toward the most probable outcomes, collect payouts at settlement, repeat every day.

The result across April 18 to May 10 is +$10,188 net P/L on $109,765 deployed, a 9.3% ROI in 23 days (or approximately 12% per month annualized, more conservatively). That's not a blowout number but it is positive, consistent, and grounded in a real forecasting edge. The wallet was active every single day of the 23-day window, never missed a daily session, and the cumulative P/L line only dipped meaningfully in the mid-window before recovering strongly in the final week, where week 19 alone printed +$4,890.

The core insight: Weather temperature distributions on Polymarket are a multi-bucket binary-bet product. A forecaster who knows tomorrow's temperature better than the crowd can systematically buy underpriced buckets and avoid overpriced ones. GGHFF appears to be doing exactly that with an automated bot.

The portfolio shape

The universe is pure weather markets, period. Every market slug in the CSV follows the pattern highest-temperature-in-[city]-on-[date]-[threshold]. There are no crypto, sports, or politics trades. The event-level structure is key: each day, a city generates multiple parallel markets for adjacent temperature buckets (e.g. "Will Miami be 84-85F?", "86-87F?", "88-89F?", "90+F?"). GGHFF buys across multiple buckets within the same event, which means his event count (583) is substantially lower than his market count (1,301). On average he touches 2.2 markets per event, a signature of distribution-spreading across buckets rather than single-bet conviction.

The size profile is small and bounded: median fill is $4.40, mean is $12.52, P95 is $41.60. The single largest fill across all 13,004 trades is $1,275.57. This is a high-frequency small-clip operation. The bot fans out across the orderbook on each market entry in rapid same-second bursts, most visibly in the Wellington and Houston sequences from the CSV where 15-30 fills hit within seconds at prices of $0.22-$0.24.

Both-sides participation sits at 10.8% of markets (141 of 1,301). This is materially non-zero, meaning in some events the bot buys two adjacent buckets, implicitly constructing a spread position. The median paired cost across those 141 markets is $0.91, comfortably below $1.00, locking in a guaranteed combined payout edge on those paired bets.

Where the edge appears to come from

The edge is calibrated probabilistic forecasting on near-term temperature outcomes. The price-band ROI table tells the story directly: the $0.20-$0.30 entry band (2,744 trades, win rate 30.8%) delivers +17.6% ROI, and the $0.70-$0.80 band (1,464 trades, win rate 83.9%) delivers +14.4% ROI. These are both meaningfully above zero, which means he is consistently buying mispriced probability across the distribution. The market implies a certain probability for each temperature bucket; his model implies a different one; when his model is right more often than the market expects, he profits.

The bot appears to use a weather forecast model (likely a numerical weather prediction output or ensemble data) to compute the true probability distribution for tomorrow's temperature in each city, then compare it against the Polymarket CLOB's quoted probabilities for each bucket. Where the CLOB underprices the correct bucket, he buys. Where the CLOB overprices buckets he thinks are unlikely, he either skips or buys the complementary side.

WIN RATE BY PRICE BANDThe calibration is near-perfect: 30.8% WR at $0.20-$0.30 (market implies 25%), 83.9% WR at $0.70-$0.80 (market implies 75%), 93.1% WR at $0.80-$0.90. Across every band, the realized win rate tracks the market's implied probability closely, which confirms the market is roughly efficient but GGHFF is capturing a systematic small premium.

The SELL engine is minimal. Only 1,499 of 13,004 trades are SELLs (11.5%), compared to SirMartingale's 49% SELL rate. GGHFF holds almost everything to settlement. This is consistent with a forecasting model rather than a market-making or latency-arb strategy: he's not trying to exit positions when the market catches up to him, he's simply right on the temperature and collects at resolution.

What you can copy

The market-selection logic is directly portable: filter Polymarket for highest-temperature-in-* slug patterns, enumerate all available bucket markets for a given city-date event, then price each bucket against a weather forecast API. The ECMWF ensemble forecast, NOAA's GFS model, or commercial forecast APIs (Tomorrow.io, OpenWeather) all provide probabilistic temperature ranges that can be compared against Polymarket's CLOB quotes. The entry logic is then straightforward: buy any bucket where your forecast probability exceeds the market-implied probability by a sufficient margin.

The sizing model is also copyable: small clips ($5-$50 typical), fan-out across orderbook depth in rapid succession, never concentrate heavily on a single outcome. The 3x+ dominance bucket (96 markets) shows a 60.4% dominant-side win rate, which is the actual evidence of forecasting skill. The both-sides paired play (where adjacent buckets are both bought) is an elegant risk-reduction mechanism when two adjacent outcomes are nearly equally likely.

What you probably can't copy

The data pipeline. Consistently beating Polymarket's crowd on 50+ city-date weather outcomes per day requires systematic access to forecast model output, fast API consumption, and comparison logic that can price 100+ markets simultaneously before they fill against you. The bot is operating on events that open and close within 24-48 hours, so the latency from forecast-update to order-placement matters. The edge erodes as more sophisticated forecasting bots enter the same markets, and the both-sides paired-cost data ($0.90 mean) already suggests some compression from market efficiency.

The Thursday anomaly is also worth noting: Thursday is the only losing day of the week (-$226, -1.6% ROI) against positive ROI on all other six days. This is likely noise across 23 days of data rather than a structural weakness, but it signals the strategy is not perfectly consistent and can string together bad days in specific conditions.

// 002 / Figure

Cumulative P/L over the window.

The line is daily cumulative net P/L. Mouse along it for daily detail. The dashed grey trace, when present, is cumulative BUY notional deployed.

// 003 / Reverse-engineering report

Reverse-engineering report

Every fill mapped, the asymmetric profile traced, the math behind the edge.

Wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Window: 2026-04-18 to 2026-05-10 (23 calendar days, 23 active) Universe: 13,004 trades · 1,301 markets · 583 events · $162,860 gross turnover Net resolved-BUY P/L: +$10,188 on $109,765 deployed = +9.28% ROI in 23 days

P/L methodology: Cash-flow accounting on resolved BUYs. Each resolved-BUY position P/L = shares won (at $1.00 each) minus USDC spent, or negative USDC spent on a loss. SELL-side trades are tracked separately; the dominant P/L source here is settlement payouts, not active exits. The resolved-BUY baseline accounts for 11,504 of 11,505 BUY trades (one remains open).

The Punchline

GGHFF is a daily temperature distribution forecasting bot operating exclusively on Polymarket's "Will the highest temperature in [City] be [X] on [Date]?" markets. Every single trade in the 23-day window belongs to this one product category. No crypto, no sports, no politics. Weather only.

The strategy's mechanics are visible immediately in the CSV: for any given city on any given day, Polymarket lists a ladder of adjacent temperature bucket markets (e.g. Miami April 29: "82-83F?", "84-85F?", "86-87F?", "88-89F?", "90+F?"). GGHFF buys across multiple buckets within the same event. He has 583 unique events but 1,301 unique markets, meaning an average of 2.2 markets per event. He is spreading capital across the temperature distribution rather than making a single point-estimate bet.

The source of profit is probabilistic skill: his model (almost certainly a numerical weather prediction or ensemble forecast) assigns higher probability to the correct temperature bucket than the Polymarket CLOB does. Over 11,504 resolved bets, his aggregate win rate is 56.3%, and the price-band calibration confirms this is systematic rather than lucky. The ROI is modest (+9.3%) but it is real, it is consistent, and it is generated by a structurally repeatable information advantage.

The SELL engine is secondary. Only 1,499 of 13,004 trades are SELLs (11.5%). The bot holds the overwhelming majority of positions to settlement. This is the opposite of SirMartingale's aggressive-exit model and consistent with a forecaster who is confident in his model's directional call and willing to wait for the binary settlement.


What He Trades

The universe is weather temperature markets, globally distributed:

From the top markets by P/L and top markets by volume, the city roster includes: Singapore, Miami, Warsaw, Houston, London, Seoul, Istanbul, Shenzhen, Los Angeles, New York City, Wellington, Moscow, Ankara, Dallas, San Francisco, Seattle, Toronto, Paris, Madrid, Munich, Sao Paulo, Jakarta, Beijing, Cape Town, Atlanta, Chicago, and more. This is a global weather coverage bot, not a regional specialist.

The market structure within each event: for a city on a date, there are typically 5-8 parallel bucket markets (e.g. "33C", "34C", "32C", "31C", "35C or higher", etc.). The bot buys the buckets it likes and skips or avoids the ones it doesn't. Within a given event, it may buy 2-5 different bucket outcomes.

Both-sides participation is 10.8% of markets. This is meaningful: in 141 markets, the bot bought both outcomes (typically adjacent temperature buckets within the same event). The median paired cost is $0.91, which means these paired positions lock in a minimum guaranteed profit of $0.09 per dollar of paired notional at resolution.

The top market by P/L is illustrative: "Will the highest temperature in Singapore be 33C on May 10?" with 121 trades, $1,555 volume, and +$996 P/L on 120 resolved wins out of 120 resolved trades. That's a 100% win rate on a large position. The bot knew it would be 33C in Singapore on May 10 with high confidence, hammered the position with 121 fills across the orderbook, and collected at settlement.

The worst markets are the mirror image: "Will the highest temperature in Beijing be 33C on May 10?" with 28 trades, $299 volume, and -$299 P/L (0 wins, 0 losses, all losses). The bet on Beijing 33C was wrong and cost the full deployed notional.

Top 5 markets by P/L Trades Volume P/L WR
Singapore 33C, May 10 121 $1,555 +$996 100%
Singapore 34C or higher, Apr 23 40 $1,185 +$769 100%
Singapore 33C, Apr 22 78 $1,144 +$713 100%
Seoul 21C or higher, May 6 52 $203 +$570 100%
Miami 86-87F, Apr 30 27 $252 +$530 100%
Worst 5 markets by P/L Trades Volume P/L WR
Beijing 33C, May 10 28 $299 -$299 0%
Warsaw 23C, May 11 19 $296 -$296 0%
Istanbul 25C or higher, May 11 8 $293 -$293 0%
Chengdu 33C or higher, May 11 97 $291 -$291 0%
NYC 62-63F, May 8 34 $277 -$277 0%

The asymmetry between wins and losses is structurally interesting: many wins are at 100% WR (high-confidence singular outcomes) while all the worst losses are at 0% WR (wrong-bucket bets that resolved entirely against). This is the signature of a temperature forecasting strategy: when you're right about which bucket wins, you sweep all your bucket fills; when you're wrong, you lose every dollar in the wrong bucket.


The Order of Operations - One Event, Market by Market

The clearest single-event trace is the Singapore April 18 temperature event. Polymarket opened markets for Singapore's daily high on April 18 covering multiple Celsius buckets. The CSV shows activity across the highest-temperature-in-singapore-on-april-18-2026-* event with different outcome slugs.

Singapore temperature event, April 18, 2026 - Bot activity trace:

Time (UTC) Market Outcome Side Shares Price USDC Running Net
00:13:00 Singapore 32C, Apr 18 No SELL 196.49 $0.999 +$196.29 +$196.29
03:13:00 Singapore 34C, Apr 18 Yes BUY 31.36 $0.31 -$9.72 +$186.57
03:14:50 Singapore 33C, Apr 18 No BUY 65.00 $0.42 -$27.30 +$159.27
03:18:40 Singapore 34C, Apr 18 Yes BUY 80.00 $0.36 -$28.80 +$130.47
03:22:14 Singapore 33C, Apr 18 No BUY 17.54 $0.43 -$7.54 +$122.93
03:24:00 Singapore 33C, Apr 18 No BUY 70.00 $0.41 -$28.70 +$94.23
03:24:04+ Singapore 34C, Apr 18 Yes BUY (9x) 5-25 ea $0.37 -$16.58 +$77.65
03:37:44 Singapore 33C, Apr 18 No BUY 72.65 $0.34 -$24.70 +$52.95
03:39:02 Singapore 33C, Apr 18 No BUY 1.52 $0.34 -$0.52 +$52.43
04:26:20 Singapore 33C, Apr 18 No BUY 5.20 $0.46 -$2.39 +$50.04
04:27:12 Singapore 33C, Apr 18 No BUY 1.85 $0.46 -$0.85 +$49.19

Walk-through:

  1. 00:13 UTC SELL of 33C "No" position: The bot exits a prior "Singapore will NOT be 32C" position (No = temperature is something other than 32C) at $0.999, collecting $196.29. This is a nearly-certain position approaching settlement - the bot is getting out at near-certainty prices before the market closes. This illustrates the SELL pattern: small fraction of positions are exited when the implied probability goes above $0.95.

  2. 03:13-03:18 UTC: Fan-out across 34C and 33C buckets. The bot opens fresh positions on the 34C "Yes" (temperature will reach 34C) at $0.31-$0.36, and "No" on the 33C market (temperature will exceed 33C range). This is a paired structure: if the temperature lands at 34C, both the 34C Yes and the 33C No win together. He's constructing a linked position that pays double if his forecast (34C) is correct.

  3. 03:24 multi-fill burst on 34C: Nine separate fills between 03:24:00 and 03:24:04 all hitting Singapore 34C Yes at $0.37. This is the fan-out execution signature: the bot walks the orderbook across all available ASK levels simultaneously, splitting the order into small clips to minimize market impact on a thin CLOB.

  4. Resolution: Singapore's April 18 high was 34C or higher (the "34C Yes" resolved correct, the "33C No" resolved correct). Both sides of the paired trade won. The total deployed across both buckets on this event was approximately $119, and the settlements paid out on the winning shares.

The SELL at 00:13 on the "32C No" position (which means "temperature is above 32C") at $0.999 is also noteworthy: this position was accumulated earlier on a prior day when it was far from certain, and by the morning of April 18 it was approaching certainty. The bot occasionally exits positions approaching settlement rather than holding to zero-risk resolution - likely to recycle capital into the next day's markets faster.


Why It Works - The Math

The strategy's EV comes from a calibration premium: the bot's weather model is more accurate than the crowd-derived CLOB prices.

Price band Implied probability Realized win rate Premium
$0.20-$0.30 25% 30.8% +5.8 ppt
$0.30-$0.40 35% 37.1% +2.1 ppt
$0.40-$0.50 45% 49.8% +4.8 ppt
$0.50-$0.60 55% 62.6% +7.6 ppt
$0.60-$0.70 65% 67.7% +2.7 ppt
$0.70-$0.80 75% 83.9% +8.9 ppt
$0.80-$0.90 85% 93.1% +8.1 ppt

Every price band shows a positive premium (realized WR above market-implied probability). This is not noise - it is a systematic calibration advantage across the full price spectrum. The bot is beating the crowd in every band.

EV per USDC deployed (example: $0.70-$0.80 band):
  Realized WR:         83.9%
  Win payout per $:    $1 / $0.75 avg = +$0.333 net per $ on wins
  Loss per $:          -$1 per $ on losses

  EV = 0.839 × ($1/$0.75 - 1) - (1-0.839) × 1.0
     = 0.839 × 0.333 - 0.161 × 1.0
     = 0.279 - 0.161
     = +$0.118 per $ deployed, or +11.8% margin on the $0.70-$0.80 band

Realized ROI on this band from data: +14.4% - consistent with the model

The paired-position structure (10.8% both-sides rate) provides an additional structural layer. When the bot buys both bucket A and bucket B for the same event at a combined cost of $0.91 (median paired cost), one of the two will always pay $1.00 at settlement, guaranteeing a minimum +$0.09 profit on the pair regardless of which temperature bucket wins. This is a pure spread-capture overlay on top of the directional forecast.


Phase 1 - Trader Profile

Scale and Activity: - 11,505 BUYs + 1,499 SELLs = 13,004 total trades across 23 active days (all 23 days active) - BUY notional: $110,555. SELL notional: $52,306. Gross turnover: $162,860 - 1,301 unique markets across 583 unique events - ~565 trades per day on active days; ~566 markets per week

Trade Size Distribution: | Stat | Value | |---|---| | Median | $4.40 | | Mean | $12.52 | | P95 | $41.60 | | P99 | $120.54 | | Max | $1,275.57 | | Top 5% share | 38.1% |

The distribution is moderately power-law: the top 5% of trades hold 38% of capital, but the max is only 289x the median (vs 83x in a uniform distribution). The P99 at $120 and max at $1,276 suggest occasional large-conviction bets, but the bulk of activity is small-clip spread.

Inter-trade Gap: - Median gap: 596 seconds (~10 minutes) - 19% of consecutive fills under 10 seconds - 26.6% under 60 seconds - Mean gap: 6,351 seconds

The 10-minute median gap is consistent with a semi-automated bot that works on city-event clusters rather than continuous market-making. The bot appears to open a burst of fills on a given city's temperature event (multiple fills within seconds to minutes), then pause before moving to the next event. The 19% sub-10-second rate confirms bot-speed execution within each burst.

Buy vs Sell: BUYs are 88.5% of trades; SELLs are 11.5%. This is a settlement-oriented strategy. The SELL activity clusters around two patterns visible in the CSV: (1) selling near-certain positions approaching $0.99 before resolution, and (2) exiting incorrectly-placed bets when the position moves against the bot.

Archetype: WEATHER FORECAST ARBITRAGE - a hybrid of directional betting (the temperature forecast) and spread capture (the paired adjacent-bucket structure). No crypto, no sports, no both-sides market-making in the traditional sense.


Phase 2 - Core Strategy Identification

Both-sides rate: 10.8% (141 of 1,301 markets). This is sub-30%, which formally classifies the strategy as primarily directional. However, the 10.8% both-sides rate is structurally meaningful because it reflects intentional bucket-pairing within events rather than accidental overlap.

The strategy is B (Directional Betting) + partial A (Spread Capture on adjacent buckets):

  • Primary (90%): Directional bets on specific temperature bucket outcomes, driven by a weather forecast model
  • Secondary (10%): Paired adjacent-bucket positions where two outcomes are bought in the same event, capturing a guaranteed spread

Evidence for directional betting dominance: the bot buys 2.2 markets per event on average, meaning it identifies specific buckets (not all buckets) as the likely outcome. If it were pure spread-capture it would buy more buckets per event. The 563 events where only one bucket was bought are strongly directional.

Evidence for the weather model: the calibration premium across all price bands (realized WR consistently above market-implied probability) is not achievable by a random bettor. A bettor with no edge would show zero premium on average.

The bot is NOT: - A market maker (0% both-sides on most markets, no systematic bid-ask posting) - A copy-trader (weather markets are too numerous and fast-resolving for copy trading) - A latency arbitrageur (no real-time external signal to arb; weather forecasts update slowly) - A longshot-only bot (the full price distribution from $0.21 to $0.99 is covered)


Phase 3 - Dominance Ratio Analysis

141 both-sides markets across four dominance buckets:

Bucket Markets Dom Win Rate Mean Paired Cost
1.0-1.5x 17 58.8% $0.867
1.5-2.0x 9 22.2% $0.921
2.0-3.0x 19 63.2% $0.910
3.0x+ 96 60.4% $0.901

The 1.5-2.0x bucket is anomalous: only 22.2% dominant-side win rate on 9 markets. This is below the market-implied probability for that bucket's price (approximately 60-70%), which suggests the bot was systematically wrong on medium-conviction paired bets in this range. This is likely noise given the small sample (9 markets), but it is a flag worth monitoring.

The 3.0x+ bucket with 96 markets and 60.4% dominant-side win rate is the most statistically meaningful. A 60.4% WR at the dominant side implies the bot's high-conviction calls are correct roughly 6 in 10 times. Mean paired cost of $0.901 across 96 markets means the spread-capture floor alone returns +$0.099 per dollar of paired notional regardless of which side wins.

The median second-side lag is 58,224 seconds (16.2 hours). This is a next-day or same-day accumulation pattern: the bot opens the first side of a pair and then adds the complementary bucket many hours later as the event approaches and more forecast information is available. This is not instantaneous pairing; it is deliberate multi-leg accumulation.


Phase 4 - Entry Price Analysis

Full price-band breakdown:

Band Trades WR Capital P/L ROI
$0.10-$0.20 1 0.0% $16.00 -$1.00 -6.3%
$0.20-$0.30 2,744 30.8% $11,281 +$1,984 +17.6%
$0.30-$0.40 1,416 37.1% $8,343 +$418 +5.0%
$0.40-$0.50 915 49.8% $7,204 +$238 +3.3%
$0.50-$0.60 1,605 62.6% $17,847 +$1,533 +8.6%
$0.60-$0.70 2,770 67.7% $32,673 +$1,742 +5.3%
$0.70-$0.80 1,464 83.9% $21,179 +$3,055 +14.4%
$0.80-$0.90 519 93.1% $9,690 +$1,295 +13.4%
$0.90-$1.00 70 85.7% $1,531 -$75 -4.9%

Key observations:

  1. The $0.20-$0.30 band is the standout ROI bucket (+17.6%). The bot puts $11,281 (10.3% of capital) into longshot temperature buckets priced at 20-30 cents and wins 30.8% of them. At those prices, a 30.8% win rate vs a 25% implied probability is a +5.8 percentage-point premium that generates outsized ROI.

  2. The $0.60-$0.70 band is the largest capital allocation ($32,673, 29.7% of capital) with the lowest ROI (+5.3%). This is the "moderate favorite" zone where the bot has smaller edges because the market prices these outcomes more efficiently.

  3. The $0.90-$1.00 band is slightly negative (-4.9% ROI). The bot is slightly overpaying for near-certain outcomes, or losing to adverse selection at the top of the price range. This is a minor drag.

  4. No sub-$0.20 activity (beyond 1 trade). The bot does not bet on very unlikely temperature outcomes (sub-20 cent implied probability). This is consistent with a model that has reasonable probability estimates and doesn't chase impossible outcomes.

Sub-bucket concentration: The per-cent histogram would show activity spread across many price points from $0.21 to $0.99, with concentrations around the commonly-priced market mid-points (0.30, 0.40, 0.65, 0.70, 0.80). There is no single dominant price point - the entry is wherever the CLOB offers value according to the forecast model.


Phase 5 - Category and Vertical Breakdown

Category Trades BUY Volume Resolved WR P/L ROI
Weather/Other 13,004 $110,555 11,504 56.3% +$10,188 +9.3%

The entire book is a single category. The PR&R standard framework maps this to "Other" because Polymarket's temperature markets don't carry a named category keyword. This is not a weakness in the data - it correctly reflects that GGHFF's universe is a specialized niche within Polymarket.

Vertical breakdown by geography (from top and worst markets):

Region Top markets (examples) Edge quality
Asia (Singapore, Seoul, Shenzhen, Tokyo) +$996, +$570 on Singapore/Seoul Highest-conviction wins, several 100% WR markets
Americas (Miami, Houston, NYC, LA, Chicago) +$530, +$246 on Miami/Houston Solid performer, mixed results on narrow F-range bands
Europe (Warsaw, London, Madrid, Munich, Istanbul) +$465, +$381 on Warsaw Moderate; some large losses on European cities
Oceania (Wellington) +$280 on Wellington Small sample, positive

Singapore is the standout region: three of the top four markets by P/L are Singapore temperature events. This may reflect better forecast model calibration on tropical climates (smaller temperature variance, more predictable patterns) or simply higher available liquidity on Singapore markets.


Phase 6 - Timing and Execution

Hourly P/L (UTC) - best and worst hours:

Hour (UTC) Trades Win Rate P/L
17:00 535 60.7% +$1,434
08:00 601 65.6% +$1,096
05:00 622 56.1% +$980
02:00 499 56.9% +$608
11:00 511 59.4% +$890
18:00 534 43.0% -$264
20:00 569 47.8% +$171
07:00 498 53.9% -$128
10:00 575 49.1% -$18
00:00 760 44.3% +$357

The 00:00 UTC hour has the highest trade count (760) and a below-average win rate (44.3%). This is the bot's "opening" hour for the next day's markets - it's placing early bets when uncertainty is highest and the forecast premium hasn't fully converged. The 17:00 UTC hour (+$1,434) and 08:00 hour (+$1,095) are the peak earnings windows.

No obvious sleep window. Unlike SirMartingale's hard 23:00-02:00 UTC blackout, GGHFF trades in all 24 hours, with the lowest single hour being 21:00 UTC at only 438 trades. This is a 24/7 automated bot without human scheduling.

Day-of-week:

THURSDAY ANOMALYThursday is the only losing day of the week: -$226 P/L, -1.6% ROI on 1,449 trades. All other six days are positive, ranging from +6.4% (Sunday) to +14.4% (Saturday). This may be noise in a 23-day window (only 3-4 Thursdays), but it should be monitored.
Day Trades WR P/L ROI
Mon 1,494 51.7% +$1,555 +10.5%
Tue 1,937 58.0% +$2,209 +11.4%
Wed 1,447 61.7% +$1,278 +9.1%
Thu 1,449 49.8% -$226 -1.6%
Fri 1,265 55.5% +$1,627 +13.2%
Sat 2,065 58.9% +$2,654 +14.4%
Sun 1,848 56.7% +$1,092 +6.4%

Saturday is the highest-ROI day (+14.4%). Saturday weather bets cover Sunday temperatures when forecast models typically have higher confidence 1-day ahead.

Accumulation pattern within events: The Wellington April 19 trace in the CSV shows 30+ fills on the same condition (highest-temperature-in-wellington-on-april-19-2026-17c) spread across 47 minutes (00:13 UTC to 00:47 UTC). The bot opens a burst of small clips at $0.22-$0.24, totaling roughly $75 across 30 fills. This is DCA-style accumulation: the bot repeatedly trickles into the same market over time rather than hitting it with one large order. This minimizes market impact on thin CLOBs.


Phase 7 - Filter Experiments

Filter Trades WR Capital P/L ROI Delta
Unfiltered baseline 11,504 56.3% $109,765 +$10,188 +9.3% -
Price $0.30-$0.70 6,915 58.3% $68,625 +$4,373 +6.4% -$5,815
High-conviction dom 2x+ 1,501 52.0% $12,520 +$1,883 +15.0% -$8,305 (net)
Top category (Other = all) 11,504 56.3% $109,765 +$10,188 +9.3% $0
Exclude worst 4 hours (0,10,18,20) 9,353 58.7% $90,682 +$9,942 +11.0% -$246
Combined (price 30-70 + excl worst hr) 5,651 60.0% $56,761 +$4,510 +7.9% -$5,678

The filter analysis has two genuine findings:

  1. Excluding the four worst hours adds +1.7 ppt ROI (+$246 in absolute terms) while removing 18% of trades. This is the only filter with clean additive value - eliminating the 00:00, 10:00, 18:00, and 20:00 UTC hours lifts ROI from 9.3% to 11.0% while keeping $9,942 of $10,188 in profit. The tradeoff is fewer bets and slightly less total alpha.

  2. The $0.30-$0.70 price filter destroys more value than it saves. Applying it drops P/L from $10,188 to $4,373, a loss of $5,815. The reason: this filter removes the $0.20-$0.30 longshot band (the highest-ROI band at +17.6%) and the $0.70-$0.90 favorite band (also high-ROI at +14.4%). The "sweet spot" filter is misaligned with this strategy's actual edge distribution.

  3. The high-conviction (dom 2x+) filter returns +15.0% ROI on $12,520 deployed. This is an ROI improvement vs baseline, but it captures only $1,883 of $10,188 total profit. It's not additive - it's a subset that happens to have higher per-dollar efficiency at the cost of 89% of total capital utilization.

The combined filter at +7.9% ROI is actually worse than just the hour-exclusion filter alone at +11.0%, because the price filter drags down the ROI by removing the high-performing tail bands.


Phase 8 - Rolling Window Consistency

Metric Value
Rolling 7-day windows green 19 of 23 (82.6%)
Rolling 7-day P/L range +$428 to +$5,896
Rolling 15-day windows green 23 of 23 (100%)
Rolling 15-day P/L range +$1,067 to +$6,623
Weekly P/L: Week 16 (Apr 18-19) +$2,201 (partial week, strong start)
Weekly P/L: Week 17 (Apr 20-26) +$1,985 (moderate)
Weekly P/L: Week 18 (Apr 27 - May 3) +$1,113 (soft middle)
Weekly P/L: Week 19 (May 4-10) +$4,890 (strong close)

100% of all rolling 15-day windows close green. Four of 23 rolling 7-day windows dipped negative (during the Apr 27 - May 3 soft patch), confirming the strategy can string together a week of subpar performance. The recovery in week 19 was decisive: +$4,890 in a single week, nearly half the 23-day total.

The cumulative trajectory:

CUMULATIVE P/L TRAJECTORYApr 18: +$2,201 (fast start). Apr 26: +$4,186 (steady accumulation). May 3: +$5,298 (mid-window plateau). May 10: +$10,188 (final-week breakout driven by 58.8% WR in week 19).

The mid-window plateau (Apr 27 - May 3, +$1,113 in a full 7-day week) is the main drag on the record. The strategy's weekly variance is high relative to its mean: the range of weekly P/L is +$1,113 to +$4,890, a 4.4x spread between best and worst full weeks. This is inherent in a weather-betting strategy where a single bad-forecast week on high-volume city-events can significantly compress returns.


Phase 9 - P/L Decomposition

Component Value Interpretation
Realized total (resolved BUY) +$10,926 Gross settlement wins minus gross losses
Spread P/L (paired markets) +$862 Locked-in guaranteed profit from sub-$1.00 paired cost positions
Hedge tax (losing sides of paired markets) -$7,404 USDC spent on the losing side of 141 paired-market bets
Net resolved-BUY P/L (cash-flow view) +$10,188 After netting both sides

The hedge tax of $7,404 is the largest single drag in the decomposition. This is the price of the paired-bucket insurance strategy: for every market where the bot bought both adjacent temperature buckets, the losing side cost real money. The $862 spread P/L covers only 11.6% of that hedge cost; the remaining $6,542 of hedge tax must be covered by directional wins.

This decomposition reveals an important strategy tension: the spread-capture layer is a net drag, not a net benefit, at current paired-cost levels. The median paired cost of $0.90 implies $0.10 of locked-in profit per paired dollar - but that $0.10 must be weighed against the capital inefficiency of locking up two positions that mostly cancel each other. At the current 10.8% both-sides rate, the paired structure is a modest insurance feature rather than a core profit driver.

The primary alpha source is unambiguously directional settlement wins from correctly forecasting temperature buckets. 6,477 winning bets paying $1.00 minus the capital spent to acquire those winning positions is where the $10,188 comes from.


Phase 10 - Strategy Specification (summary; full spec in playbook)

One-sentence summary: A 24/7 automated bot that buys daily temperature bucket markets on Polymarket using a weather forecast model to identify systematically underpriced probability across a global city roster, then holds positions to binary settlement.

Edge sources: 1. Forecast model premium: Realized WR exceeds market-implied probability in every price band. This is the primary driver of all P/L. 2. Paired spread capture: 10.8% of markets have sub-$1.00 paired cost, locking in a guaranteed floor return. Net effect is modest positive after hedge tax.

What works: Singapore and Asia-Pacific markets (highest absolute P/L), the $0.20-$0.30 band (17.6% ROI), the $0.70-$0.90 band (13-14% ROI), hours 05:00-08:00 and 17:00 UTC, Saturdays and Fridays.

What drags: The $0.60-$0.70 band (5.3% ROI, largest capital allocation), hours 00:00/10:00/18:00/20:00, Thursdays, European city markets (several full-loss outcomes in Warsaw, Istanbul, London).

Replicator must-haves: Weather forecast API, per-bucket probability model, global city coverage, DCA-style orderbook fan-out execution, 24/7 uptime, settlement-hold discipline.

Replicator must-avoids: Do not apply $0.30-$0.70 price filter (destroys 57% of P/L). Do not attempt to replicate with manual trading - the bot processes 2.2 markets per event across 50+ city-dates simultaneously.

// 004 / Quantitative breakdown

Quantitative breakdown

Phase-by-phase statistical report. Methodology, distributions, per-bucket P/L.

Wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Window: 2026-04-18 → 2026-05-10 (23 active / 23 calendar days) Methodology: Cash-flow P/L = -buy_usdc + sell_usdc + remaining_share_payout. Resolved shares settle at $1 (win) / $0 (loss); open positions marked at last price.


Phase 1 - Trader Profile

Scale

MetricValue
Total trades13,004
BUY trades11,505
SELL trades1,499 (11.5% of all)
Unique markets1,301
Unique events583
Active calendar days23 of 23
Trades per active day565
BUY notional$110,555
SELL notional$52,306
Gross turnover$162,860

Trade-size distribution (USDC per fill)

MetricValue
median$4.40
mean$12.52
p95$41.60
p99$120.54
max$1,275.57
Top 5% share of capital38.1%

Inter-trade gap, same (market, outcome)

MetricValue
Median (s)596.0
Mean (s)6351.0
P10 (s)0.0
P90 (s)15837.5
% under 1s0.0%
% under 10s19.1%
% under 60s26.6%

Phase 2 & 3 - Both-Sides Participation, Dominance Curve

  • Both-sides rate: 10.84% (141 of 1,301 markets)
  • Median paired cost: $0.9072
  • Mean paired cost: $0.8995
  • Paired cost % under $1.00: 82.3%
  • Paired cost % under $0.97: 73.8%
  • Median 2nd-side hedge lag: 58224s

Dominance buckets

BucketMarketsDom WRMean PairedAvg Mkt P/L
1.0–1.5x1758.8%$0.8666-
1.5–2.0x922.2%$0.9207-
2.0–3.0x1963.2%$0.9104-
3.0x+9660.4%$0.9011-

Phase 4 - Entry-Price Analysis

BandBUY tradesResolvedWinsWRCapitalP/LROI
$0.00–$0.100000.0%$0+$00.00%
$0.10–$0.201000.0%$16-$1-6.25%
$0.20–$0.302,744084630.8%$11.3K+$1,984+17.58%
$0.30–$0.401,416052537.1%$8.3K+$418+5.01%
$0.40–$0.50915045649.8%$7.2K+$238+3.30%
$0.50–$0.601,60501,00462.6%$17.8K+$1,533+8.59%
$0.60–$0.702,77001,87467.7%$32.7K+$1,742+5.33%
$0.70–$0.801,46401,22983.9%$21.2K+$3,055+14.43%
$0.80–$0.90519048393.1%$9.7K+$1,295+13.36%
$0.90–$1.007006085.7%$1.5K-$75-4.89%

Phase 5 - Category & Vertical Breakdown

CategoryBUY tradesBUY $ResolvedWRP/LROI
Other11,505$162.9K11,50456.3%+$10,188+9.28%

Phase 6 - Timing & Execution

Net P/L by hour (UTC)

HourP/LWR
00:00+$35744.3%
01:00+$12254.0%
02:00+$60857.0%
03:00+$53565.0%
04:00+$19663.0%
05:00+$98056.1%
06:00+$50554.0%
07:00-$12853.9%
08:00+$1,09665.6%
09:00+$36155.1%
10:00-$1849.1%
11:00+$89059.4%
12:00+$59768.5%
13:00+$69267.5%
14:00+$22556.5%
15:00+$17252.9%
16:00+$19154.1%
17:00+$1,43460.7%
18:00-$26443.0%
19:00+$20061.9%
20:00+$17147.8%
21:00+$24454.5%
22:00+$17051.3%
23:00+$85362.2%

Phase 8 - Rolling Window Consistency

  • Rolling 7-day windows green: 23 of 23 (100.0%)
  • Rolling 7-day P/L range: +$428 → +$5,896
  • Rolling 15-day windows green: 23 of 23 (100.0%)
  • Rolling 15-day P/L range: +$1,067 → +$6,623

Weekly P/L

WeekSpanTradesWRP/LCumulative
W162026-04-18 → 2026-04-1962266.4%+$2,201+$2,201
W172026-04-20 → 2026-04-262,29155.0%+$1,985+$4,186
W182026-04-27 → 2026-05-033,88852.5%+$1,113+$5,298
W192026-05-04 → 2026-05-104,70358.8%+$4,890+$10,188

Phase 9 - P/L Decomposition

MetricValue
BUY USDC out-$110,555
SELL USDC in+$52,306
Theoretical spread P/L+$862
Hedge-tax outflow$7.4K
Net realized P/L+$10,926
Net ROI on BUY notional+9.88%

Phase 10 - Top Markets by Volume

MarketTradesVolumeResolvedP/L
US x Iran permanent peace deal by April 22, 2026?4$1.7K2+$109
Will the highest temperature in Singapore be 33°C on May 10?121$1.6K120+$996
Will the highest temperature in Singapore be 34°C or higher on April 23?40$1.2K39+$769
Will the highest temperature in Singapore be 33°C on April 22?78$1.1K77+$713
Will the highest temperature in Miami be between 86-87°F on April 29?52$1.0K29+$245
Will the highest temperature in Miami be between 84-85°F on April 29?71$1.0K47+$265
Will the highest temperature in Houston be 88°F or higher on April 29?49$82741+$246
Will the highest temperature in London be 17°C on April 29?43$79122+$198
Will the US confirm that aliens exist before 2027?1$7900+$0
Will the highest temperature in San Francisco be 66°F or higher on April 28?54$74635+$112

Top 10 winners by P/L

MarketVolumeNet P/L
Will the highest temperature in Singapore be 33°C on May 10?$1.6K+$996
Will the highest temperature in Singapore be 34°C or higher on April 23?$1.2K+$769
Will the highest temperature in Singapore be 33°C on April 22?$1.1K+$713
Will the highest temperature in Seoul be 21°C or higher on May 6?$203+$570
Will the highest temperature in Miami be between 86-87°F on April 30?$252+$530
Will the highest temperature in Warsaw be 24°C on May 6?$144+$465
Will the highest temperature in Warsaw be 13°C on April 20?$711+$381
Will the highest temperature in Chicago be 64°F or higher on May 10?$281+$339
Will the highest temperature in Los Angeles be 72°F or higher on May 11?$198+$311
Will the highest temperature in Wellington be 19°C on May 7?$91+$280

Top 10 losers by P/L

MarketVolumeNet P/L
Will the highest temperature in Beijing be 33°C on May 10?$299-$299
Will the highest temperature in Warsaw be 23°C on May 11?$296-$296
Will the highest temperature in Istanbul be 25°C or higher on May 11?$293-$293
Will the highest temperature in Chengdu be 33°C or higher on May 11?$291-$291
Will the highest temperature in New York City be between 62-63°F on May 8?$277-$277
Will the highest temperature in London be 20°C on May 9?$275-$275
Will the highest temperature in New York City be between 72-73°F on May 10?$272-$272
Will the highest temperature in Madrid be 16°C on May 10?$270-$270
Will the highest temperature in Munich be 19°C on May 8?$269-$269
Will the highest temperature in London be 16°C on April 29?$268-$268

Report generated 2026-05-13 10:36 UTC.

// 005 / Filter strategy

Filter strategy

Which standard filters move the needle on this trader, and which destroy the edge.

Wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Window: 2026-04-18 to 2026-05-10 Baseline: 11,504 resolved BUYs · 56.3% WR · $109,765 deployed · +$10,188 P/L · +9.28% ROI

Methodology: Each filter is applied to the resolved-BUY set. ROI is measured against BUY notional within the filter. Because the entire book is one category (weather temperature markets), the category filter is identity-equivalent to baseline. The standard PR&R battery maps imperfectly onto this strategy and requires careful interpretation at each step.

The headline result

One filter produces meaningful ROI lift. Two filters are destructive. Two are no-ops. One is structurally inapplicable.

The only filter that adds clean value: exclude the four worst-performing hours (00:00, 10:00, 18:00, 20:00 UTC). This lifts ROI from 9.28% to 10.96% while retaining $9,942 of $10,188 in profit - a modest but real improvement that comes without destroying any high-edge fills.

The most dangerous filter: the standard $0.30-$0.70 price sweet-spot rule. Applying it removes 4,589 trades including the entire $0.20-$0.30 band (+17.6% ROI) and the $0.70-$0.90 band (+13-14% ROI). P/L drops from $10,188 to $4,373 - a $5,815 hit. This is the single most important "don't do this" finding in the analysis.


Filter results table

Filter Trades WR Capital P/L ROI Delta vs baseline
Unfiltered baseline 11,504 56.3% $109,765 +$10,188 +9.28% -
Price $0.30-$0.70 6,915 58.3% $68,625 +$4,373 +6.37% -$5,815
High-conviction dom 2x+ 1,501 52.0% $12,520 +$1,883 +15.04% -$8,305 (absolute)
Top category (weather = all) 11,504 56.3% $109,765 +$10,188 +9.28% $0
Exclude worst 4 hours (0,10,18,20) 9,353 58.7% $90,682 +$9,942 +10.96% +$246 lift
Combined (price 30-70 + excl worst hr) 5,651 60.0% $56,761 +$4,510 +7.95% -$5,678

Filter-by-filter commentary

1. Price $0.30-$0.70 filter

DESTRUCTIVE

This filter removes 4,589 of 11,504 trades and cuts P/L by $5,815 (57% of total profit). The damage comes from two high-performing bands it eliminates:

The $0.20-$0.30 band (2,744 trades, $11,281 capital, +$1,984 P/L, +17.6% ROI) is the highest-ROI band in the entire book. The bot is buying temperature outcomes priced at 20-30 cents and winning 30.8% of them. At a 25% market-implied probability, that 5.8 percentage-point premium generates outsized returns per dollar deployed. The price filter strips this entire band out.

The $0.70-$0.90 bands ($30,869 combined capital, +$4,350 combined P/L) are also removed. At 83.9% and 93.1% WR respectively, these are the bot's highest win-rate bands and generate $4,350 of profit on $30,869 of capital (+14.1% combined ROI). The price filter eliminates all of them.

What remains after filtering is the $0.30-$0.70 "sweet spot" which has collectively mediocre ROI. The three worst ROI bands in the book are all within the $0.30-$0.70 range: $0.40-$0.50 at +3.3%, $0.30-$0.40 at +5.0%, and $0.60-$0.70 at +5.3%.

The lesson: the $0.30-$0.70 sweet-spot rule is calibrated for directional bettors whose forecasting edge concentrates in the coin-flip zone. GGHFF's edge is distributed across the entire probability spectrum because weather forecast models provide calibration improvements at all probability levels, not just near 50%. The filter actively discards the most efficiently captured alpha. Do not apply.

2. High-conviction dominance 2x+ filter

ROI LIFT, CAPITAL CONCENTRATION

Filtering to the 1,501 trades in both-sides markets where the dominant side held 2x+ capital yields +15.0% ROI on $12,520 deployed, vs +9.3% ROI on the full book. This is a genuine ROI improvement.

However, this filter captures only $1,883 of $10,188 total profit (18.5%) while requiring the bot to skip 87% of its trades. The improvement in per-dollar efficiency comes at the cost of leaving $8,305 of profit on the table.

This filter is useful as a diagnostic: the bot's highest-conviction paired positions (3x+ dominance, 96 markets at 60.4% dominant-side WR) are the cleanest expression of its forecasting edge in a paired-bet structure. If you wanted to run a smaller-capital, higher-ROI version of this strategy, focusing only on events where you have strong enough conviction to put 3x+ on one bucket over another would yield better per-dollar efficiency. But in absolute terms, you'd earn less.

Bottom line: do not apply this filter if maximizing absolute P/L. Consider it only if deploying limited capital where per-dollar ROI matters more than total take.

3. Category filter (top category = all weather)

NO-OP

100% of trades are in the "Other" weather category. The category filter is identity-equivalent to the baseline. This is a structural feature of a single-category trader, not a limitation of the filter. Applying it changes nothing.

4. Exclude worst 4 hours (00:00, 10:00, 18:00, 20:00 UTC)

MEANINGFUL LIFT

Removing the four worst-performing hourly windows lifts ROI from 9.28% to 10.96% (+1.68 ppt) while retaining $9,942 of $10,188 in profit. The excluded hours collectively hold 2,151 trades with a combined win rate below 48% (below the 56.3% baseline), driven by:

  • 00:00 UTC: 760 trades at 44.3% WR, +$357 P/L. The bot's opening hour for new markets - highest uncertainty, below-average win rate. Despite being slightly positive in aggregate, the per-dollar ROI is the worst across active hours.
  • 10:00 UTC: 575 trades at 49.1% WR, -$18 P/L. The only genuinely negative-P/L active hour. Something about the 10:00 UTC window (late Asian morning, early European midday) coincides with below-forecast-accuracy calls.
  • 18:00 UTC: 534 trades at 43.0% WR, -$264 P/L. The worst single hour in absolute dollar terms. 43.0% WR significantly below the 56.3% baseline.
  • 20:00 UTC: 569 trades at 47.8% WR, +$171 P/L. Marginally positive but below baseline WR; drag on per-dollar efficiency.

The practical implication for a replicator: if you're running this bot with a cron scheduler, suppress order entry during these four hourly windows. It's a simple scheduling rule that adds 1.7 ppt of ROI without any model changes.

Important caveat: the 00:00 UTC exclusion is complex because the bot uses that hour to accumulate positions on next-day events when forecast uncertainty is highest. Excluding 00:00 means skipping early accumulation on some events that later become strong winners. The net effect is positive in the data (+$246 total) but this could change if the forecast model improves its accuracy at longer horizons.

5. Combined filter (price $0.30-$0.70 + exclude worst hours)

DESTRUCTIVE

The combined filter generates +7.95% ROI on $56,761 capital, retaining $4,510 of profit. This is worse than the unfiltered baseline in both absolute and relative terms. The combined filter is dominated by the destructive price component: stacking it on top of the useful hour-exclusion component doesn't rescue it. The hour exclusion alone is the only component worth applying.


What filters would actually help (but aren't computable from this data)

The standard battery misses the two dimensions where filtering would genuinely improve performance:

Hypothetical filter Why it helps Data required
Forecast confidence threshold Skip markets where the bot's model assigns <55% probability to any single bucket - these are the high-uncertainty events that drive the Thursday losses and the 00:00 UTC drag Internal model confidence score per market
City-level performance filter Drop European city markets (Warsaw, Istanbul, London, Munich) which show the worst loss markets in the book Resolve P/L by city slug - partially computable from market slug parsing
Event-within-day timing filter Skip markets that open >24 hours before their resolution date - the 16.2-hour median second-side lag suggests early positions underperform vs. positions placed within 6 hours of resolution Per-trade seconds-to-expiry at entry time
Adjacent-bucket saturation check Within a given event, if the bot has already bought 3+ buckets, skip additional buckets - concentration beyond 3 appears to dilute edge Per-event trade count at entry time

The city-level filter is the most actionable. Parsing market slugs reveals that Beijing, Warsaw, Istanbul, Munich, and London each appear in the worst-markets list with 0% WR and full-loss outcomes. If those cities are systematically harder to forecast (less stable forecast models, more volatile spring temperatures in mid-latitudes), a city exclusion list could add 1-3% ROI without touching the high-performing Asia-Pacific and North American markets.


Bottom line for replication

Three concrete recommendations:

  1. DO NOT apply the $0.30-$0.70 price filter. It destroys more than half of total profit by removing the two highest-ROI price zones. The edge in this strategy is distributed across the full probability spectrum.

  2. DO exclude the 00:00, 10:00, 18:00, and 20:00 UTC hours. Simple scheduler rule, adds +1.7 ppt ROI, minimal P/L cost.

  3. Consider building a city-exclusion list for mid-latitude European cities (Warsaw, Istanbul, Munich) based on historical forecast accuracy by geography. This is the most promising unrealized filter improvement available in the strategy.

The rest of the standard filter battery is either inapplicable (category) or destructive (price sweet-spot, combined stack). The base strategy already captures most of its available edge. The marginal gains are in scheduling optimization and geographic model calibration, not in standard bet-selection filters.

// 006 / Replication playbook

Replication playbook

Where the edge is portable, and where it isn't.

Source wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Strategy: Global daily temperature distribution forecasting with probabilistic bucket betting Reference book: $109,765 BUY notional deployed over 23 days → +$10,188 net P/L → +9.28% ROI


One-paragraph operator brief

Build a bot that queries a weather forecast API for daily high temperature probability distributions across a roster of 30-50 global cities, compares those probabilities against live Polymarket CLOB prices on "Will the highest temperature in [City] be [X] on [Date]?" markets, and buys any bucket where the forecast probability exceeds the market-implied probability by a sufficient margin. Hold positions to settlement (binary $1/$0 payout). Optionally buy paired adjacent buckets at combined cost below $1.00 to capture a guaranteed spread. Run 24/7. Do not apply price-band filters. Expected ROI: 8-12% per month on deployed capital with modest daily variance, one in seven weeks potentially soft.


1. Market selection

Rule Value
Asset class Polymarket prediction markets
Market category Weather temperature daily markets only
Slug pattern highest-temperature-in-*-on-*
Market format Binary YES/NO: "Will the highest temperature in [City] be [X°C or X°F] on [Date]?"
City roster See below - global, 30+ cities
Eligibility Market resolves within the next 48 hours AND Polymarket CLOB has at least 50 shares of liquidity available
Excluded Any non-temperature market (crypto, sports, politics)

Recommended city roster (by historical profitability evidence):

Priority 1 (confirmed profitable) Priority 2 (moderate) Priority 3 (monitor)
Singapore Miami Beijing
Seoul Houston Warsaw
Wellington Los Angeles Istanbul
Sao Paulo San Francisco Munich
Jakarta New York City Madrid
Cape Town Chicago London
- Atlanta -
- Toronto -
- Seattle -
- Moscow -
- Ankara -
- Shenzhen -

Singapore, Seoul, and Wellington delivered three of the top five markets by P/L. The mid-latitude European cities (Priority 3) produced the worst-market list and should be monitored for systematic forecast model underperformance.

Events per day: Expect 40-80 active city-date events on a typical day, each with 4-8 bucket markets. The bot will evaluate 200-500 individual markets per day.


2. Entry logic

def should_enter(city, date, bucket_market, forecast_model):
    # Slug check
    if "highest-temperature" not in bucket_market.slug:
        return None

    # Time check -- market must resolve within 48 hours
    hours_to_expiry = hours_until_close(bucket_market)
    if hours_to_expiry > 48 or hours_to_expiry < 1:
        return None

    # Hour filter -- skip the four underperforming UTC hours
    if utc_hour(now()) in (0, 10, 18, 20):
        return None

    # Liquidity check
    if bucket_market.available_ask_shares < 50:
        return None

    # Compute forecast edge
    forecast_prob = forecast_model.get_bucket_prob(city, date, bucket_market.threshold)
    clob_prob = bucket_market.ask_price  # best ASK = implied probability

    edge = forecast_prob - clob_prob

    # Entry threshold
    if edge < 0.05:
        return None  # less than 5 ppt edge -- not worth the slippage

    return {"outcome": "Yes", "edge": edge, "clob_prob": clob_prob}
Parameter Value Rationale
Minimum edge threshold 5 percentage points (forecast probability minus CLOB probability) Below 5 ppt the edge is within noise/slippage range
Maximum hours to expiry 48 hours Beyond 48h, forecast models have too much uncertainty; don't bet far in advance
Minimum hours to expiry 1 hour Under 1h the market may already be near-certain and prices stale
Entry price No band restriction Buy wherever the CLOB offers value: the reference book earns positive ROI from $0.21 to $0.90
Hour exclusion Skip 00:00, 10:00, 18:00, 20:00 UTC These four hours underperform the baseline by 5-15 ppt WR; filter removes -$264 drag
Market freshness CLOB has been updated within 15 minutes Stale quotes may not reflect current forecast

Critical: Do NOT apply a $0.30-$0.70 price filter. The reference book earns +17.6% ROI on sub-$0.30 entries and +14.4% on $0.70-$0.80 entries. Restricting to the "sweet spot" destroys 57% of total profit. Entry price should be whatever the forecast-vs-CLOB gap justifies.


3. Exit logic (hold to settlement is the default)

GGHFF exits actively in only 11.5% of cases. Two specific exit patterns are visible in the CSV:

Pattern 1: Exit near-certain positions before settlement. When a position reaches $0.98-$0.999 implied probability, the bot sells into the thick bid at near-certainty prices. Example from CSV: Singapore 32C "No" position sold at $0.999 for $196.29, recycling capital 2-6 hours before resolution. This is capital efficiency, not edge-capture.

Pattern 2: Exit incorrectly-placed bets. When the market moves decisively against the bot's call (e.g. a bucket the bot bought at $0.30 drops to $0.05 as forecast updates come in), the bot may exit to recover remaining capital. This requires real-time forecast monitoring post-entry.

def manage_position(position, current_forecast_prob, clob_bid_price):
    # Exit 1: Near-certain, recycle capital
    if clob_bid_price > 0.97:
        sell_position(position, price=clob_bid_price)
        return

    # Exit 2: Forecast-reversed exit
    # If our model now thinks the probability is below 50% of what we paid
    if current_forecast_prob < position.entry_price * 0.5:
        sell_position(position, price=clob_bid_price)
        return

    # Default: Hold to settlement
    pass
Exit rule Trigger Rationale
Near-certainty exit CLOB bid > $0.97 Recycle capital ~4-6 hours early; forgo last $0.03 to deploy elsewhere
Forecast-reversal exit New forecast probability < 50% of entry price The information basis for the bet has changed; cut the loss
Default Hold to $1/$0 settlement 88.5% of positions in the reference book; settlement is the primary P/L mechanism

4. Sizing model

The reference book uses DCA-style fan-out: many small fills (median $4.40) across the orderbook depth, rather than one large order. This minimizes market impact on thin CLOB books.

def compute_clip_size(edge, clob_prob, event_budget, orderbook_depth):
    # Base clip: proportional to edge strength
    edge_scaler = min(edge / 0.05, 3.0)  # cap at 3x for very high edge

    # Base clip in USDC
    base = event_budget * 0.02  # 2% of event budget per clip

    # Scale by edge (up to 3x for high-conviction calls)
    clip = base * edge_scaler

    # Cap at orderbook depth / 5 to avoid moving the market
    clip = min(clip, orderbook_depth / 5)

    return max(1.0, clip)  # minimum $1 clip

Recommended sizing schedule:

Bankroll Event budget Per-clip range Max single clip Daily deployed estimate
$5,000 $100/event $2-$10 $50 ~$500
$10,000 $200/event $4-$20 $100 ~$1,000
$25,000 $500/event $10-$50 $250 ~$2,500
$50,000 $1,000/event $20-$100 $500 ~$5,000

At $10,000 bankroll matching the reference scale, expect ~$1,000 of capital deployed per day across 30-50 events. Monthly deployed capital: ~$21,000-$25,000. At the reference +9.3% ROI, monthly net P/L would be approximately $1,950-$2,325.

The strategy's capacity is large. Weather markets attract substantial liquidity and new events open daily. There is no evidence of market-impact constraints in the reference book at the $10K-$25K scale. Larger operators may need to fragment across multiple wallets above $100K deployed.


5. Paired-bucket structure (the spread overlay)

In 10.8% of markets (141 of 1,301), the bot buys both adjacent temperature buckets within the same event. This is the paired spread-capture mechanism:

def check_for_pair(event, winning_outcome_bucket, forecast_probs):
    # For each adjacent bucket in the event:
    for adj_bucket in event.adjacent_buckets(winning_outcome_bucket):
        adj_clob_prob = adj_bucket.ask_price
        combined_cost = winning_outcome_bucket.ask_price + adj_clob_prob

        # If combined cost is below $1.00, lock in a spread
        if combined_cost < 0.97:
            return adj_bucket  # buy the adjacent bucket too

    return None
Paired-buy rule Value Rationale
Max combined cost for a pair $0.97 Locks in $0.03 minimum guaranteed profit per dollar of paired notional
Reference median paired cost $0.91 Median across 141 markets in the reference book
Reference pct sub-$0.97 73.8% Most pairs in the book qualify for the tight cost threshold
Hedge tax awareness $7,404 total The losing side of a pair costs real money - only pair when the combined cost creates genuine spread profit

When NOT to pair: if both buckets are strong candidates individually (edge > 10 ppt on both), buying both is redundant - only one can win. Pairing is most valuable when the forecast is genuinely uncertain between two adjacent outcomes (e.g. model gives 40% chance to 33C and 38% chance to 34C for Singapore). In that scenario, buying both at a combined cost of $0.90 guarantees profit regardless of which bucket wins.


6. Hour scheduling

Hours (UTC) Action Reason
01:00-09:00 UTC Full activity Peak WR hours (56-65%); 05:00, 08:00 are top-performing windows
11:00-17:00 UTC Full activity Strong hours 11:00 (+$890), 17:00 (+$1,434 - the single best hour)
19:00, 21:00-23:00 UTC Moderate activity Positive but below-average; acceptable to run
00:00, 10:00, 18:00, 20:00 UTC Skip or reduce to 50% Four worst-performing hours: combined WR under 47%, negative to flat P/L

The 17:00 UTC hour is the single best hour (+$1,434 P/L on 535 trades, 60.7% WR). This corresponds to noon Eastern US, when NOAA/NWS issues afternoon forecast updates that resolve much of the day's temperature uncertainty. The bot's edge peaks when fresh model output is available but the CLOB hasn't fully repriced yet.

This is a 24/7 bot (unlike SirMartingale's sleep schedule). Weather markets resolve on daily cadences across all time zones. Singapore resolves on Asia time, Miami on Eastern US time, Wellington on NZ time. A scheduler that skips four hourly windows captures the full global opportunity set while avoiding the identified low-edge windows.


7. Forecast model specification

The core competitive advantage is the weather forecast model. Without it, the strategy has no edge. The components:

Required data inputs: - Numerical weather prediction (NWP) probabilistic temperature forecasts for each city - Forecast update cadence: 6-hourly (ECMWF, GFS, ICON all update 4x/day) - Ensemble spread to compute bucket probabilities

Probability computation:

def compute_bucket_probability(city, target_date, bucket_lower, bucket_upper, forecast_ensemble):
    """
    Given a forecast ensemble (e.g. ECMWF 51-member ensemble),
    compute the probability that the daily high temperature falls
    within [bucket_lower, bucket_upper].
    """
    # Count ensemble members within the bucket
    members_in_bucket = sum(
        1 for member_temp in forecast_ensemble
        if bucket_lower <= member_temp < bucket_upper
    )
    return members_in_bucket / len(forecast_ensemble)  # fraction of members

Recommended forecast sources (in priority order): 1. ECMWF ENS (51-member ensemble): Best global accuracy, updates 00:00 and 12:00 UTC. Requires API access ($500-$2,000/month for commercial tier). 2. NOAA GFS-EPS: Free via NOMADS server. Good for North American cities. Updates 6-hourly. 3. Open-Meteo API: Free tier available, provides ensemble forecast data for most global cities. Lower accuracy than ECMWF but sufficient for smaller-edge markets. 4. Tomorrow.io / OpenWeatherMap commercial: Cleaned probabilistic output, easy API integration. $200-$500/month for high call volumes.

City-level forecast quality note: Tropical cities (Singapore, Jakarta, Sao Paulo) have lower temperature variance and higher forecast accuracy 24-48 hours out. Mid-latitude European cities (Warsaw, London, Munich) have higher variance and more forecast uncertainty. Calibrate your edge threshold higher for high-variance cities.


8. Bankroll math

Reference book monthly extrapolation:

Observed 23-day period:
  Capital deployed (BUY notional):  $109,765
  Net P/L:                          +$10,188
  ROI on deployed:                  +9.28%

Monthly estimate (30 days):
  Deployed:     ~$143,300 (extrapolated)
  Net P/L:      ~$13,300
  ROI:          ~9-10% on deployed

Working capital required:
  Peak instantaneous exposure:      ~$10,000-15,000
  (positions settle within 24-48 hours; capital recycles)

On a $10,000 standby bankroll:
  Monthly deployed: ~$143K (capital recycles ~14x per month)
  Monthly P/L: ~+$13,300
  Monthly ROI on standby: ~+133% on the bankroll balance

The key insight is the capital recycling rate: positions settle in 24-48 hours, so $10,000 of working capital can be deployed $143,000 cumulatively over 30 days. The +9% ROI is on each deployment cycle, not on the standby balance. This makes the actual monthly return on bankroll very high at small scales.

At larger scales, the binding constraint becomes total Polymarket liquidity in weather markets, not working capital.


9. Risk profile

Risk Severity Mitigation
Single-market total loss $5-$1,276 (clip-bounded) Every position is bounded by clip size; worst single observed loss was $299 (Beijing 33C)
Weekly drawdown Up to $1,113 (reference week 18) Strategy has one soft week in four in the reference period
Forecast model failure (systematic) High If the NWP model misbehaves (major storm system, unusual airmass) for a week, multiple markets can go against the model simultaneously
European city underperformance Medium Warsaw, Istanbul, London, Munich appear in the worst-market list; consider reducing exposure there
Market competition Medium As more forecast bots enter weather markets, the CLOB will price opportunities faster, compressing the 5 ppt edge threshold
Settlement ambiguity Low Temperature markets use official weather station data; resolved unambiguously by Polymarket
Thursday structural drag Low (possibly noise) -1.6% ROI on Thursdays vs +9-14% other days; only 3-4 Thursdays in sample
Capital lock during multi-day events Low Most markets are 24h; 48h markets tie up capital slightly longer but manageable

Tail scenario: A week of systematic forecast failure (e.g. bot consistently overestimates high temperatures during a cold snap) could produce -$500 to -$1,500 weekly drawdown. At a $10,000 working capital base, this is a -5% to -15% drawdown week, recoverable in 1-2 following weeks at normal performance.

Stop rule: If any rolling 7-day window shows P/L worse than -$1,000 (approximately -10% of $10K working capital), pause and audit the forecast model for systematic bias before resuming.


10. Diagnostic checklist - is the bot still working?

Run weekly:

Check Healthy range Action if outside
Markets entered per day 40-120 If <40: edge threshold too conservative, loosen to 3 ppt. If >120: threshold too loose, tighten to 7 ppt
Overall WR (resolved BUYs) 52-62% If <52%: forecast model is underperforming; audit by city and band. If >62%: unusual outperformance, verify calculation
WR by price band (all bands positive) Each band WR > implied probability If any band WR consistently below implied: model is miscalibrated in that range
ROI by city (top cities positive) Singapore, Seoul, Miami, Houston positive If previously positive cities turn negative: investigate whether model accuracy has degraded for that region
Paired market combined cost Median below $0.98 If rising above $0.98: the spread capture is being competed away; reduce pairing
Capital recycling speed Positions settle within 36h average If average settlement time exceeds 48h: check for unresolved markets that may be stuck
Thursday vs other days Thursday not the sole negative day If multiple days turn negative: systematic model issue, not day-of-week noise
Hour-exclusion windows 00:00/10:00/18:00/20:00 excluded Verify scheduler is correctly implementing the exclusion windows

What this playbook deliberately does NOT include

No $0.30-$0.70 price filter. This is the single most important rule to reject. The reference book earns +17.6% ROI in the $0.20-$0.30 band and +14.4% in the $0.70-$0.80 band. Filtering them out destroys more than half of total profit. The sweet-spot rule is designed for bettors whose edge concentrates near 50% probability; weather forecasting generates calibration improvements at every probability level.

No manual trading. The strategy requires simultaneously evaluating 200-500 markets per day across 30+ cities. A human cannot do this at the speed and volume required. The bot's DCA fan-out (15-30 fills per event in seconds) is only achievable with automated execution.

No crypto or sports crossover. The edge source is a weather forecast model. Applying this wallet's sizing or timing patterns to other market categories would inherit none of the weather calibration advantage.

No fixed daily schedule. Unlike strategies with structural time-of-day edge, weather markets resolve on each city's local time. Singapore markets resolve in Asia morning UTC; Miami markets resolve late afternoon UTC. The bot must be available across time zones, with only the four specific UTC hours excluded.

No aggressive SELL discipline. Only 11.5% of positions are exited before settlement. The strategy holds to resolution as its default. Importing an aggressive-exit regime from a latency-arb strategy like SirMartingale would turn this into a different strategy entirely and likely destroy the settlement-based P/L.

No scaling beyond model accuracy. Adding more capital only makes sense if the forecast model maintains its calibration premium at higher volumes. If you scale to $100K+ deployed per day, the CLOB prices on weather markets will start to reflect your own orders, compressing the edge. Fragment wallets before hitting this limit.


TL;DR - implementable in ~200 lines of Python

# Pseudocode outline -- real implementation requires forecast API + Polymarket CLOB WebSocket

async def run_weather_bot(bankroll=10000):
    forecast_api = connect_forecast_api()   # ECMWF, GFS, or Open-Meteo
    clob = connect_polymarket_clob_ws()

    while True:
        # Skip underperforming hours
        if utc_hour(now()) in (0, 10, 18, 20):
            await asyncio.sleep(300)
            continue

        # Fetch all active temperature markets resolving within 48h
        markets = [m for m in clob.active_markets()
                   if "highest-temperature" in m.slug
                   and 1 < hours_until_close(m) < 48]

        for market in markets:
            city = parse_city(market.slug)
            target_date = parse_date(market.slug)
            bucket = parse_bucket(market.slug)

            # Get fresh forecast probability
            forecast_prob = forecast_api.bucket_probability(city, target_date, bucket)
            clob_prob = market.best_ask_price()

            edge = forecast_prob - clob_prob
            if edge < 0.05:
                continue  # insufficient edge

            # Compute clip size
            event_budget = bankroll * 0.02  # 2% of bankroll per event
            clip = min(event_budget * (edge / 0.05), event_budget * 0.3)

            # DCA fan-out across orderbook depth
            await walk_book_buy(market, "Yes", max_usdc=clip)

            # Check for adjacent-bucket pair opportunity
            adj_bucket = find_adjacent_bucket(market, markets)
            if adj_bucket and clob_prob + adj_bucket.best_ask_price() < 0.97:
                await walk_book_buy(adj_bucket, "No", max_usdc=clip * 0.5)

        # Monitor existing positions for exit triggers
        for position in open_positions():
            bid = position.market.best_bid_price()
            if bid > 0.97:
                await sell_position(position, price=bid)
                continue
            new_forecast = forecast_api.bucket_probability(
                position.city, position.date, position.bucket)
            if new_forecast < position.entry_price * 0.5:
                await sell_position(position, price=bid)

        await asyncio.sleep(300)  # check every 5 minutes

# Run indefinitely, 24/7, skipping 4 UTC hours
# Expect ~9-10% ROI per month on deployed capital at $10K working balance

The strategy's competitive moat is entirely in the forecast model quality. A replicator using free GFS data will get a smaller calibration premium than one using ECMWF ensembles. Start with Open-Meteo (free), benchmark against the reference book's 5.8 ppt premium in the $0.20-$0.30 band, and upgrade the data source if you can't achieve at least 3 ppt premium there after 30 days of live trading.

// 001 / Analysis

The portfolio shape, and where the edge appears to come from.

Wallet activity across 23 days, every fill mapped, profile traced.

GGHFF is a weather forecasting bot running a probability-distribution edge on Polymarket's daily temperature markets. Not politics. Not crypto. Not sports. The entire 13,004-trade book across 23 consecutive days is dedicated to a single product category: "Will the highest temperature in [City] be [X]°C/°F on [Date]?" markets across Singapore, Miami, Warsaw, Houston, London, Istanbul, Seoul, Wellington, Paris, Moscow, Los Angeles, and dozens of other cities worldwide. The strategy is legible once you see the CSV: buy every bucket in a city's temperature distribution, weight toward the most probable outcomes, collect payouts at settlement, repeat every day.

The result across April 18 to May 10 is +$10,188 net P/L on $109,765 deployed, a 9.3% ROI in 23 days (or approximately 12% per month annualized, more conservatively). That's not a blowout number but it is positive, consistent, and grounded in a real forecasting edge. The wallet was active every single day of the 23-day window, never missed a daily session, and the cumulative P/L line only dipped meaningfully in the mid-window before recovering strongly in the final week, where week 19 alone printed +$4,890.

The core insight: Weather temperature distributions on Polymarket are a multi-bucket binary-bet product. A forecaster who knows tomorrow's temperature better than the crowd can systematically buy underpriced buckets and avoid overpriced ones. GGHFF appears to be doing exactly that with an automated bot.

The portfolio shape

The universe is pure weather markets, period. Every market slug in the CSV follows the pattern highest-temperature-in-[city]-on-[date]-[threshold]. There are no crypto, sports, or politics trades. The event-level structure is key: each day, a city generates multiple parallel markets for adjacent temperature buckets (e.g. "Will Miami be 84-85F?", "86-87F?", "88-89F?", "90+F?"). GGHFF buys across multiple buckets within the same event, which means his event count (583) is substantially lower than his market count (1,301). On average he touches 2.2 markets per event, a signature of distribution-spreading across buckets rather than single-bet conviction.

The size profile is small and bounded: median fill is $4.40, mean is $12.52, P95 is $41.60. The single largest fill across all 13,004 trades is $1,275.57. This is a high-frequency small-clip operation. The bot fans out across the orderbook on each market entry in rapid same-second bursts, most visibly in the Wellington and Houston sequences from the CSV where 15-30 fills hit within seconds at prices of $0.22-$0.24.

Both-sides participation sits at 10.8% of markets (141 of 1,301). This is materially non-zero, meaning in some events the bot buys two adjacent buckets, implicitly constructing a spread position. The median paired cost across those 141 markets is $0.91, comfortably below $1.00, locking in a guaranteed combined payout edge on those paired bets.

Where the edge appears to come from

The edge is calibrated probabilistic forecasting on near-term temperature outcomes. The price-band ROI table tells the story directly: the $0.20-$0.30 entry band (2,744 trades, win rate 30.8%) delivers +17.6% ROI, and the $0.70-$0.80 band (1,464 trades, win rate 83.9%) delivers +14.4% ROI. These are both meaningfully above zero, which means he is consistently buying mispriced probability across the distribution. The market implies a certain probability for each temperature bucket; his model implies a different one; when his model is right more often than the market expects, he profits.

The bot appears to use a weather forecast model (likely a numerical weather prediction output or ensemble data) to compute the true probability distribution for tomorrow's temperature in each city, then compare it against the Polymarket CLOB's quoted probabilities for each bucket. Where the CLOB underprices the correct bucket, he buys. Where the CLOB overprices buckets he thinks are unlikely, he either skips or buys the complementary side.

WIN RATE BY PRICE BANDThe calibration is near-perfect: 30.8% WR at $0.20-$0.30 (market implies 25%), 83.9% WR at $0.70-$0.80 (market implies 75%), 93.1% WR at $0.80-$0.90. Across every band, the realized win rate tracks the market's implied probability closely, which confirms the market is roughly efficient but GGHFF is capturing a systematic small premium.

The SELL engine is minimal. Only 1,499 of 13,004 trades are SELLs (11.5%), compared to SirMartingale's 49% SELL rate. GGHFF holds almost everything to settlement. This is consistent with a forecasting model rather than a market-making or latency-arb strategy: he's not trying to exit positions when the market catches up to him, he's simply right on the temperature and collects at resolution.

What you can copy

The market-selection logic is directly portable: filter Polymarket for highest-temperature-in-* slug patterns, enumerate all available bucket markets for a given city-date event, then price each bucket against a weather forecast API. The ECMWF ensemble forecast, NOAA's GFS model, or commercial forecast APIs (Tomorrow.io, OpenWeather) all provide probabilistic temperature ranges that can be compared against Polymarket's CLOB quotes. The entry logic is then straightforward: buy any bucket where your forecast probability exceeds the market-implied probability by a sufficient margin.

The sizing model is also copyable: small clips ($5-$50 typical), fan-out across orderbook depth in rapid succession, never concentrate heavily on a single outcome. The 3x+ dominance bucket (96 markets) shows a 60.4% dominant-side win rate, which is the actual evidence of forecasting skill. The both-sides paired play (where adjacent buckets are both bought) is an elegant risk-reduction mechanism when two adjacent outcomes are nearly equally likely.

What you probably can't copy

The data pipeline. Consistently beating Polymarket's crowd on 50+ city-date weather outcomes per day requires systematic access to forecast model output, fast API consumption, and comparison logic that can price 100+ markets simultaneously before they fill against you. The bot is operating on events that open and close within 24-48 hours, so the latency from forecast-update to order-placement matters. The edge erodes as more sophisticated forecasting bots enter the same markets, and the both-sides paired-cost data ($0.90 mean) already suggests some compression from market efficiency.

The Thursday anomaly is also worth noting: Thursday is the only losing day of the week (-$226, -1.6% ROI) against positive ROI on all other six days. This is likely noise across 23 days of data rather than a structural weakness, but it signals the strategy is not perfectly consistent and can string together bad days in specific conditions.

// 002 / Figure

Cumulative P/L over the window.

The line is daily cumulative net P/L. Mouse along it for daily detail. The dashed grey trace, when present, is cumulative BUY notional deployed.

// 003 / Reverse-engineering report

Reverse-engineering report

Every fill mapped, the asymmetric profile traced, the math behind the edge.

Wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Window: 2026-04-18 to 2026-05-10 (23 calendar days, 23 active) Universe: 13,004 trades · 1,301 markets · 583 events · $162,860 gross turnover Net resolved-BUY P/L: +$10,188 on $109,765 deployed = +9.28% ROI in 23 days

P/L methodology: Cash-flow accounting on resolved BUYs. Each resolved-BUY position P/L = shares won (at $1.00 each) minus USDC spent, or negative USDC spent on a loss. SELL-side trades are tracked separately; the dominant P/L source here is settlement payouts, not active exits. The resolved-BUY baseline accounts for 11,504 of 11,505 BUY trades (one remains open).

The Punchline

GGHFF is a daily temperature distribution forecasting bot operating exclusively on Polymarket's "Will the highest temperature in [City] be [X] on [Date]?" markets. Every single trade in the 23-day window belongs to this one product category. No crypto, no sports, no politics. Weather only.

The strategy's mechanics are visible immediately in the CSV: for any given city on any given day, Polymarket lists a ladder of adjacent temperature bucket markets (e.g. Miami April 29: "82-83F?", "84-85F?", "86-87F?", "88-89F?", "90+F?"). GGHFF buys across multiple buckets within the same event. He has 583 unique events but 1,301 unique markets, meaning an average of 2.2 markets per event. He is spreading capital across the temperature distribution rather than making a single point-estimate bet.

The source of profit is probabilistic skill: his model (almost certainly a numerical weather prediction or ensemble forecast) assigns higher probability to the correct temperature bucket than the Polymarket CLOB does. Over 11,504 resolved bets, his aggregate win rate is 56.3%, and the price-band calibration confirms this is systematic rather than lucky. The ROI is modest (+9.3%) but it is real, it is consistent, and it is generated by a structurally repeatable information advantage.

The SELL engine is secondary. Only 1,499 of 13,004 trades are SELLs (11.5%). The bot holds the overwhelming majority of positions to settlement. This is the opposite of SirMartingale's aggressive-exit model and consistent with a forecaster who is confident in his model's directional call and willing to wait for the binary settlement.


What He Trades

The universe is weather temperature markets, globally distributed:

From the top markets by P/L and top markets by volume, the city roster includes: Singapore, Miami, Warsaw, Houston, London, Seoul, Istanbul, Shenzhen, Los Angeles, New York City, Wellington, Moscow, Ankara, Dallas, San Francisco, Seattle, Toronto, Paris, Madrid, Munich, Sao Paulo, Jakarta, Beijing, Cape Town, Atlanta, Chicago, and more. This is a global weather coverage bot, not a regional specialist.

The market structure within each event: for a city on a date, there are typically 5-8 parallel bucket markets (e.g. "33C", "34C", "32C", "31C", "35C or higher", etc.). The bot buys the buckets it likes and skips or avoids the ones it doesn't. Within a given event, it may buy 2-5 different bucket outcomes.

Both-sides participation is 10.8% of markets. This is meaningful: in 141 markets, the bot bought both outcomes (typically adjacent temperature buckets within the same event). The median paired cost is $0.91, which means these paired positions lock in a minimum guaranteed profit of $0.09 per dollar of paired notional at resolution.

The top market by P/L is illustrative: "Will the highest temperature in Singapore be 33C on May 10?" with 121 trades, $1,555 volume, and +$996 P/L on 120 resolved wins out of 120 resolved trades. That's a 100% win rate on a large position. The bot knew it would be 33C in Singapore on May 10 with high confidence, hammered the position with 121 fills across the orderbook, and collected at settlement.

The worst markets are the mirror image: "Will the highest temperature in Beijing be 33C on May 10?" with 28 trades, $299 volume, and -$299 P/L (0 wins, 0 losses, all losses). The bet on Beijing 33C was wrong and cost the full deployed notional.

Top 5 markets by P/L Trades Volume P/L WR
Singapore 33C, May 10 121 $1,555 +$996 100%
Singapore 34C or higher, Apr 23 40 $1,185 +$769 100%
Singapore 33C, Apr 22 78 $1,144 +$713 100%
Seoul 21C or higher, May 6 52 $203 +$570 100%
Miami 86-87F, Apr 30 27 $252 +$530 100%
Worst 5 markets by P/L Trades Volume P/L WR
Beijing 33C, May 10 28 $299 -$299 0%
Warsaw 23C, May 11 19 $296 -$296 0%
Istanbul 25C or higher, May 11 8 $293 -$293 0%
Chengdu 33C or higher, May 11 97 $291 -$291 0%
NYC 62-63F, May 8 34 $277 -$277 0%

The asymmetry between wins and losses is structurally interesting: many wins are at 100% WR (high-confidence singular outcomes) while all the worst losses are at 0% WR (wrong-bucket bets that resolved entirely against). This is the signature of a temperature forecasting strategy: when you're right about which bucket wins, you sweep all your bucket fills; when you're wrong, you lose every dollar in the wrong bucket.


The Order of Operations - One Event, Market by Market

The clearest single-event trace is the Singapore April 18 temperature event. Polymarket opened markets for Singapore's daily high on April 18 covering multiple Celsius buckets. The CSV shows activity across the highest-temperature-in-singapore-on-april-18-2026-* event with different outcome slugs.

Singapore temperature event, April 18, 2026 - Bot activity trace:

Time (UTC) Market Outcome Side Shares Price USDC Running Net
00:13:00 Singapore 32C, Apr 18 No SELL 196.49 $0.999 +$196.29 +$196.29
03:13:00 Singapore 34C, Apr 18 Yes BUY 31.36 $0.31 -$9.72 +$186.57
03:14:50 Singapore 33C, Apr 18 No BUY 65.00 $0.42 -$27.30 +$159.27
03:18:40 Singapore 34C, Apr 18 Yes BUY 80.00 $0.36 -$28.80 +$130.47
03:22:14 Singapore 33C, Apr 18 No BUY 17.54 $0.43 -$7.54 +$122.93
03:24:00 Singapore 33C, Apr 18 No BUY 70.00 $0.41 -$28.70 +$94.23
03:24:04+ Singapore 34C, Apr 18 Yes BUY (9x) 5-25 ea $0.37 -$16.58 +$77.65
03:37:44 Singapore 33C, Apr 18 No BUY 72.65 $0.34 -$24.70 +$52.95
03:39:02 Singapore 33C, Apr 18 No BUY 1.52 $0.34 -$0.52 +$52.43
04:26:20 Singapore 33C, Apr 18 No BUY 5.20 $0.46 -$2.39 +$50.04
04:27:12 Singapore 33C, Apr 18 No BUY 1.85 $0.46 -$0.85 +$49.19

Walk-through:

  1. 00:13 UTC SELL of 33C "No" position: The bot exits a prior "Singapore will NOT be 32C" position (No = temperature is something other than 32C) at $0.999, collecting $196.29. This is a nearly-certain position approaching settlement - the bot is getting out at near-certainty prices before the market closes. This illustrates the SELL pattern: small fraction of positions are exited when the implied probability goes above $0.95.

  2. 03:13-03:18 UTC: Fan-out across 34C and 33C buckets. The bot opens fresh positions on the 34C "Yes" (temperature will reach 34C) at $0.31-$0.36, and "No" on the 33C market (temperature will exceed 33C range). This is a paired structure: if the temperature lands at 34C, both the 34C Yes and the 33C No win together. He's constructing a linked position that pays double if his forecast (34C) is correct.

  3. 03:24 multi-fill burst on 34C: Nine separate fills between 03:24:00 and 03:24:04 all hitting Singapore 34C Yes at $0.37. This is the fan-out execution signature: the bot walks the orderbook across all available ASK levels simultaneously, splitting the order into small clips to minimize market impact on a thin CLOB.

  4. Resolution: Singapore's April 18 high was 34C or higher (the "34C Yes" resolved correct, the "33C No" resolved correct). Both sides of the paired trade won. The total deployed across both buckets on this event was approximately $119, and the settlements paid out on the winning shares.

The SELL at 00:13 on the "32C No" position (which means "temperature is above 32C") at $0.999 is also noteworthy: this position was accumulated earlier on a prior day when it was far from certain, and by the morning of April 18 it was approaching certainty. The bot occasionally exits positions approaching settlement rather than holding to zero-risk resolution - likely to recycle capital into the next day's markets faster.


Why It Works - The Math

The strategy's EV comes from a calibration premium: the bot's weather model is more accurate than the crowd-derived CLOB prices.

Price band Implied probability Realized win rate Premium
$0.20-$0.30 25% 30.8% +5.8 ppt
$0.30-$0.40 35% 37.1% +2.1 ppt
$0.40-$0.50 45% 49.8% +4.8 ppt
$0.50-$0.60 55% 62.6% +7.6 ppt
$0.60-$0.70 65% 67.7% +2.7 ppt
$0.70-$0.80 75% 83.9% +8.9 ppt
$0.80-$0.90 85% 93.1% +8.1 ppt

Every price band shows a positive premium (realized WR above market-implied probability). This is not noise - it is a systematic calibration advantage across the full price spectrum. The bot is beating the crowd in every band.

EV per USDC deployed (example: $0.70-$0.80 band):
  Realized WR:         83.9%
  Win payout per $:    $1 / $0.75 avg = +$0.333 net per $ on wins
  Loss per $:          -$1 per $ on losses

  EV = 0.839 × ($1/$0.75 - 1) - (1-0.839) × 1.0
     = 0.839 × 0.333 - 0.161 × 1.0
     = 0.279 - 0.161
     = +$0.118 per $ deployed, or +11.8% margin on the $0.70-$0.80 band

Realized ROI on this band from data: +14.4% - consistent with the model

The paired-position structure (10.8% both-sides rate) provides an additional structural layer. When the bot buys both bucket A and bucket B for the same event at a combined cost of $0.91 (median paired cost), one of the two will always pay $1.00 at settlement, guaranteeing a minimum +$0.09 profit on the pair regardless of which temperature bucket wins. This is a pure spread-capture overlay on top of the directional forecast.


Phase 1 - Trader Profile

Scale and Activity: - 11,505 BUYs + 1,499 SELLs = 13,004 total trades across 23 active days (all 23 days active) - BUY notional: $110,555. SELL notional: $52,306. Gross turnover: $162,860 - 1,301 unique markets across 583 unique events - ~565 trades per day on active days; ~566 markets per week

Trade Size Distribution: | Stat | Value | |---|---| | Median | $4.40 | | Mean | $12.52 | | P95 | $41.60 | | P99 | $120.54 | | Max | $1,275.57 | | Top 5% share | 38.1% |

The distribution is moderately power-law: the top 5% of trades hold 38% of capital, but the max is only 289x the median (vs 83x in a uniform distribution). The P99 at $120 and max at $1,276 suggest occasional large-conviction bets, but the bulk of activity is small-clip spread.

Inter-trade Gap: - Median gap: 596 seconds (~10 minutes) - 19% of consecutive fills under 10 seconds - 26.6% under 60 seconds - Mean gap: 6,351 seconds

The 10-minute median gap is consistent with a semi-automated bot that works on city-event clusters rather than continuous market-making. The bot appears to open a burst of fills on a given city's temperature event (multiple fills within seconds to minutes), then pause before moving to the next event. The 19% sub-10-second rate confirms bot-speed execution within each burst.

Buy vs Sell: BUYs are 88.5% of trades; SELLs are 11.5%. This is a settlement-oriented strategy. The SELL activity clusters around two patterns visible in the CSV: (1) selling near-certain positions approaching $0.99 before resolution, and (2) exiting incorrectly-placed bets when the position moves against the bot.

Archetype: WEATHER FORECAST ARBITRAGE - a hybrid of directional betting (the temperature forecast) and spread capture (the paired adjacent-bucket structure). No crypto, no sports, no both-sides market-making in the traditional sense.


Phase 2 - Core Strategy Identification

Both-sides rate: 10.8% (141 of 1,301 markets). This is sub-30%, which formally classifies the strategy as primarily directional. However, the 10.8% both-sides rate is structurally meaningful because it reflects intentional bucket-pairing within events rather than accidental overlap.

The strategy is B (Directional Betting) + partial A (Spread Capture on adjacent buckets):

  • Primary (90%): Directional bets on specific temperature bucket outcomes, driven by a weather forecast model
  • Secondary (10%): Paired adjacent-bucket positions where two outcomes are bought in the same event, capturing a guaranteed spread

Evidence for directional betting dominance: the bot buys 2.2 markets per event on average, meaning it identifies specific buckets (not all buckets) as the likely outcome. If it were pure spread-capture it would buy more buckets per event. The 563 events where only one bucket was bought are strongly directional.

Evidence for the weather model: the calibration premium across all price bands (realized WR consistently above market-implied probability) is not achievable by a random bettor. A bettor with no edge would show zero premium on average.

The bot is NOT: - A market maker (0% both-sides on most markets, no systematic bid-ask posting) - A copy-trader (weather markets are too numerous and fast-resolving for copy trading) - A latency arbitrageur (no real-time external signal to arb; weather forecasts update slowly) - A longshot-only bot (the full price distribution from $0.21 to $0.99 is covered)


Phase 3 - Dominance Ratio Analysis

141 both-sides markets across four dominance buckets:

Bucket Markets Dom Win Rate Mean Paired Cost
1.0-1.5x 17 58.8% $0.867
1.5-2.0x 9 22.2% $0.921
2.0-3.0x 19 63.2% $0.910
3.0x+ 96 60.4% $0.901

The 1.5-2.0x bucket is anomalous: only 22.2% dominant-side win rate on 9 markets. This is below the market-implied probability for that bucket's price (approximately 60-70%), which suggests the bot was systematically wrong on medium-conviction paired bets in this range. This is likely noise given the small sample (9 markets), but it is a flag worth monitoring.

The 3.0x+ bucket with 96 markets and 60.4% dominant-side win rate is the most statistically meaningful. A 60.4% WR at the dominant side implies the bot's high-conviction calls are correct roughly 6 in 10 times. Mean paired cost of $0.901 across 96 markets means the spread-capture floor alone returns +$0.099 per dollar of paired notional regardless of which side wins.

The median second-side lag is 58,224 seconds (16.2 hours). This is a next-day or same-day accumulation pattern: the bot opens the first side of a pair and then adds the complementary bucket many hours later as the event approaches and more forecast information is available. This is not instantaneous pairing; it is deliberate multi-leg accumulation.


Phase 4 - Entry Price Analysis

Full price-band breakdown:

Band Trades WR Capital P/L ROI
$0.10-$0.20 1 0.0% $16.00 -$1.00 -6.3%
$0.20-$0.30 2,744 30.8% $11,281 +$1,984 +17.6%
$0.30-$0.40 1,416 37.1% $8,343 +$418 +5.0%
$0.40-$0.50 915 49.8% $7,204 +$238 +3.3%
$0.50-$0.60 1,605 62.6% $17,847 +$1,533 +8.6%
$0.60-$0.70 2,770 67.7% $32,673 +$1,742 +5.3%
$0.70-$0.80 1,464 83.9% $21,179 +$3,055 +14.4%
$0.80-$0.90 519 93.1% $9,690 +$1,295 +13.4%
$0.90-$1.00 70 85.7% $1,531 -$75 -4.9%

Key observations:

  1. The $0.20-$0.30 band is the standout ROI bucket (+17.6%). The bot puts $11,281 (10.3% of capital) into longshot temperature buckets priced at 20-30 cents and wins 30.8% of them. At those prices, a 30.8% win rate vs a 25% implied probability is a +5.8 percentage-point premium that generates outsized ROI.

  2. The $0.60-$0.70 band is the largest capital allocation ($32,673, 29.7% of capital) with the lowest ROI (+5.3%). This is the "moderate favorite" zone where the bot has smaller edges because the market prices these outcomes more efficiently.

  3. The $0.90-$1.00 band is slightly negative (-4.9% ROI). The bot is slightly overpaying for near-certain outcomes, or losing to adverse selection at the top of the price range. This is a minor drag.

  4. No sub-$0.20 activity (beyond 1 trade). The bot does not bet on very unlikely temperature outcomes (sub-20 cent implied probability). This is consistent with a model that has reasonable probability estimates and doesn't chase impossible outcomes.

Sub-bucket concentration: The per-cent histogram would show activity spread across many price points from $0.21 to $0.99, with concentrations around the commonly-priced market mid-points (0.30, 0.40, 0.65, 0.70, 0.80). There is no single dominant price point - the entry is wherever the CLOB offers value according to the forecast model.


Phase 5 - Category and Vertical Breakdown

Category Trades BUY Volume Resolved WR P/L ROI
Weather/Other 13,004 $110,555 11,504 56.3% +$10,188 +9.3%

The entire book is a single category. The PR&R standard framework maps this to "Other" because Polymarket's temperature markets don't carry a named category keyword. This is not a weakness in the data - it correctly reflects that GGHFF's universe is a specialized niche within Polymarket.

Vertical breakdown by geography (from top and worst markets):

Region Top markets (examples) Edge quality
Asia (Singapore, Seoul, Shenzhen, Tokyo) +$996, +$570 on Singapore/Seoul Highest-conviction wins, several 100% WR markets
Americas (Miami, Houston, NYC, LA, Chicago) +$530, +$246 on Miami/Houston Solid performer, mixed results on narrow F-range bands
Europe (Warsaw, London, Madrid, Munich, Istanbul) +$465, +$381 on Warsaw Moderate; some large losses on European cities
Oceania (Wellington) +$280 on Wellington Small sample, positive

Singapore is the standout region: three of the top four markets by P/L are Singapore temperature events. This may reflect better forecast model calibration on tropical climates (smaller temperature variance, more predictable patterns) or simply higher available liquidity on Singapore markets.


Phase 6 - Timing and Execution

Hourly P/L (UTC) - best and worst hours:

Hour (UTC) Trades Win Rate P/L
17:00 535 60.7% +$1,434
08:00 601 65.6% +$1,096
05:00 622 56.1% +$980
02:00 499 56.9% +$608
11:00 511 59.4% +$890
18:00 534 43.0% -$264
20:00 569 47.8% +$171
07:00 498 53.9% -$128
10:00 575 49.1% -$18
00:00 760 44.3% +$357

The 00:00 UTC hour has the highest trade count (760) and a below-average win rate (44.3%). This is the bot's "opening" hour for the next day's markets - it's placing early bets when uncertainty is highest and the forecast premium hasn't fully converged. The 17:00 UTC hour (+$1,434) and 08:00 hour (+$1,095) are the peak earnings windows.

No obvious sleep window. Unlike SirMartingale's hard 23:00-02:00 UTC blackout, GGHFF trades in all 24 hours, with the lowest single hour being 21:00 UTC at only 438 trades. This is a 24/7 automated bot without human scheduling.

Day-of-week:

THURSDAY ANOMALYThursday is the only losing day of the week: -$226 P/L, -1.6% ROI on 1,449 trades. All other six days are positive, ranging from +6.4% (Sunday) to +14.4% (Saturday). This may be noise in a 23-day window (only 3-4 Thursdays), but it should be monitored.
Day Trades WR P/L ROI
Mon 1,494 51.7% +$1,555 +10.5%
Tue 1,937 58.0% +$2,209 +11.4%
Wed 1,447 61.7% +$1,278 +9.1%
Thu 1,449 49.8% -$226 -1.6%
Fri 1,265 55.5% +$1,627 +13.2%
Sat 2,065 58.9% +$2,654 +14.4%
Sun 1,848 56.7% +$1,092 +6.4%

Saturday is the highest-ROI day (+14.4%). Saturday weather bets cover Sunday temperatures when forecast models typically have higher confidence 1-day ahead.

Accumulation pattern within events: The Wellington April 19 trace in the CSV shows 30+ fills on the same condition (highest-temperature-in-wellington-on-april-19-2026-17c) spread across 47 minutes (00:13 UTC to 00:47 UTC). The bot opens a burst of small clips at $0.22-$0.24, totaling roughly $75 across 30 fills. This is DCA-style accumulation: the bot repeatedly trickles into the same market over time rather than hitting it with one large order. This minimizes market impact on thin CLOBs.


Phase 7 - Filter Experiments

Filter Trades WR Capital P/L ROI Delta
Unfiltered baseline 11,504 56.3% $109,765 +$10,188 +9.3% -
Price $0.30-$0.70 6,915 58.3% $68,625 +$4,373 +6.4% -$5,815
High-conviction dom 2x+ 1,501 52.0% $12,520 +$1,883 +15.0% -$8,305 (net)
Top category (Other = all) 11,504 56.3% $109,765 +$10,188 +9.3% $0
Exclude worst 4 hours (0,10,18,20) 9,353 58.7% $90,682 +$9,942 +11.0% -$246
Combined (price 30-70 + excl worst hr) 5,651 60.0% $56,761 +$4,510 +7.9% -$5,678

The filter analysis has two genuine findings:

  1. Excluding the four worst hours adds +1.7 ppt ROI (+$246 in absolute terms) while removing 18% of trades. This is the only filter with clean additive value - eliminating the 00:00, 10:00, 18:00, and 20:00 UTC hours lifts ROI from 9.3% to 11.0% while keeping $9,942 of $10,188 in profit. The tradeoff is fewer bets and slightly less total alpha.

  2. The $0.30-$0.70 price filter destroys more value than it saves. Applying it drops P/L from $10,188 to $4,373, a loss of $5,815. The reason: this filter removes the $0.20-$0.30 longshot band (the highest-ROI band at +17.6%) and the $0.70-$0.90 favorite band (also high-ROI at +14.4%). The "sweet spot" filter is misaligned with this strategy's actual edge distribution.

  3. The high-conviction (dom 2x+) filter returns +15.0% ROI on $12,520 deployed. This is an ROI improvement vs baseline, but it captures only $1,883 of $10,188 total profit. It's not additive - it's a subset that happens to have higher per-dollar efficiency at the cost of 89% of total capital utilization.

The combined filter at +7.9% ROI is actually worse than just the hour-exclusion filter alone at +11.0%, because the price filter drags down the ROI by removing the high-performing tail bands.


Phase 8 - Rolling Window Consistency

Metric Value
Rolling 7-day windows green 19 of 23 (82.6%)
Rolling 7-day P/L range +$428 to +$5,896
Rolling 15-day windows green 23 of 23 (100%)
Rolling 15-day P/L range +$1,067 to +$6,623
Weekly P/L: Week 16 (Apr 18-19) +$2,201 (partial week, strong start)
Weekly P/L: Week 17 (Apr 20-26) +$1,985 (moderate)
Weekly P/L: Week 18 (Apr 27 - May 3) +$1,113 (soft middle)
Weekly P/L: Week 19 (May 4-10) +$4,890 (strong close)

100% of all rolling 15-day windows close green. Four of 23 rolling 7-day windows dipped negative (during the Apr 27 - May 3 soft patch), confirming the strategy can string together a week of subpar performance. The recovery in week 19 was decisive: +$4,890 in a single week, nearly half the 23-day total.

The cumulative trajectory:

CUMULATIVE P/L TRAJECTORYApr 18: +$2,201 (fast start). Apr 26: +$4,186 (steady accumulation). May 3: +$5,298 (mid-window plateau). May 10: +$10,188 (final-week breakout driven by 58.8% WR in week 19).

The mid-window plateau (Apr 27 - May 3, +$1,113 in a full 7-day week) is the main drag on the record. The strategy's weekly variance is high relative to its mean: the range of weekly P/L is +$1,113 to +$4,890, a 4.4x spread between best and worst full weeks. This is inherent in a weather-betting strategy where a single bad-forecast week on high-volume city-events can significantly compress returns.


Phase 9 - P/L Decomposition

Component Value Interpretation
Realized total (resolved BUY) +$10,926 Gross settlement wins minus gross losses
Spread P/L (paired markets) +$862 Locked-in guaranteed profit from sub-$1.00 paired cost positions
Hedge tax (losing sides of paired markets) -$7,404 USDC spent on the losing side of 141 paired-market bets
Net resolved-BUY P/L (cash-flow view) +$10,188 After netting both sides

The hedge tax of $7,404 is the largest single drag in the decomposition. This is the price of the paired-bucket insurance strategy: for every market where the bot bought both adjacent temperature buckets, the losing side cost real money. The $862 spread P/L covers only 11.6% of that hedge cost; the remaining $6,542 of hedge tax must be covered by directional wins.

This decomposition reveals an important strategy tension: the spread-capture layer is a net drag, not a net benefit, at current paired-cost levels. The median paired cost of $0.90 implies $0.10 of locked-in profit per paired dollar - but that $0.10 must be weighed against the capital inefficiency of locking up two positions that mostly cancel each other. At the current 10.8% both-sides rate, the paired structure is a modest insurance feature rather than a core profit driver.

The primary alpha source is unambiguously directional settlement wins from correctly forecasting temperature buckets. 6,477 winning bets paying $1.00 minus the capital spent to acquire those winning positions is where the $10,188 comes from.


Phase 10 - Strategy Specification (summary; full spec in playbook)

One-sentence summary: A 24/7 automated bot that buys daily temperature bucket markets on Polymarket using a weather forecast model to identify systematically underpriced probability across a global city roster, then holds positions to binary settlement.

Edge sources: 1. Forecast model premium: Realized WR exceeds market-implied probability in every price band. This is the primary driver of all P/L. 2. Paired spread capture: 10.8% of markets have sub-$1.00 paired cost, locking in a guaranteed floor return. Net effect is modest positive after hedge tax.

What works: Singapore and Asia-Pacific markets (highest absolute P/L), the $0.20-$0.30 band (17.6% ROI), the $0.70-$0.90 band (13-14% ROI), hours 05:00-08:00 and 17:00 UTC, Saturdays and Fridays.

What drags: The $0.60-$0.70 band (5.3% ROI, largest capital allocation), hours 00:00/10:00/18:00/20:00, Thursdays, European city markets (several full-loss outcomes in Warsaw, Istanbul, London).

Replicator must-haves: Weather forecast API, per-bucket probability model, global city coverage, DCA-style orderbook fan-out execution, 24/7 uptime, settlement-hold discipline.

Replicator must-avoids: Do not apply $0.30-$0.70 price filter (destroys 57% of P/L). Do not attempt to replicate with manual trading - the bot processes 2.2 markets per event across 50+ city-dates simultaneously.

// 004 / Quantitative breakdown

Quantitative breakdown

Phase-by-phase statistical report. Methodology, distributions, per-bucket P/L.

Wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Window: 2026-04-18 → 2026-05-10 (23 active / 23 calendar days) Methodology: Cash-flow P/L = -buy_usdc + sell_usdc + remaining_share_payout. Resolved shares settle at $1 (win) / $0 (loss); open positions marked at last price.


Phase 1 - Trader Profile

Scale

MetricValue
Total trades13,004
BUY trades11,505
SELL trades1,499 (11.5% of all)
Unique markets1,301
Unique events583
Active calendar days23 of 23
Trades per active day565
BUY notional$110,555
SELL notional$52,306
Gross turnover$162,860

Trade-size distribution (USDC per fill)

MetricValue
median$4.40
mean$12.52
p95$41.60
p99$120.54
max$1,275.57
Top 5% share of capital38.1%

Inter-trade gap, same (market, outcome)

MetricValue
Median (s)596.0
Mean (s)6351.0
P10 (s)0.0
P90 (s)15837.5
% under 1s0.0%
% under 10s19.1%
% under 60s26.6%

Phase 2 & 3 - Both-Sides Participation, Dominance Curve

  • Both-sides rate: 10.84% (141 of 1,301 markets)
  • Median paired cost: $0.9072
  • Mean paired cost: $0.8995
  • Paired cost % under $1.00: 82.3%
  • Paired cost % under $0.97: 73.8%
  • Median 2nd-side hedge lag: 58224s

Dominance buckets

BucketMarketsDom WRMean PairedAvg Mkt P/L
1.0–1.5x1758.8%$0.8666-
1.5–2.0x922.2%$0.9207-
2.0–3.0x1963.2%$0.9104-
3.0x+9660.4%$0.9011-

Phase 4 - Entry-Price Analysis

BandBUY tradesResolvedWinsWRCapitalP/LROI
$0.00–$0.100000.0%$0+$00.00%
$0.10–$0.201000.0%$16-$1-6.25%
$0.20–$0.302,744084630.8%$11.3K+$1,984+17.58%
$0.30–$0.401,416052537.1%$8.3K+$418+5.01%
$0.40–$0.50915045649.8%$7.2K+$238+3.30%
$0.50–$0.601,60501,00462.6%$17.8K+$1,533+8.59%
$0.60–$0.702,77001,87467.7%$32.7K+$1,742+5.33%
$0.70–$0.801,46401,22983.9%$21.2K+$3,055+14.43%
$0.80–$0.90519048393.1%$9.7K+$1,295+13.36%
$0.90–$1.007006085.7%$1.5K-$75-4.89%

Phase 5 - Category & Vertical Breakdown

CategoryBUY tradesBUY $ResolvedWRP/LROI
Other11,505$162.9K11,50456.3%+$10,188+9.28%

Phase 6 - Timing & Execution

Net P/L by hour (UTC)

HourP/LWR
00:00+$35744.3%
01:00+$12254.0%
02:00+$60857.0%
03:00+$53565.0%
04:00+$19663.0%
05:00+$98056.1%
06:00+$50554.0%
07:00-$12853.9%
08:00+$1,09665.6%
09:00+$36155.1%
10:00-$1849.1%
11:00+$89059.4%
12:00+$59768.5%
13:00+$69267.5%
14:00+$22556.5%
15:00+$17252.9%
16:00+$19154.1%
17:00+$1,43460.7%
18:00-$26443.0%
19:00+$20061.9%
20:00+$17147.8%
21:00+$24454.5%
22:00+$17051.3%
23:00+$85362.2%

Phase 8 - Rolling Window Consistency

  • Rolling 7-day windows green: 23 of 23 (100.0%)
  • Rolling 7-day P/L range: +$428 → +$5,896
  • Rolling 15-day windows green: 23 of 23 (100.0%)
  • Rolling 15-day P/L range: +$1,067 → +$6,623

Weekly P/L

WeekSpanTradesWRP/LCumulative
W162026-04-18 → 2026-04-1962266.4%+$2,201+$2,201
W172026-04-20 → 2026-04-262,29155.0%+$1,985+$4,186
W182026-04-27 → 2026-05-033,88852.5%+$1,113+$5,298
W192026-05-04 → 2026-05-104,70358.8%+$4,890+$10,188

Phase 9 - P/L Decomposition

MetricValue
BUY USDC out-$110,555
SELL USDC in+$52,306
Theoretical spread P/L+$862
Hedge-tax outflow$7.4K
Net realized P/L+$10,926
Net ROI on BUY notional+9.88%

Phase 10 - Top Markets by Volume

MarketTradesVolumeResolvedP/L
US x Iran permanent peace deal by April 22, 2026?4$1.7K2+$109
Will the highest temperature in Singapore be 33°C on May 10?121$1.6K120+$996
Will the highest temperature in Singapore be 34°C or higher on April 23?40$1.2K39+$769
Will the highest temperature in Singapore be 33°C on April 22?78$1.1K77+$713
Will the highest temperature in Miami be between 86-87°F on April 29?52$1.0K29+$245
Will the highest temperature in Miami be between 84-85°F on April 29?71$1.0K47+$265
Will the highest temperature in Houston be 88°F or higher on April 29?49$82741+$246
Will the highest temperature in London be 17°C on April 29?43$79122+$198
Will the US confirm that aliens exist before 2027?1$7900+$0
Will the highest temperature in San Francisco be 66°F or higher on April 28?54$74635+$112

Top 10 winners by P/L

MarketVolumeNet P/L
Will the highest temperature in Singapore be 33°C on May 10?$1.6K+$996
Will the highest temperature in Singapore be 34°C or higher on April 23?$1.2K+$769
Will the highest temperature in Singapore be 33°C on April 22?$1.1K+$713
Will the highest temperature in Seoul be 21°C or higher on May 6?$203+$570
Will the highest temperature in Miami be between 86-87°F on April 30?$252+$530
Will the highest temperature in Warsaw be 24°C on May 6?$144+$465
Will the highest temperature in Warsaw be 13°C on April 20?$711+$381
Will the highest temperature in Chicago be 64°F or higher on May 10?$281+$339
Will the highest temperature in Los Angeles be 72°F or higher on May 11?$198+$311
Will the highest temperature in Wellington be 19°C on May 7?$91+$280

Top 10 losers by P/L

MarketVolumeNet P/L
Will the highest temperature in Beijing be 33°C on May 10?$299-$299
Will the highest temperature in Warsaw be 23°C on May 11?$296-$296
Will the highest temperature in Istanbul be 25°C or higher on May 11?$293-$293
Will the highest temperature in Chengdu be 33°C or higher on May 11?$291-$291
Will the highest temperature in New York City be between 62-63°F on May 8?$277-$277
Will the highest temperature in London be 20°C on May 9?$275-$275
Will the highest temperature in New York City be between 72-73°F on May 10?$272-$272
Will the highest temperature in Madrid be 16°C on May 10?$270-$270
Will the highest temperature in Munich be 19°C on May 8?$269-$269
Will the highest temperature in London be 16°C on April 29?$268-$268

Report generated 2026-05-13 10:36 UTC.

// 005 / Filter strategy

Filter strategy

Which standard filters move the needle on this trader, and which destroy the edge.

Wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Window: 2026-04-18 to 2026-05-10 Baseline: 11,504 resolved BUYs · 56.3% WR · $109,765 deployed · +$10,188 P/L · +9.28% ROI

Methodology: Each filter is applied to the resolved-BUY set. ROI is measured against BUY notional within the filter. Because the entire book is one category (weather temperature markets), the category filter is identity-equivalent to baseline. The standard PR&R battery maps imperfectly onto this strategy and requires careful interpretation at each step.

The headline result

One filter produces meaningful ROI lift. Two filters are destructive. Two are no-ops. One is structurally inapplicable.

The only filter that adds clean value: exclude the four worst-performing hours (00:00, 10:00, 18:00, 20:00 UTC). This lifts ROI from 9.28% to 10.96% while retaining $9,942 of $10,188 in profit - a modest but real improvement that comes without destroying any high-edge fills.

The most dangerous filter: the standard $0.30-$0.70 price sweet-spot rule. Applying it removes 4,589 trades including the entire $0.20-$0.30 band (+17.6% ROI) and the $0.70-$0.90 band (+13-14% ROI). P/L drops from $10,188 to $4,373 - a $5,815 hit. This is the single most important "don't do this" finding in the analysis.


Filter results table

Filter Trades WR Capital P/L ROI Delta vs baseline
Unfiltered baseline 11,504 56.3% $109,765 +$10,188 +9.28% -
Price $0.30-$0.70 6,915 58.3% $68,625 +$4,373 +6.37% -$5,815
High-conviction dom 2x+ 1,501 52.0% $12,520 +$1,883 +15.04% -$8,305 (absolute)
Top category (weather = all) 11,504 56.3% $109,765 +$10,188 +9.28% $0
Exclude worst 4 hours (0,10,18,20) 9,353 58.7% $90,682 +$9,942 +10.96% +$246 lift
Combined (price 30-70 + excl worst hr) 5,651 60.0% $56,761 +$4,510 +7.95% -$5,678

Filter-by-filter commentary

1. Price $0.30-$0.70 filter

DESTRUCTIVE

This filter removes 4,589 of 11,504 trades and cuts P/L by $5,815 (57% of total profit). The damage comes from two high-performing bands it eliminates:

The $0.20-$0.30 band (2,744 trades, $11,281 capital, +$1,984 P/L, +17.6% ROI) is the highest-ROI band in the entire book. The bot is buying temperature outcomes priced at 20-30 cents and winning 30.8% of them. At a 25% market-implied probability, that 5.8 percentage-point premium generates outsized returns per dollar deployed. The price filter strips this entire band out.

The $0.70-$0.90 bands ($30,869 combined capital, +$4,350 combined P/L) are also removed. At 83.9% and 93.1% WR respectively, these are the bot's highest win-rate bands and generate $4,350 of profit on $30,869 of capital (+14.1% combined ROI). The price filter eliminates all of them.

What remains after filtering is the $0.30-$0.70 "sweet spot" which has collectively mediocre ROI. The three worst ROI bands in the book are all within the $0.30-$0.70 range: $0.40-$0.50 at +3.3%, $0.30-$0.40 at +5.0%, and $0.60-$0.70 at +5.3%.

The lesson: the $0.30-$0.70 sweet-spot rule is calibrated for directional bettors whose forecasting edge concentrates in the coin-flip zone. GGHFF's edge is distributed across the entire probability spectrum because weather forecast models provide calibration improvements at all probability levels, not just near 50%. The filter actively discards the most efficiently captured alpha. Do not apply.

2. High-conviction dominance 2x+ filter

ROI LIFT, CAPITAL CONCENTRATION

Filtering to the 1,501 trades in both-sides markets where the dominant side held 2x+ capital yields +15.0% ROI on $12,520 deployed, vs +9.3% ROI on the full book. This is a genuine ROI improvement.

However, this filter captures only $1,883 of $10,188 total profit (18.5%) while requiring the bot to skip 87% of its trades. The improvement in per-dollar efficiency comes at the cost of leaving $8,305 of profit on the table.

This filter is useful as a diagnostic: the bot's highest-conviction paired positions (3x+ dominance, 96 markets at 60.4% dominant-side WR) are the cleanest expression of its forecasting edge in a paired-bet structure. If you wanted to run a smaller-capital, higher-ROI version of this strategy, focusing only on events where you have strong enough conviction to put 3x+ on one bucket over another would yield better per-dollar efficiency. But in absolute terms, you'd earn less.

Bottom line: do not apply this filter if maximizing absolute P/L. Consider it only if deploying limited capital where per-dollar ROI matters more than total take.

3. Category filter (top category = all weather)

NO-OP

100% of trades are in the "Other" weather category. The category filter is identity-equivalent to the baseline. This is a structural feature of a single-category trader, not a limitation of the filter. Applying it changes nothing.

4. Exclude worst 4 hours (00:00, 10:00, 18:00, 20:00 UTC)

MEANINGFUL LIFT

Removing the four worst-performing hourly windows lifts ROI from 9.28% to 10.96% (+1.68 ppt) while retaining $9,942 of $10,188 in profit. The excluded hours collectively hold 2,151 trades with a combined win rate below 48% (below the 56.3% baseline), driven by:

  • 00:00 UTC: 760 trades at 44.3% WR, +$357 P/L. The bot's opening hour for new markets - highest uncertainty, below-average win rate. Despite being slightly positive in aggregate, the per-dollar ROI is the worst across active hours.
  • 10:00 UTC: 575 trades at 49.1% WR, -$18 P/L. The only genuinely negative-P/L active hour. Something about the 10:00 UTC window (late Asian morning, early European midday) coincides with below-forecast-accuracy calls.
  • 18:00 UTC: 534 trades at 43.0% WR, -$264 P/L. The worst single hour in absolute dollar terms. 43.0% WR significantly below the 56.3% baseline.
  • 20:00 UTC: 569 trades at 47.8% WR, +$171 P/L. Marginally positive but below baseline WR; drag on per-dollar efficiency.

The practical implication for a replicator: if you're running this bot with a cron scheduler, suppress order entry during these four hourly windows. It's a simple scheduling rule that adds 1.7 ppt of ROI without any model changes.

Important caveat: the 00:00 UTC exclusion is complex because the bot uses that hour to accumulate positions on next-day events when forecast uncertainty is highest. Excluding 00:00 means skipping early accumulation on some events that later become strong winners. The net effect is positive in the data (+$246 total) but this could change if the forecast model improves its accuracy at longer horizons.

5. Combined filter (price $0.30-$0.70 + exclude worst hours)

DESTRUCTIVE

The combined filter generates +7.95% ROI on $56,761 capital, retaining $4,510 of profit. This is worse than the unfiltered baseline in both absolute and relative terms. The combined filter is dominated by the destructive price component: stacking it on top of the useful hour-exclusion component doesn't rescue it. The hour exclusion alone is the only component worth applying.


What filters would actually help (but aren't computable from this data)

The standard battery misses the two dimensions where filtering would genuinely improve performance:

Hypothetical filter Why it helps Data required
Forecast confidence threshold Skip markets where the bot's model assigns <55% probability to any single bucket - these are the high-uncertainty events that drive the Thursday losses and the 00:00 UTC drag Internal model confidence score per market
City-level performance filter Drop European city markets (Warsaw, Istanbul, London, Munich) which show the worst loss markets in the book Resolve P/L by city slug - partially computable from market slug parsing
Event-within-day timing filter Skip markets that open >24 hours before their resolution date - the 16.2-hour median second-side lag suggests early positions underperform vs. positions placed within 6 hours of resolution Per-trade seconds-to-expiry at entry time
Adjacent-bucket saturation check Within a given event, if the bot has already bought 3+ buckets, skip additional buckets - concentration beyond 3 appears to dilute edge Per-event trade count at entry time

The city-level filter is the most actionable. Parsing market slugs reveals that Beijing, Warsaw, Istanbul, Munich, and London each appear in the worst-markets list with 0% WR and full-loss outcomes. If those cities are systematically harder to forecast (less stable forecast models, more volatile spring temperatures in mid-latitudes), a city exclusion list could add 1-3% ROI without touching the high-performing Asia-Pacific and North American markets.


Bottom line for replication

Three concrete recommendations:

  1. DO NOT apply the $0.30-$0.70 price filter. It destroys more than half of total profit by removing the two highest-ROI price zones. The edge in this strategy is distributed across the full probability spectrum.

  2. DO exclude the 00:00, 10:00, 18:00, and 20:00 UTC hours. Simple scheduler rule, adds +1.7 ppt ROI, minimal P/L cost.

  3. Consider building a city-exclusion list for mid-latitude European cities (Warsaw, Istanbul, Munich) based on historical forecast accuracy by geography. This is the most promising unrealized filter improvement available in the strategy.

The rest of the standard filter battery is either inapplicable (category) or destructive (price sweet-spot, combined stack). The base strategy already captures most of its available edge. The marginal gains are in scheduling optimization and geographic model calibration, not in standard bet-selection filters.

// 006 / Replication playbook

Replication playbook

Where the edge is portable, and where it isn't.

Source wallet: 0x044f334595a7fd42c143e11c8ec47f23c8d1d1f1 Strategy: Global daily temperature distribution forecasting with probabilistic bucket betting Reference book: $109,765 BUY notional deployed over 23 days → +$10,188 net P/L → +9.28% ROI


One-paragraph operator brief

Build a bot that queries a weather forecast API for daily high temperature probability distributions across a roster of 30-50 global cities, compares those probabilities against live Polymarket CLOB prices on "Will the highest temperature in [City] be [X] on [Date]?" markets, and buys any bucket where the forecast probability exceeds the market-implied probability by a sufficient margin. Hold positions to settlement (binary $1/$0 payout). Optionally buy paired adjacent buckets at combined cost below $1.00 to capture a guaranteed spread. Run 24/7. Do not apply price-band filters. Expected ROI: 8-12% per month on deployed capital with modest daily variance, one in seven weeks potentially soft.


1. Market selection

Rule Value
Asset class Polymarket prediction markets
Market category Weather temperature daily markets only
Slug pattern highest-temperature-in-*-on-*
Market format Binary YES/NO: "Will the highest temperature in [City] be [X°C or X°F] on [Date]?"
City roster See below - global, 30+ cities
Eligibility Market resolves within the next 48 hours AND Polymarket CLOB has at least 50 shares of liquidity available
Excluded Any non-temperature market (crypto, sports, politics)

Recommended city roster (by historical profitability evidence):

Priority 1 (confirmed profitable) Priority 2 (moderate) Priority 3 (monitor)
Singapore Miami Beijing
Seoul Houston Warsaw
Wellington Los Angeles Istanbul
Sao Paulo San Francisco Munich
Jakarta New York City Madrid
Cape Town Chicago London
- Atlanta -
- Toronto -
- Seattle -
- Moscow -
- Ankara -
- Shenzhen -

Singapore, Seoul, and Wellington delivered three of the top five markets by P/L. The mid-latitude European cities (Priority 3) produced the worst-market list and should be monitored for systematic forecast model underperformance.

Events per day: Expect 40-80 active city-date events on a typical day, each with 4-8 bucket markets. The bot will evaluate 200-500 individual markets per day.


2. Entry logic

def should_enter(city, date, bucket_market, forecast_model):
    # Slug check
    if "highest-temperature" not in bucket_market.slug:
        return None

    # Time check -- market must resolve within 48 hours
    hours_to_expiry = hours_until_close(bucket_market)
    if hours_to_expiry > 48 or hours_to_expiry < 1:
        return None

    # Hour filter -- skip the four underperforming UTC hours
    if utc_hour(now()) in (0, 10, 18, 20):
        return None

    # Liquidity check
    if bucket_market.available_ask_shares < 50:
        return None

    # Compute forecast edge
    forecast_prob = forecast_model.get_bucket_prob(city, date, bucket_market.threshold)
    clob_prob = bucket_market.ask_price  # best ASK = implied probability

    edge = forecast_prob - clob_prob

    # Entry threshold
    if edge < 0.05:
        return None  # less than 5 ppt edge -- not worth the slippage

    return {"outcome": "Yes", "edge": edge, "clob_prob": clob_prob}
Parameter Value Rationale
Minimum edge threshold 5 percentage points (forecast probability minus CLOB probability) Below 5 ppt the edge is within noise/slippage range
Maximum hours to expiry 48 hours Beyond 48h, forecast models have too much uncertainty; don't bet far in advance
Minimum hours to expiry 1 hour Under 1h the market may already be near-certain and prices stale
Entry price No band restriction Buy wherever the CLOB offers value: the reference book earns positive ROI from $0.21 to $0.90
Hour exclusion Skip 00:00, 10:00, 18:00, 20:00 UTC These four hours underperform the baseline by 5-15 ppt WR; filter removes -$264 drag
Market freshness CLOB has been updated within 15 minutes Stale quotes may not reflect current forecast

Critical: Do NOT apply a $0.30-$0.70 price filter. The reference book earns +17.6% ROI on sub-$0.30 entries and +14.4% on $0.70-$0.80 entries. Restricting to the "sweet spot" destroys 57% of total profit. Entry price should be whatever the forecast-vs-CLOB gap justifies.


3. Exit logic (hold to settlement is the default)

GGHFF exits actively in only 11.5% of cases. Two specific exit patterns are visible in the CSV:

Pattern 1: Exit near-certain positions before settlement. When a position reaches $0.98-$0.999 implied probability, the bot sells into the thick bid at near-certainty prices. Example from CSV: Singapore 32C "No" position sold at $0.999 for $196.29, recycling capital 2-6 hours before resolution. This is capital efficiency, not edge-capture.

Pattern 2: Exit incorrectly-placed bets. When the market moves decisively against the bot's call (e.g. a bucket the bot bought at $0.30 drops to $0.05 as forecast updates come in), the bot may exit to recover remaining capital. This requires real-time forecast monitoring post-entry.

def manage_position(position, current_forecast_prob, clob_bid_price):
    # Exit 1: Near-certain, recycle capital
    if clob_bid_price > 0.97:
        sell_position(position, price=clob_bid_price)
        return

    # Exit 2: Forecast-reversed exit
    # If our model now thinks the probability is below 50% of what we paid
    if current_forecast_prob < position.entry_price * 0.5:
        sell_position(position, price=clob_bid_price)
        return

    # Default: Hold to settlement
    pass
Exit rule Trigger Rationale
Near-certainty exit CLOB bid > $0.97 Recycle capital ~4-6 hours early; forgo last $0.03 to deploy elsewhere
Forecast-reversal exit New forecast probability < 50% of entry price The information basis for the bet has changed; cut the loss
Default Hold to $1/$0 settlement 88.5% of positions in the reference book; settlement is the primary P/L mechanism

4. Sizing model

The reference book uses DCA-style fan-out: many small fills (median $4.40) across the orderbook depth, rather than one large order. This minimizes market impact on thin CLOB books.

def compute_clip_size(edge, clob_prob, event_budget, orderbook_depth):
    # Base clip: proportional to edge strength
    edge_scaler = min(edge / 0.05, 3.0)  # cap at 3x for very high edge

    # Base clip in USDC
    base = event_budget * 0.02  # 2% of event budget per clip

    # Scale by edge (up to 3x for high-conviction calls)
    clip = base * edge_scaler

    # Cap at orderbook depth / 5 to avoid moving the market
    clip = min(clip, orderbook_depth / 5)

    return max(1.0, clip)  # minimum $1 clip

Recommended sizing schedule:

Bankroll Event budget Per-clip range Max single clip Daily deployed estimate
$5,000 $100/event $2-$10 $50 ~$500
$10,000 $200/event $4-$20 $100 ~$1,000
$25,000 $500/event $10-$50 $250 ~$2,500
$50,000 $1,000/event $20-$100 $500 ~$5,000

At $10,000 bankroll matching the reference scale, expect ~$1,000 of capital deployed per day across 30-50 events. Monthly deployed capital: ~$21,000-$25,000. At the reference +9.3% ROI, monthly net P/L would be approximately $1,950-$2,325.

The strategy's capacity is large. Weather markets attract substantial liquidity and new events open daily. There is no evidence of market-impact constraints in the reference book at the $10K-$25K scale. Larger operators may need to fragment across multiple wallets above $100K deployed.


5. Paired-bucket structure (the spread overlay)

In 10.8% of markets (141 of 1,301), the bot buys both adjacent temperature buckets within the same event. This is the paired spread-capture mechanism:

def check_for_pair(event, winning_outcome_bucket, forecast_probs):
    # For each adjacent bucket in the event:
    for adj_bucket in event.adjacent_buckets(winning_outcome_bucket):
        adj_clob_prob = adj_bucket.ask_price
        combined_cost = winning_outcome_bucket.ask_price + adj_clob_prob

        # If combined cost is below $1.00, lock in a spread
        if combined_cost < 0.97:
            return adj_bucket  # buy the adjacent bucket too

    return None
Paired-buy rule Value Rationale
Max combined cost for a pair $0.97 Locks in $0.03 minimum guaranteed profit per dollar of paired notional
Reference median paired cost $0.91 Median across 141 markets in the reference book
Reference pct sub-$0.97 73.8% Most pairs in the book qualify for the tight cost threshold
Hedge tax awareness $7,404 total The losing side of a pair costs real money - only pair when the combined cost creates genuine spread profit

When NOT to pair: if both buckets are strong candidates individually (edge > 10 ppt on both), buying both is redundant - only one can win. Pairing is most valuable when the forecast is genuinely uncertain between two adjacent outcomes (e.g. model gives 40% chance to 33C and 38% chance to 34C for Singapore). In that scenario, buying both at a combined cost of $0.90 guarantees profit regardless of which bucket wins.


6. Hour scheduling

Hours (UTC) Action Reason
01:00-09:00 UTC Full activity Peak WR hours (56-65%); 05:00, 08:00 are top-performing windows
11:00-17:00 UTC Full activity Strong hours 11:00 (+$890), 17:00 (+$1,434 - the single best hour)
19:00, 21:00-23:00 UTC Moderate activity Positive but below-average; acceptable to run
00:00, 10:00, 18:00, 20:00 UTC Skip or reduce to 50% Four worst-performing hours: combined WR under 47%, negative to flat P/L

The 17:00 UTC hour is the single best hour (+$1,434 P/L on 535 trades, 60.7% WR). This corresponds to noon Eastern US, when NOAA/NWS issues afternoon forecast updates that resolve much of the day's temperature uncertainty. The bot's edge peaks when fresh model output is available but the CLOB hasn't fully repriced yet.

This is a 24/7 bot (unlike SirMartingale's sleep schedule). Weather markets resolve on daily cadences across all time zones. Singapore resolves on Asia time, Miami on Eastern US time, Wellington on NZ time. A scheduler that skips four hourly windows captures the full global opportunity set while avoiding the identified low-edge windows.


7. Forecast model specification

The core competitive advantage is the weather forecast model. Without it, the strategy has no edge. The components:

Required data inputs: - Numerical weather prediction (NWP) probabilistic temperature forecasts for each city - Forecast update cadence: 6-hourly (ECMWF, GFS, ICON all update 4x/day) - Ensemble spread to compute bucket probabilities

Probability computation:

def compute_bucket_probability(city, target_date, bucket_lower, bucket_upper, forecast_ensemble):
    """
    Given a forecast ensemble (e.g. ECMWF 51-member ensemble),
    compute the probability that the daily high temperature falls
    within [bucket_lower, bucket_upper].
    """
    # Count ensemble members within the bucket
    members_in_bucket = sum(
        1 for member_temp in forecast_ensemble
        if bucket_lower <= member_temp < bucket_upper
    )
    return members_in_bucket / len(forecast_ensemble)  # fraction of members

Recommended forecast sources (in priority order): 1. ECMWF ENS (51-member ensemble): Best global accuracy, updates 00:00 and 12:00 UTC. Requires API access ($500-$2,000/month for commercial tier). 2. NOAA GFS-EPS: Free via NOMADS server. Good for North American cities. Updates 6-hourly. 3. Open-Meteo API: Free tier available, provides ensemble forecast data for most global cities. Lower accuracy than ECMWF but sufficient for smaller-edge markets. 4. Tomorrow.io / OpenWeatherMap commercial: Cleaned probabilistic output, easy API integration. $200-$500/month for high call volumes.

City-level forecast quality note: Tropical cities (Singapore, Jakarta, Sao Paulo) have lower temperature variance and higher forecast accuracy 24-48 hours out. Mid-latitude European cities (Warsaw, London, Munich) have higher variance and more forecast uncertainty. Calibrate your edge threshold higher for high-variance cities.


8. Bankroll math

Reference book monthly extrapolation:

Observed 23-day period:
  Capital deployed (BUY notional):  $109,765
  Net P/L:                          +$10,188
  ROI on deployed:                  +9.28%

Monthly estimate (30 days):
  Deployed:     ~$143,300 (extrapolated)
  Net P/L:      ~$13,300
  ROI:          ~9-10% on deployed

Working capital required:
  Peak instantaneous exposure:      ~$10,000-15,000
  (positions settle within 24-48 hours; capital recycles)

On a $10,000 standby bankroll:
  Monthly deployed: ~$143K (capital recycles ~14x per month)
  Monthly P/L: ~+$13,300
  Monthly ROI on standby: ~+133% on the bankroll balance

The key insight is the capital recycling rate: positions settle in 24-48 hours, so $10,000 of working capital can be deployed $143,000 cumulatively over 30 days. The +9% ROI is on each deployment cycle, not on the standby balance. This makes the actual monthly return on bankroll very high at small scales.

At larger scales, the binding constraint becomes total Polymarket liquidity in weather markets, not working capital.


9. Risk profile

Risk Severity Mitigation
Single-market total loss $5-$1,276 (clip-bounded) Every position is bounded by clip size; worst single observed loss was $299 (Beijing 33C)
Weekly drawdown Up to $1,113 (reference week 18) Strategy has one soft week in four in the reference period
Forecast model failure (systematic) High If the NWP model misbehaves (major storm system, unusual airmass) for a week, multiple markets can go against the model simultaneously
European city underperformance Medium Warsaw, Istanbul, London, Munich appear in the worst-market list; consider reducing exposure there
Market competition Medium As more forecast bots enter weather markets, the CLOB will price opportunities faster, compressing the 5 ppt edge threshold
Settlement ambiguity Low Temperature markets use official weather station data; resolved unambiguously by Polymarket
Thursday structural drag Low (possibly noise) -1.6% ROI on Thursdays vs +9-14% other days; only 3-4 Thursdays in sample
Capital lock during multi-day events Low Most markets are 24h; 48h markets tie up capital slightly longer but manageable

Tail scenario: A week of systematic forecast failure (e.g. bot consistently overestimates high temperatures during a cold snap) could produce -$500 to -$1,500 weekly drawdown. At a $10,000 working capital base, this is a -5% to -15% drawdown week, recoverable in 1-2 following weeks at normal performance.

Stop rule: If any rolling 7-day window shows P/L worse than -$1,000 (approximately -10% of $10K working capital), pause and audit the forecast model for systematic bias before resuming.


10. Diagnostic checklist - is the bot still working?

Run weekly:

Check Healthy range Action if outside
Markets entered per day 40-120 If <40: edge threshold too conservative, loosen to 3 ppt. If >120: threshold too loose, tighten to 7 ppt
Overall WR (resolved BUYs) 52-62% If <52%: forecast model is underperforming; audit by city and band. If >62%: unusual outperformance, verify calculation
WR by price band (all bands positive) Each band WR > implied probability If any band WR consistently below implied: model is miscalibrated in that range
ROI by city (top cities positive) Singapore, Seoul, Miami, Houston positive If previously positive cities turn negative: investigate whether model accuracy has degraded for that region
Paired market combined cost Median below $0.98 If rising above $0.98: the spread capture is being competed away; reduce pairing
Capital recycling speed Positions settle within 36h average If average settlement time exceeds 48h: check for unresolved markets that may be stuck
Thursday vs other days Thursday not the sole negative day If multiple days turn negative: systematic model issue, not day-of-week noise
Hour-exclusion windows 00:00/10:00/18:00/20:00 excluded Verify scheduler is correctly implementing the exclusion windows

What this playbook deliberately does NOT include

No $0.30-$0.70 price filter. This is the single most important rule to reject. The reference book earns +17.6% ROI in the $0.20-$0.30 band and +14.4% in the $0.70-$0.80 band. Filtering them out destroys more than half of total profit. The sweet-spot rule is designed for bettors whose edge concentrates near 50% probability; weather forecasting generates calibration improvements at every probability level.

No manual trading. The strategy requires simultaneously evaluating 200-500 markets per day across 30+ cities. A human cannot do this at the speed and volume required. The bot's DCA fan-out (15-30 fills per event in seconds) is only achievable with automated execution.

No crypto or sports crossover. The edge source is a weather forecast model. Applying this wallet's sizing or timing patterns to other market categories would inherit none of the weather calibration advantage.

No fixed daily schedule. Unlike strategies with structural time-of-day edge, weather markets resolve on each city's local time. Singapore markets resolve in Asia morning UTC; Miami markets resolve late afternoon UTC. The bot must be available across time zones, with only the four specific UTC hours excluded.

No aggressive SELL discipline. Only 11.5% of positions are exited before settlement. The strategy holds to resolution as its default. Importing an aggressive-exit regime from a latency-arb strategy like SirMartingale would turn this into a different strategy entirely and likely destroy the settlement-based P/L.

No scaling beyond model accuracy. Adding more capital only makes sense if the forecast model maintains its calibration premium at higher volumes. If you scale to $100K+ deployed per day, the CLOB prices on weather markets will start to reflect your own orders, compressing the edge. Fragment wallets before hitting this limit.


TL;DR - implementable in ~200 lines of Python

# Pseudocode outline -- real implementation requires forecast API + Polymarket CLOB WebSocket

async def run_weather_bot(bankroll=10000):
    forecast_api = connect_forecast_api()   # ECMWF, GFS, or Open-Meteo
    clob = connect_polymarket_clob_ws()

    while True:
        # Skip underperforming hours
        if utc_hour(now()) in (0, 10, 18, 20):
            await asyncio.sleep(300)
            continue

        # Fetch all active temperature markets resolving within 48h
        markets = [m for m in clob.active_markets()
                   if "highest-temperature" in m.slug
                   and 1 < hours_until_close(m) < 48]

        for market in markets:
            city = parse_city(market.slug)
            target_date = parse_date(market.slug)
            bucket = parse_bucket(market.slug)

            # Get fresh forecast probability
            forecast_prob = forecast_api.bucket_probability(city, target_date, bucket)
            clob_prob = market.best_ask_price()

            edge = forecast_prob - clob_prob
            if edge < 0.05:
                continue  # insufficient edge

            # Compute clip size
            event_budget = bankroll * 0.02  # 2% of bankroll per event
            clip = min(event_budget * (edge / 0.05), event_budget * 0.3)

            # DCA fan-out across orderbook depth
            await walk_book_buy(market, "Yes", max_usdc=clip)

            # Check for adjacent-bucket pair opportunity
            adj_bucket = find_adjacent_bucket(market, markets)
            if adj_bucket and clob_prob + adj_bucket.best_ask_price() < 0.97:
                await walk_book_buy(adj_bucket, "No", max_usdc=clip * 0.5)

        # Monitor existing positions for exit triggers
        for position in open_positions():
            bid = position.market.best_bid_price()
            if bid > 0.97:
                await sell_position(position, price=bid)
                continue
            new_forecast = forecast_api.bucket_probability(
                position.city, position.date, position.bucket)
            if new_forecast < position.entry_price * 0.5:
                await sell_position(position, price=bid)

        await asyncio.sleep(300)  # check every 5 minutes

# Run indefinitely, 24/7, skipping 4 UTC hours
# Expect ~9-10% ROI per month on deployed capital at $10K working balance

The strategy's competitive moat is entirely in the forecast model quality. A replicator using free GFS data will get a smaller calibration premium than one using ECMWF ensembles. Start with Open-Meteo (free), benchmark against the reference book's 5.8 ppt premium in the $0.20-$0.30 band, and upgrade the data source if you can't achieve at least 3 ppt premium there after 30 days of live trading.

Join Discord