🌎 WEATHER GLOBEevery city the weather book trades, and the 40 Polymarket prices we do not
EASY WAY OUT!
specialist-follow · live capital
◈ DATA STALE
bot live
70%
— · updating…
build —
🇳🇱 Poly Copy
· maker-only weather copy · executes from AMS3 (this box is geoblocked) · money lives in a DEPOSIT wallet Polymarket's UI does not show ·
loading…
🐋 Whale Watch — the weather traders we CANNOT see
· these wallets hide their trade tape · but the Climate leaderboard metric is projected_pnl, which is CATEGORY-SPECIFIC and includes OPEN positions — so their weather P&L ticks live ·
◎ Position monitor
· decided positions are COLLAPSED by default (measured 07-29: 46 of 69 open rows were already won or dead) · sorted by URGENCY = uncertainty × size × imminence · 🌡 is the live observed temperature from the free NWS feed, and "flips if" is how far reality must move to change the outcome — neither is available in Kalshi's own portfolio tab
🗓 Daily Report
· frozen at 09:05 UTC once a day is complete — a frozen day NEVER moves again · today is live and will change ·
◈ Account value — total equity (cash + open marks)
Candles are OHLC of our own account value bucketed by the selected window (open = first sample in the bucket, high/low = extremes, close = last) — real, not synthetic. Purple bars are actual order flow ($ staked per bucket from the order ledger), so a move with no bars was the BOOK repricing, not us trading. The faint red trace is drawdown from the running peak.
◎ Performance gauges
↑ Cumulative banked P&L — realized, per settled trade
▮ Per-trade P&L distribution
⬡ Wallets — ranked by signal P&L · signal p&l judges the forecast (every market counted in full) · pro-rata attributes OUR dollars and sums to the book · they differ on the 12.3% of markets more than one wallet ordered · best to worst ·
◱ Niche win/loss record
▤ Paper cohort — new wallets on trial · ZERO capital · scored exactly like real money (ask we logged, fees in, $1/contract) · a wallet we never observe can never earn its way in ·
◔ Wallet lifecycle — promote / hold / bench · sample-based, patience-biased · size is the risk control until 30 copies · hard stop is the only fast trigger
▦ Settled-day P&L heatmap — banked $ per wallet per day
⧗ Settling — determined, awaiting payout
◈ Open positions — live, soonest settlement first
* = payout time measured from our own
settlement history (daily weather pays 7-8am ET the morning after); no star = Kalshi's stated
expiry, which for daily weather is a later admin deadline.
✓ Recently settled (banked)
⟟ Execution telemetry
⚙ Execution quality
⌁ Strategy config
⇄ Following
⊘ Skip analysis — why we didn't trade · deliberate filters vs genuine misses (deduped by market)
⚏ Engine scorecard — copy-bot vs Poly bridge
◎ Calibration — win-rate vs price paid
◷ P&L by hour of day (ET)
⧨ Signal funnel — seen → won
⬡ Live vs backtest edge
⟋ Slippage vs specialist (over fills)
▽ Underwater drawdown
⚔ Kalshi vs Polymarket — head to head · exact matches trade live · inexact matches paper-tested
🧠 Learner — self-improving loop
⇄ Poly → Kalshi bridge Arm B · PAPER
▦ Rewards — Kalshi liquidity provision
♥ System health
◎ Price bands — favourites or longshots?
· by the price WE paid · a high win rate at 90c is not skill
◷ Clock — when each niche makes money
· ET blocks
⚗ Forward test
· pre-registered · scored only on data AFTER registration
⇄ What changed since yesterday
$ Cost ledger
· banked P&L is already NET of these — this is what execution costs
⑂ Signal funnel — where each wallet leaks
· different causes need different fixes
▷ Fired today
⚵ Leaks — what to cut
· a leak needs to be BIG, PERSISTENT, and decidable · first-half vs second-half shows
whether it is getting worse or reverting
⚙ Jobs
· last-run is read from what each job WRITES, not from cron saying it fired
◉ Data feeds
· written = the process is alive · moved = it is actually producing ·
a feed can be written every cycle and still be frozen
💵 Cash moved — SETTLE-day clock · the calendar below buckets by ET ENTRY day (“how did the trades I placed that day do”) · this buckets by ET SETTLE day (“how much money actually moved”) · a weather daily entered on the 15th settles the morning of the 16th, so the two clocks disagree by design — on 2026-09-16 the entry tile read −$2.14 while −$154.06 left the account
▤ Trading calendar — P&L by day traded · settled + still-open, attributed to the ET day the trade was entered · click a day for detail
🌡 Heat Risk — running max vs strike
· KXHIGH* markets settle on the DAY'S MAXIMUM, not the current temp · source api.weather.gov ·
head = strike − the day's running max. Negative means the max has ALREADY passed the strike —
the NO side is decided even if the market has not repriced. DANGER = within 2°F with heating still to come
(15:00–23:00Z). Current temp is deliberately NOT the headline: a position can be dead while the thermometer reads low.
🌡 WX Confirm — our own weather opinion, as a second check on every copy · ADVISORY ONLY — it watches and scores, it does not block a single trade · the switch stays off until the trades it wants to block are PROVEN to lose money
🧭 What we did, in plain English · three versions failed before one worked · the failures are the useful part
🎯 Can it be trusted yet? · the gate only opens on FORWARD results — signals scored live, then graded when they settle
📡 Live scoring · every weather copy the bot makes, scored within 5 minutes · "thermometer" = anchored on the real station reading, the strong case
🧠 What the bot sees right now · the board is in the bot’s real BUY ORDER · it ranks by model probability, not by edge — measured on 219 settled positions, ranking by edge put the top half at +1.2pp and the bottom at +4.6pp (inverted), while ranking by probability put them at +3.5pp and +0.6pp · edge_yes decides who qualifies, probability decides who gets bought first when budget binds
⚾ HR Bot — our own home-run model · SEPARATE BOOK from the copy bot · every number here comes from hr_ledger.py, which reads the VENUE-reported fee · the copy bot’s recon_settlements flags these rows ours=0 and misreports them (it showed −$15.76 for a day this ledger scores at +$72.41), so the two books are never merged
🗓 Per game-day · banked only — open positions are never counted as profit
◎ Model calibration · the number that decides whether the edge is real · model_p is what the bot thought the chance was, actual is what happened · bucketed, never pooled — one blended figure hides a broken band
▤ Recent bets
🌡️ WX3 — status & feed health · the bot nowcasts the Kalshi Weather Index and buys near-certain legs in the last 20 min · feed staleness is the thing that breaks it: on 2026-09-16 it priced 47–62 min old observations as if they were 19 min old and went 5-for-10 against a model claiming 97.8%
🧭 Record by MODEL VERSION · eras are never pooled — a trade placed by a superseded model is not evidence about the one running now · only the CURRENT era counts
🎯 Our index vs Kalshi's published index · Kalshi publishes the settling index itself, free, 1-min cadence · this is our error against truth · measured 2026-09-16 at seven live decisions we ran 1.5–3.3°F LOW, always low, never high — larger than the drift it sits next to
◎ Calibration · model_p is what the bot claimed, actual is what happened · bucketed, never pooled — a blended figure hides a broken band
🧠 What it sees right now · every cycle, all cities, including why it did NOT trade
◎ Open trades · money currently at risk · an open position is NOT a loss — charging its cost with no payout is what drove the daily bot to a phantom −$35.03 against a −$50 kill with zero markets settled · a mark is shown ONLY when both sides of the book quote; a closed book marks to cost, so those read “awaiting settlement”
▤ Recent fills · settled only · open positions are never counted as profit
🌙 Night Owl — night-favourites sleeve · buys 85-97c favourites in overnight hourly temp markets · P&L is SETTLEMENT truth built from FILLS (this sleeve shares tickers with the copy bot, so a per-market settlement row cannot separate them) · open cost is never counted as profit
◑ Per night · a night runs 11pm-7am ET; hours after midnight belong to the previous evening · kill rule fires if any single night loses more than $8
◈ Positions · settled first, then still-pending · entry price is what we PAID per contract
Hourly temp markets pay 81 minutes after they close \u2014 i.e. at :20 past the following hour (measured over 10 settlements, zero variance). Because that lag is longer than an hour, the previous hour is always still pending when a new one opens.
📉 Recent Movers
· what actually moved the balance ·
⇄ Markets — does PAPER agree with LIVE? · both legs measured by ONE code path (same price source, fee model, settlement, estimator) · FIXED SIZE per market, never volume-weighted · a verdict needs 10+ settled on BOTH legs ·
▤ Promotion queue · clears every gate: 25+ settled · $/market>0 · t≥2 · positive in BOTH halves · no single event >50% of P&L
▦ Paper cohort — full record · zero capital · scored on the same settlement formula as real money · click a row for detail ·
◷ Paper — decay watch · last-10 vs last-25 vs lifetime $/market · a falling line is an edge dying, not variance
🌡️ Live weather — the number that settles
· running day extreme at the exact station each market names · updates every ~10s ·
— · —
Every Poly weather market settles on a daily maximum (or minimum) at one named station —
NYC on LaGuardia, London on City Airport, Chicago on O'Hare, Hong Kong on the
Observatory. A running extreme only moves one way, so once it passes a bucket that bucket
is finished — arithmetic, not a forecast.
Solid = real observation. Dashed = model fallback (not what settles). Faded = last report
over 2h ago. METAR publishes roughly hourly plus specials, so this is as fast as the
settlement source physically exists — the cadence per station is shown on each card.
Bucket crossings — the moment the book reprices
waiting for the first live crossing…
Our positions vs the feed
· read-only · nothing here places or cancels anything
BTC TAIL // QUANT TERMINAL3¢ both tails · post-only maker · 15-min binaries
· refreshes every 5 minopen full ↗