Featured Project

Kalshi Weather Bot

Real-time trajectory modeling NYC Daily High Temperature markets

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.

PythonKalshi MarketsNWS + Open-MeteoGFS + ECMWFKNYC Live Data

Quick start: python -m kalshi_weather run --city NYC

Reads the weather

Pulls forecast guidance from GFS, ECMWF, and NWS to build a single market-facing forecast baseline.

Watches the sky

Tracks real-time Central Park observations to adjust trajectories as intraday conditions shift.

Computes odds

Transforms adjusted weather trajectories into probability weights for every Kalshi temperature bracket.

Finds edges

Compares model-implied probabilities to market prices and highlights mismatches worth manual review.

Command surface

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

Risk and bracket-change notifications

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.