Reads the weather
Pulls forecast guidance from GFS, ECMWF, and NWS to build a single market-facing forecast baseline.
Featured Project
A Python market intelligence bot that aggregates weather forecasts, tracks live Central Park temperature observations, and estimates bracket-level probabilities to identify market mispricing.
Based on an original project by Srinath Srinivasan. Modified and extended by Sergio Reyes to include real-time weather trajectory modeling and Kalshi advisory signals.
Quick start: python -m kalshi_weather run --city NYC
Pulls forecast guidance from GFS, ECMWF, and NWS to build a single market-facing forecast baseline.
Tracks real-time Central Park observations to adjust trajectories as intraday conditions shift.
Transforms adjusted weather trajectories into probability weights for every Kalshi temperature bracket.
Compares model-implied probabilities to market prices and highlights mismatches worth manual review.
The bot ships with operational commands for live monitoring, graphing, settlements, and historical replay.
Run dashboard
python -m kalshi_weather run --city NYC Launches the live trading view with forecasts, station data, and bracket probabilities.
View progression graph
python -m kalshi_weather view-graph --city NYC --refresh 15 Streams intraday line progression for observed highs vs final model mean.
Replay/backtest
kalshi-weather backtest --city NYC --days 7 --starting-balance 20 Replays logs and reports prediction quality, win rate, and strategy ROI.
Settlement lookup
python -m kalshi_weather settlement --days 7 Pulls official NWS climate settlements for historical validation.
Alerts
Alert routing supports WhatsApp Cloud and Twilio. You can configure drawdown thresholds, bracket-shift notices, and prompt-ready summaries for faster manual decisions.
# Enable outbound alerts
ALERTS_ENABLED=true
ALERTS_PROVIDER=whatsapp_cloud
# Position risk threshold (0.35 = 35% loss from entry-side price)
ALERT_POSITION_LOSS_FRACTION=0.35
# Bracket-change updates
ALERT_BRACKET_CHANGE_ENABLED=true
ALERT_LLM_PROMPT_ENABLED=true
ALERT_TOP_BRACKETS=3
For a 25% loss trigger instead of 35%, set ALERT_POSITION_LOSS_FRACTION=0.25.