Kalshi-Polymarket Divergence Arb
Cross-platform price divergence trading between Kalshi and Polymarket.
What It Does
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.
Covered Series
| 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 |
Signal Logic
- - BUY - Polymarket price is >8% below Kalshi equivalent (Polymarket underpriced)
- SELL - Polymarket price is >10% above Kalshi equivalent (Polymarket overpriced)
- Asymmetric thresholds account for Polymarket's typically lower liquidity
Scheduling
Runs every 5 minutes via cron (*/5 * * * *). Managed automaton (auto-executes on schedule).
Dry-run by default. Pass --live to execute real trades.
Requirements
pip dependencies: simmer-sdk, INLINECODE3
Environment variables (required):
- -
SIMMER_API_KEY - get from simmer.markets/dashboard
Environment variables (optional, all have defaults):
- -
TRADING_VENUE - defaults to sim for paper trading, set to polymarket for real - INLINECODE8 - minimum divergence to trigger BUY, defaults to
0.08 (8%) - INLINECODE10 - minimum divergence to trigger SELL, defaults to
0.10 (10%) - INLINECODE12 - trade size in USD, defaults to INLINECODE13
Usage
CODEBLOCK0
Trade Execution Path
- 1. Fetches Kalshi public prices via HTTPS GET (no auth needed)
- Finds matching Polymarket markets via INLINECODE14
- Compares prices, applies thresholds (BUY >8%, SELL >10%)
- If
--live: calls SimmerClient.trade() with market_id, side, amount, reasoning - If dry-run (default): logs the signal but does NOT execute any trade
Security
- - All trades go through
SimmerClient.trade() only. No direct CLOB or wallet access. - Only required credential is
SIMMER_API_KEY. No other secrets needed. - No wallet private keys are required or read by this script.
- Dry-run is the default. The
--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.
Kalshi-Polymarket 价差套利
跨平台价格差异交易,在Kalshi和Polymarket之间进行。
功能说明
通过轮询Kalshi的公共API获取13个事件系列的实时价格,并与通过SimmerClient找到的Polymarket对应市场进行比较。当价格差异超过阈值时,价格较低的一方很可能被低估。
覆盖系列
| 系列 | 类别 | 描述 |
|---|
| KXBTC、KXETH、KXSOL、KXXRP、KXDOGE | 加密货币 | 价格阈值市场 |
| KXFED |
宏观 | 美联储利率决策 |
| KXCPI | 宏观 | CPI数据发布 |
| KXUNEMP | 宏观 | 失业数据 |
| KXGLD、KXOIL | 大宗商品 | 价格阈值市场 |
| KXNASDAQ、KXSPY、KXINX | 指数 | 指数水平市场 |
信号逻辑
- - 买入 - Polymarket价格低于Kalshi对应价格超过8%(Polymarket被低估)
- 卖出 - Polymarket价格高于Kalshi对应价格超过10%(Polymarket被高估)
- 非对称阈值考虑了Polymarket通常较低的流动性
调度安排
每5分钟通过cron运行一次(/5 *)。自动化管理(按计划自动执行)。默认模拟运行。传递--live参数执行真实交易。
依赖要求
pip依赖: simmer-sdk、requests
环境变量(必需):
- - SIMMERAPIKEY - 从 simmer.markets/dashboard 获取
环境变量(可选,均有默认值):
- - TRADINGVENUE - 默认为sim(模拟交易),设置为polymarket进行真实交易
- KALSHIBUYTHRESHOLD - 触发买入的最小价差,默认为0.08(8%)
- KALSHISELLTHRESHOLD - 触发卖出的最小价差,默认为0.10(10%)
- KALSHITRADE_SIZE - 交易规模(美元),默认为20.0
使用方法
bash
python kalshi_divergence.py # 模拟运行(默认,不执行交易)
python kalshi_divergence.py --live # 通过SimmerClient执行真实交易
python kalshi_divergence.py --live --quiet # cron模式
交易执行路径
- 1. 通过HTTPS GET获取Kalshi公共价格(无需认证)
- 通过SimmerClient.findmarkets()查找匹配的Polymarket市场
- 比较价格,应用阈值(买入>8%,卖出>10%)
- 如果使用--live参数:调用SimmerClient.trade(),传入marketid、方向、金额和理由
- 如果模拟运行(默认):记录信号但不执行任何交易
安全性
- - 所有交易仅通过SimmerClient.trade()执行。不直接访问CLOB或钱包。
- 唯一需要的凭证是SIMMERAPIKEY。无需其他密钥。
- 本脚本不需要也不读取任何钱包私钥。
- 默认模拟运行。必须显式传递--live参数才能执行交易。
可混编模板:分叉此技能以添加新的Kalshi系列、调整价差阈值,或根据差距大小增加仓位管理。