| Ticker | Strike | Dir | Kalshi | Opt Prob | Opt Edge | Opt Signal | Hist Prob | Hist Edge | Hist Signal | Vol |
|---|
| Ticker | City | Date | Metric | Thresh | Dir | Kalshi | Model | Source | Status | Edge | Conf | Signal |
|---|
| Date | Trades | Wins | Losses | Win Rate | P&L | Best | Worst | Avg Edge |
|---|
| Time | Ticker | Strike | Side | Entry | Exit | Qty | Edge | Signal | P&L | Status |
|---|
The Big Picture
This system finds mispricings on Kalshi prediction markets by comparing their prices to two independent probability models:
- Pulls real-time prices from Kalshi's API
- Runs two models (historical volatility + options-implied) to estimate true probabilities
- Finds edges where model probability differs from market price
- Logs paper trades on strong signals for tracking
Components
| Component | Role |
|---|---|
Historical Model | VIX-adaptive EWMA volatility + dynamic Student-t DF for fat-tail probabilities |
Options Model | Breeden-Litzenberger on SPY 0DTE chain to extract implied P(close >= K) |
Paper Trader | Kelly Criterion sizing, favorite-longshot filter, fee-adjusted edges, risk limits |
Weather Screener | Historical base rates for temp anomalies, tornadoes, hurricanes, rain |
Sports Screener | Discovers Kalshi sports markets (90% of volume), liquidity scoring |
Arbitrage | Cross-platform price comparison: Kalshi vs Polymarket |
Order Book | VWAP from top-5 book levels for strong signals; depth-based fair value |
Uses VIX-adaptive EWMA on log returns for adaptive volatility, scaled by remaining session fraction:
remaining_vol = daily_vol * sqrt(remaining_fraction) z = ln(K / S) / remaining_vol P(close >= K) = 1 - T_df(z)
VIX regimes automatically adjust parameters:
| VIX | EWMA Span | Student-t DF | Regime |
|---|---|---|---|
| <15 | 30 | 8 | Calm |
| 15-25 | 20 | 5 | Normal |
| 25-35 | 12 | 4 | Elevated |
| >35 | 8 | 3 | Crisis |
Fetches SPY 0DTE call chain, computes mid prices, then uses finite-difference Breeden-Litzenberger:
P(S > K) = -dC/dK
Survival function interpolated via clamped CubicSpline (no extrapolation). SPY strikes mapped to SPX via ratio.
| Edge | Signal | Action |
|---|---|---|
| +7% (options) / +10% (hist) | STRONG BUY YES | Trade, size by edge |
| +3.5% / +5% | LEAN YES | Monitor only |
| -3.5% / -5% | LEAN NO | Monitor only |
| -7% / -10% | STRONG BUY NO | Trade, size by edge |
Optimizations:
- Fee-adjusted: Edges subtract Kalshi taker fees (0.7-3.5¢) before signal classification
- Favorite-longshot filter: Contracts <20¢ require 2x edge; <10¢ require 3x edge
- Kelly sizing: Quarter-Kelly optimal position sizing based on edge and bankroll
- Risk limits: Max $15/day loss, max 20 positions, max 3 correlated positions
- Maker strategy: All trades logged as limit orders (0% fee)
Uses historical base rates from NOAA/NASA climate data:
- Temperature anomalies: Monthly GISTEMP records since 2015
- Tornadoes: Mean/std by month from SPC data
- Hurricanes: Atlantic basin long-run stats (mean ~8, std ~3.5)
- NYC Rain: 20-year Open-Meteo archive, monthly totals
Confidence gate: only trades if time horizon <= 90 days AND confidence score >= 50.
S&P Cron: Every 15 min, weekdays 8-4 PM ET. Telegram at 9:30 AM, 12 PM, 4:15 PM.
Weather Cron: Every 30 min, 24/7. Telegram at 8 AM, 2 PM, 9 PM ET.
Auth: RSA-PSS signature of {timestamp_ms}{METHOD}{path} with SHA-256.
| Ticker | Sport | Type | Price | Vol | Liquidity | FLS Signal |
|---|
| Kalshi | Polymarket | K Price | P Price | Divergence | Direction |
|---|