Install
openclaw skills install polymarket-kalshi-divergenceCross-platform arbitrage between Kalshi and Polymarket. Monitors 13 Kalshi event series (crypto, macro, politics) and compares prices to equivalent Polymarke...
openclaw skills install polymarket-kalshi-divergenceCross-platform price divergence trading between Kalshi and Polymarket.
Polls Kalshi's public API for live prices across 13 event series and compares them to equivalent Polymarket markets found via SimmerClient. When prices diverge beyond threshold, the cheaper side is likely underpriced.
| Series | Category | Description |
|---|---|---|
| KXBTC, KXETH, KXSOL, KXXRP, KXDOGE | Crypto | Price threshold markets |
| KXFED | Macro | Fed rate decisions |
| KXCPI | Macro | CPI prints |
| KXUNEMP | Macro | Unemployment data |
| KXGLD, KXOIL | Commodities | Price threshold markets |
| KXNASDAQ, KXSPY, KXINX | Indices | Index level markets |
Runs every 5 minutes via cron (*/5 * * * *). Managed automaton (auto-executes on schedule).
Dry-run by default. Pass --live to execute real trades.
pip dependencies: simmer-sdk, requests
Environment variables (required):
SIMMER_API_KEY - get from simmer.markets/dashboardEnvironment variables (optional, all have defaults):
TRADING_VENUE - defaults to sim for paper trading, set to polymarket for realKALSHI_BUY_THRESHOLD - minimum divergence to trigger BUY, defaults to 0.08 (8%)KALSHI_SELL_THRESHOLD - minimum divergence to trigger SELL, defaults to 0.10 (10%)KALSHI_TRADE_SIZE - trade size in USD, defaults to 20.0python kalshi_divergence.py # dry run (default, no trades)
python kalshi_divergence.py --live # real trades via SimmerClient
python kalshi_divergence.py --live --quiet # cron mode
SimmerClient.find_markets()--live: calls SimmerClient.trade() with market_id, side, amount, reasoningSimmerClient.trade() only. No direct CLOB or wallet access.SIMMER_API_KEY. No other secrets needed.--live flag must be explicitly passed to execute trades.Remixable Template: Fork this skill to add new Kalshi series, adjust divergence thresholds, or add position sizing based on gap magnitude.