Weather Lock-In Desk — Data Inventory
March 27, 2026 — compiled from source code and spec panel review
What This Document Is
A complete inventory of every data source the Weather Lock-In desk uses, how to collect it, what fields matter, and why each source creates edge. This desk trades temperature bracket and over/under contracts on Kalshi (20 US cities) and Polymarket (21 global cities) using real-time drop detection from observed peak temperatures.
The Business Model
Once the actual temperature drops 4F+ from its intra-day peak (after the expected peak hour), there's a 87-92% chance the daily high is locked in. At that point, the settlement value is effectively known before the market prices it in. We buy bracket contracts ("between 78-79F") and over/under contracts ("under 79F") while they're still cheap. The AI classifies smaller 2F drops to boost the base rate from ~75% to 85-90% using weather conditions context.
How Weather Is Different
Unlike other desks, weather has a known settlement time (end of day) and a physical constraint (temperature physics). Once the sun angle drops and conditions confirm cooling, recovery is nearly impossible. This makes the edge deterministic rather than probabilistic — closer to arbitrage than prediction.
A. Real-Time Observations
1. NWS Station Observations
- What: Current temperature, dewpoint, humidity, wind speed/direction, pressure, visibility, cloud cover, and weather conditions from 20 full stations + 4 snow-only stations
- Source: NWS API —
https://api.weather.gov/stations/{stationId}/observations/latest
- No auth required, no rate limit published (respect 60s polling)
- User-Agent header required (set to EdgeClaw contact)
- What to pull:
temperature.value (Celsius, convert to F)
dewpoint.value
relativeHumidity.value
windSpeed.value, windDirection.value
barometricPressure.value
visibility.value
textDescription (weather conditions string)
timestamp (observation time)
- Collection frequency: Every 60 seconds
- Why it matters: This IS the edge. Real-time temp observations feed the daily tracker (running high, running low) and trigger drop detection. The 4F drop from peak is calculated directly from this data.
- Full stations (20): KNYC, KMDW, KMIA, KLAX, KDEN, KPHL, KPHX, KMSP, KDFW, KMSY, KAUS, KSFO, KHOU, KSAT, KLAS, KSEA, KOKC, KBOS, KDCA, KATL
- Snow-only stations (4): KDET, KSLC, KJAC, KASE
- DB table:
weather_observations
2. NWS Area Forecast Discussions (AFD)
- What: Free-text forecast narratives from local Weather Forecast Offices, scanned for uncertainty keywords to produce a confidence suppressor score (0.5-1.0)
- Source: NWS API —
https://api.weather.gov/products/types/AFD/locations/{wfo}
- What to pull:
- Full discussion text
- Keyword scan: high/medium uncertainty phrases
- Output: per-station confidence suppressor (0.5 = high uncertainty, 1.0 = no suppression)
- Collection frequency: Every 6 hours (aligned with forecast model runs)
- Why it matters: When forecasters express high uncertainty, our drop detection confidence should be suppressed. A "92% lock-in" in stable conditions might only be 75% when the AFD says "isolated thunderstorms may push temps back up."
- DB table:
weather_afd_confidence
B. Market Data
3. Kalshi Weather Market Prices
What: Bid/ask/last price, volume, open interest for all weather bracket and over/under contracts across 20 cities
Source: Kalshi REST API — https://api.elections.kalshi.com/trade-api/v2/markets
- Auth: RSA-PSS signed requests (API key ID + private key)
- Filter by series tickers: KXHIGH*, KXLOW*, KXRAIN*, KXSNOW*
What to pull:
yes_bid, yes_ask, last_price
volume, open_interest
subtitle (parsed for bracket range / threshold)
- Full orderbook depth when available
Collection frequency: Every 5 minutes
Why it matters: These are the contracts we trade. Price data feeds edge calculation (fair probability vs market price). Orderbook depth determines position sizing. Volume indicates liquidity for entry/exit.
Kalshi series tracked:
Daily High Temperature (20 cities):
| Series |
City |
NWS Station |
| KXHIGHNY |
New York |
KNYC |
| KXHIGHCHI |
Chicago |
KMDW |
| KXHIGHMIA |
Miami |
KMIA |
| KXHIGHLAX |
Los Angeles |
KLAX |
| KXHIGHDEN |
Denver |
KDEN |
| KXHIGHPHIL |
Philadelphia |
KPHL |
| KXHIGHTPHX |
Phoenix |
KPHX |
| KXHIGHTMIN |
Minneapolis |
KMSP |
| KXHIGHTDAL |
Dallas |
KDFW |
| KXHIGHTNOLA |
New Orleans |
KMSY |
| KXHIGHAUS |
Austin |
KAUS |
| KXHIGHTSFO |
San Francisco |
KSFO |
| KXHIGHTHOU |
Houston |
KHOU |
| KXHIGHTSATX |
San Antonio |
KSAT |
| KXHIGHTLV |
Las Vegas |
KLAS |
| KXHIGHTSEA |
Seattle |
KSEA |
| KXHIGHTOKC |
Oklahoma City |
KOKC |
| KXHIGHTBOS |
Boston |
KBOS |
| KXHIGHTDC |
Washington DC |
KDCA |
| KXHIGHTATL |
Atlanta |
KATL |
Daily Low Temperature (7 cities):
| Series |
City |
| KXLOWTNYC |
New York |
| KXLOWTCHI |
Chicago |
| KXLOWTMIA |
Miami |
| KXLOWTLAX |
Los Angeles |
| KXLOWTDEN |
Denver |
| KXLOWTPHIL |
Philadelphia |
| KXLOWTAUS |
Austin |
Daily Rainfall (11 cities):
| Series |
City |
| KXRAINNYC |
New York |
| KXRAINCHIM |
Chicago |
| KXRAINMIAM |
Miami |
| KXRAINLAXM |
Los Angeles |
| KXRAINDENM |
Denver |
| KXRAINDALM |
Dallas |
| KXRAINNO |
New Orleans |
| KXRAINAUSM |
Austin |
| KXRAINSFOM |
San Francisco |
| KXRAINHOUM |
Houston |
| KXRAINSEAM |
Seattle |
Monthly Snowfall (17 cities):
| Series |
City |
| KXNYCSNOWM |
New York |
| KXCHISNOWM |
Chicago |
| KXMIASNOWM |
Miami |
| KXLAXSNOWM |
Los Angeles |
| KXDENSNOWMB |
Denver |
| KXPHILSNOWM |
Philadelphia |
| KXDALSNOWM |
Dallas |
| KXAUSSNOWM |
Austin |
| KXSFOSNOWM |
San Francisco |
| KXHOUSNOWM |
Houston |
| KXSEASNOWM |
Seattle |
| KXBOSSNOWM |
Boston |
| KXDCSNOWM |
Washington DC |
| KXDETSNOWM |
Detroit |
| KXSLCSNOWM |
Salt Lake City |
| KXJACWSNOWM |
Jackson, WY |
| KXASPSNOWM |
Aspen |
Total: 55 active daily series across 4 market types
Hurricanes & Tropical Storms:
| Series |
Market |
| KXHURCTOT |
Total Atlantic hurricane count (season) |
| KXHURCTOTMAJ |
Total major hurricanes (Cat 3+) |
| KXHURCMAJ |
Next major hurricane occurrence |
| KXHURCLAND |
Hurricane landfall (US) |
| KXHURCAT |
Hurricane max category |
| KXHURCATFL |
Hurricane category hitting Florida |
| KXNEXTHURDATE |
Date of next hurricane |
| KXNEXTCAT5HURDATE |
Date of next Cat 5 |
| KXTROPSTORM |
Tropical storm count |
| KXHURC*MIA |
Hurricane hitting Miami |
| KXHURC*NYC |
Hurricane hitting NYC |
| KXHURC*TAMPA |
Hurricane hitting Tampa |
| KXHURC*NOLA |
Hurricane hitting New Orleans |
| KXHURC*JAX |
Hurricane hitting Jacksonville |
| KXHURC*SAV |
Hurricane hitting Savannah |
| KXHURC*CHS |
Hurricane hitting Charleston |
| KXHURC*ILM |
Hurricane hitting Wilmington |
| KXHURC*ORF |
Hurricane hitting Norfolk |
| KXHURC*HAT |
Hurricane hitting Hatteras |
| KXHURC*MYR |
Hurricane hitting Myrtle Beach |
| KXHURC*NJ |
Hurricane hitting New Jersey |
| KXHURC*ORL |
Hurricane hitting Orlando |
| KXHURC*CA |
Hurricane hitting California |
| KXHURC*TX |
Hurricane hitting coastal Texas |
| KXHURC*GULF |
Hurricane hitting Gulf Coast |
| KXHURC*HI |
Hurricane hitting Hawaii |
| KXHURC*HOU |
Hurricane hitting Houston |
| KXHURC*SC |
Hurricane hitting South Carolina |
| KXHURC*FL |
Hurricane hitting Florida |
Tornadoes:
| Series |
Market |
| KXTORNADO |
US tornado count (monthly/annual) |
Earthquakes & Seismic:
| Series |
Market |
| KXEARTHQUAKE |
Major earthquake occurrence |
| KXEARTHQUAKECALIFORNIA |
8.0+ earthquake in California |
| KXEARTHQUAKEJAPAN |
8.0+ earthquake in Japan |
| KXEARTHQUAKEJAPANTATSUKI |
Japan-specific seismic event |
| KXEARTHQUAKELA |
Earthquake hitting Los Angeles |
| KXEARTHQUAKEM7 |
Next M7+ earthquake globally |
| KXBIGGESTQUAKE |
Largest earthquake magnitude (annual) |
| KXTSUNAMI |
Tsunami occurrence |
Volcanic:
| Series |
Market |
| KXKILAUEA / KXERUPTKILUAEA |
Kilauea eruption |
| KXERUPTETNA |
Mt. Etna eruption |
| KXERUPTSUPER |
Supervolcano eruption before 2050 |
| KXSPURRERUPT |
Mt. Spurr eruption |
Temperature — Extended Markets:
| Series |
Market |
| KXAVGTEMP |
US monthly average temperature |
| KXTEMPMON |
Monthly temperature bracket |
| KXGTEMP |
Global temperature deviation |
| KXHOTYEAR |
Hottest year on record |
| KXHMONTH |
Hottest month on record |
| KXHMONTHRANGE |
Hottest month range |
| KXWARMING |
World passes 2C above pre-industrial |
| KXHEATWARNING |
Heat warning issued |
| KXDVHIGH |
Death Valley daily high |
| KXMAXTEMP100 |
Max temp reaches 100F (seasonal) |
| KXMICHTEMP |
Michigan temperature |
| KXTEMPNYCH |
NYC hourly directional temperature |
| KXHIGHUS |
Highest temperature in US (daily) |
| KXCITIESWEATHER |
Multi-city weather composite |
Snow — Extended Markets:
| Series |
Market |
| KXSNOWSTORM |
Major snowstorm occurrence |
| KXSNOWAZ |
Phoenix snow |
| KXSNOWS |
White Christmas markets |
| KXCHISNOWXMAS |
Chicago Christmas snow |
| KXBOSSNOWXMAS |
Boston Christmas snow |
| KXSNOWNY / KXSNOWNYC / KXSNOWYM |
NYC snow variants |
Rain — Extended Markets:
| Series |
Market |
| KXRAINNYCM |
NYC monthly rainfall total |
Arctic / Climate Macro:
| Series |
Market |
| KXARCTICICEMAX |
Arctic sea ice maximum extent |
| KXARCTICICEMIN |
Arctic sea ice minimum extent |
| KXCO2 / KXCO2LEVEL |
US CO2 levels |
| KXCORIVER |
Colorado River flow |
| KXMEAD |
Lake Mead water level |
| KXUSCLIMATE |
US meets climate goals |
| KXEUCLIMATE |
EU meets 2030 climate goals |
| KXINDIACLIMATE |
India meets 2030 climate goals |
Natural Disasters / FEMA:
| Series |
Market |
| KXFEMA |
FEMA disaster declaration |
| KXFEMA*HOU |
Houston emergency |
| KXFEMA*MIA |
Miami emergency |
| KXFEMA*NOLA |
New Orleans emergency |
| KXFEMA*LA |
Los Angeles emergency |
| KXFEMA*PHI |
Philadelphia emergency |
| KXFEMA*SF |
San Francisco emergency |
| KXFEMA*STL |
St. Louis emergency |
| KXFEMA*COL |
Columbus emergency |
| KXFEMA*DSM |
Des Moines emergency |
| KXFEMA*JAC |
Jackson emergency |
| KXFEMA*LOU |
Louisville emergency |
| KXFEMA*RC |
Rapid City emergency |
| KXFEMA*ILM |
Wilmington emergency |
Energy / Solar / Space:
| Series |
Market |
| KXERCOTX |
ERCOT Texas grid emergency |
| KXXFLARE |
Solar X-class flare |
| KXGSTORM |
Geomagnetic storm |
| KXEVSHARE |
EV market share 2030 |
| KXPRIMEENGCONSUMPTION |
Global primary energy source 2030 |
Other Climate:
| Series |
Market |
| KXCLOUDSEEDING |
Cloud seeding event |
| KXNOAALICENSE |
NOAA licensing changes |
| KXWASDESTATCORN |
WASDE corn stats (agriculture/weather) |
Total: 55 daily + ~120 extended = ~175 climate series on Kalshi
DB table: weather_markets
4. Polymarket Weather Prices
- What: Weather market prices from Polymarket for cross-venue comparison and global city coverage
- Source: Gamma API —
https://gamma-api.polymarket.com/markets
- No auth required
- Search by weather-related keywords
- What to pull:
- Market question, outcomes, prices
- Volume, liquidity
- City and date parsed from market title
- Collection frequency: Every 30 minutes
- Why it matters: Polymarket covers 21 global cities (London, Paris, Munich, Tokyo, Seoul, etc. + 5 US cities) that Kalshi doesn't. Also serves as cross-venue price comparison for US cities — if Kalshi and Polymarket disagree on the same city's high, that's an arbitrage signal.
- DB table:
weather_polymarket
C. Forecast Models
5. Ensemble Forecasts (GFS + ECMWF via Open-Meteo)
- What: Multi-model ensemble forecasts providing temperature predictions, exceedance probabilities, and calibrated sigma values for edge calculation
- Source: Open-Meteo Forecast API —
https://api.open-meteo.com/v1/forecast
- No auth required, generous rate limits
- Models: GFS (NOAA) and ECMWF (European)
- What to pull:
- Hourly temperature forecasts per city
temperature_2m_max (daily high forecast)
- Ensemble spread for uncertainty estimation
- Derived: exceedance probability per bracket, sigma-calibrated edge
- Collection frequency: Every 6 hours (aligned with model run times: 00Z, 06Z, 12Z, 18Z)
- Why it matters: Morning forecasts feed Job 1 (predict the high before peak). The calibrated sigma (
std * 1.30 * (1 + 0.08 * (daysAhead - 1))) converts forecast uncertainty into bracket probabilities. The 70/30 model/market blend produces fair probability for edge calculation.
- Calibration: Base sigma inflation 1.30x, plus 8% per day of lead time
- Fair probability blend: 70% model forecast + 30% market-implied
- DB table:
weather_forecasts
6. Solar Times
- What: Sunrise, sunset, and solar noon times for each city, used to determine expected peak temperature window
- Source: Calculated inline from latitude/longitude (no external API)
- What to pull:
- Sunrise, sunset, solar noon (local time)
- Derived: expected peak hour (typically 2-4 hours after solar noon)
- Collection frequency: Daily (computed once per day)
- Why it matters: Drop detection is only meaningful AFTER the expected peak hour. A 4F drop at 11 AM is meaningless; a 4F drop at 4 PM is a lock-in. Solar times anchor the peak window per city per season.
- DB table:
weather_solar
D. Risk & Alerts
7. NWS Weather Alerts
- What: Active severe weather alerts that could invalidate a lock-in signal (thunderstorm recovery, cold front reversal)
- Source: NWS Alerts API —
https://api.weather.gov/alerts/active
- No auth required
- Filter by station coordinates / zone
- What to pull:
- Alert event type (thunderstorm, tornado, heat advisory, winter storm, freeze, etc.)
- Severity, urgency, certainty
- Affected area, onset/expiry times
- Derived: recovery risk flag (thunderstorm/tornado = potential false lock-in) vs permanent drop flag (winter storm/freeze = confirmed lock-in)
- Collection frequency: Every 15 minutes
- Why it matters: A thunderstorm warning means a potential temperature spike from clearing/solar heating post-storm. This is the main failure mode for drop detection — the AI classifier must weigh active alerts when judging 2F drops.
- DB table:
weather_alerts
E. Settlement & Verification
8. Kalshi Settlement History
- What: Settled weather contract outcomes with official observed measurements, cross-referenced against our tracked observations
- Source: Kalshi REST API — settled markets endpoint
- Auth: RSA-PSS signed requests
- What to pull:
- Settlement result (yes/no per contract)
- Official settlement value (the high temp Kalshi used)
- Our observed high vs Kalshi's official high (discrepancy tracking)
- Collection frequency: Every 6 hours
- Why it matters: Settlement data is ground truth for calibrating the entire system. Discrepancies between our NWS observations and Kalshi's official settlement reveal measurement basis differences. Historical settlement data feeds backtest accuracy and lock-in rate validation.
- DB table:
weather_settlements
9. NOAA Degree Days
- What: Heating and cooling degree day values providing seasonal temperature baselines
- Source: NOAA Climate Data — degree day products
- What to pull:
- HDD (Heating Degree Days), CDD (Cooling Degree Days)
- Normal vs actual departure
- Collection frequency: Daily at 7 AM ET
- Why it matters: Degree days contextualize whether current temperatures are running hot or cold relative to seasonal norms. A city running 10 CDD above normal suggests the market may under-price high brackets.
- DB table:
weather_degree_days
F. Historical & Analytics
10. Historical Backfill (Open-Meteo Archive)
- What: 12+ months of hourly historical temperature data per city for baseline statistics and backtest validation
- Source: Open-Meteo Archive API —
https://archive-api.open-meteo.com/v1/archive
- No auth required
- Data back to 1940, fetched in 90-day chunks
- What to pull:
- Hourly temperature observations
- Daily high/low summary
- Derived: historical peak hour distribution, seasonal drop rate curves, city-specific volatility baselines
- Collection frequency: Manual / one-time backfill (refresh monthly for rolling window)
- Why it matters: Historical data validates the core thesis (4F drop = 92% lock-in) across seasons and cities. It also provides city-specific priors — Phoenix in July behaves differently than Seattle in March.
- DB table:
weather_historical
11. Analytics (Volatility, Correlations, Accuracy)
- What: Derived analytics computed from collected data — intra-day volatility, city correlation matrix, forecast accuracy scores, lock-in statistics by time window
- Source: Computed internally from tables above (no external API)
- What to pull (computed fields):
- 30/60/90-day intra-day temperature volatility per city
- City correlation matrix (phi coefficient — when cities move together)
- Forecast accuracy (predicted high vs actual high, by model and lead time)
- Lock-in success rate by drop size, time of day, and city
- Collection frequency: Daily
- Why it matters: Volatility drives position sizing (high-vol cities need smaller positions). Correlations prevent over-concentration (if NYC and PHI are 90% correlated, that's one bet not two). Forecast accuracy tracks model calibration drift. Lock-in stats are the core performance metric.
- DB table:
weather_analytics
G. Supplementary Modules (Compiled Only)
12. Prediction Engine
- What: Full prediction pipeline combining forecast models, observations, and market data to produce per-city predicted highs and bracket probabilities
- Source: Internal — synthesizes data from sources #1, #3, #5, #10
- Output: Predicted daily high, bracket probability distribution, confidence score
- Collection frequency: Runs with forecast cycle (every 6 hours)
13. Midday Scanner
- What: Active scanning during peak temperature hours to detect real-time drop opportunities
- Source: Internal — monitors source #1 (NWS observations) against daily tracker
- Output: Drop alerts with magnitude, time since peak, conditions context
- Collection frequency: Continuous during 10 AM - 8 PM local time per city
14. Backfill Drops Recovery
- What: Retroactive resolution of drop events — checks whether temperature recovered after a detected drop by comparing peak-at-drop vs final official high
- Source: Internal — cross-references
weather_drops table with final observations
- Output:
did_recover boolean on each drop record
- Collection frequency: End of day (after settlement)
Edge Thresholds & Parameters
| Parameter |
Value |
| Minimum edge to trade |
20% |
| Lock-in drop threshold |
4.0F |
| Sigma calibration base |
1.30x |
| Sigma lead time factor |
+8% per day |
| Fair probability blend |
70% model / 30% market |
| Drop detection base rates |
2F: ~75%, 4F: ~90%, 6F: ~100% |
Source: ~/.claude/projects/-home-ubuntu-edgeclaw/memory/weather-desk-data-inventory.md