Live Sports Score Arbitrage
Real-time live score arbitrage against Polymarket sports markets using ESPN data.
What It Does
Every 2 minutes, pulls live scores from ESPN's public API and calculates fair
win probabilities using sport-specific statistical models:
| Sport | Model | Key Parameter |
|---|
| NBA | Gaussian | sigma = 12.5 points |
| NFL |
Gaussian | sigma = 13.5 points |
|
NHL | Gaussian | sigma = 1.5 goals |
|
Soccer | Poisson | lambda = 1.35 goals/90min |
Gaussian model: P(win) = CDF(lead / (sigma * sqrt(t_remaining / T)))
Poisson model: Calculates expected goals from current rate, sums probability
of all winning scorelines.
Edge Source
Polymarket prices update slowly during live games - often 30-120 seconds behind
real scoring events. ESPN's API updates near-instantly. This latency gap is the edge.
Scheduling
Runs every 2 minutes via cron (*/2 * * * *). Managed automaton (auto-executes on schedule).
Only trades when divergence exceeds 10%.
Requirements
pip dependencies: simmer-sdk, INLINECODE2
Environment variables:
- -
SIMMER_API_KEY (required) - get from simmer.markets/dashboard - INLINECODE4 (optional) - defaults to
sim for paper trading, set to polymarket for real - INLINECODE7 (optional) - minimum divergence to trigger trade, defaults to
0.10 (10%) - INLINECODE9 (optional) - trade size in USD, defaults to INLINECODE10
Usage
CODEBLOCK0
Dry-run by default. Pass --live to execute real trades.
Trade Execution Path
- 1.
sports_live.py fetches live scores from ESPN public API (no auth needed) - Calculates fair win probability using Gaussian (NBA/NFL/NHL) or Poisson (soccer) models
- Finds matching Polymarket markets via INLINECODE13
- Compares model probability to Polymarket price, applies >10% divergence threshold
- 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. - Reads
SIMMER_API_KEY and optionally TRADING_VENUE from env. No other secrets. - 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 adjust sigma values, add new
sports (MLB, tennis), change the divergence threshold, or plug in different
live score sources.
实时体育比分套利
利用ESPN数据,针对Polymarket体育市场进行实时比分套利。
功能概述
每2分钟从ESPN公共API拉取实时比分,并使用特定体育项目的统计模型计算公平获胜概率:
| 体育项目 | 模型 | 关键参数 |
|---|
| NBA | 高斯分布 | sigma = 12.5分 |
| NFL |
高斯分布 | sigma = 13.5分 |
|
NHL | 高斯分布 | sigma = 1.5球 |
|
足球 | 泊松分布 | lambda = 1.35球/90分钟 |
高斯模型:P(获胜) = CDF(领先分差 / (sigma * sqrt(剩余时间 / 总时间)))
泊松模型:根据当前进球率计算预期进球数,汇总所有获胜比分的概率。
套利来源
Polymarket价格在比赛进行中更新缓慢——通常比实时得分事件滞后30-120秒。而ESPN的API近乎即时更新。这一延迟差就是套利空间。
调度机制
通过cron每2分钟运行一次(/2 *)。自动化管理(按计划自动执行)。仅在偏差超过10%时进行交易。
环境要求
pip依赖项: simmer-sdk、requests
环境变量:
- - SIMMERAPIKEY(必需)- 从 simmer.markets/dashboard 获取
- TRADINGVENUE(可选)- 默认为sim(模拟交易),设置为polymarket进行实盘交易
- SPORTSDIVERGENCETHRESHOLD(可选)- 触发交易的最小偏差,默认为0.10(10%)
- SPORTSTRADE_SIZE(可选)- 交易金额(美元),默认为20.0
使用方法
bash
python sports_live.py # 模拟运行(默认,不执行交易)
python sports_live.py --live # 通过SimmerClient进行实盘交易
python sports_live.py --live --quiet # cron模式
默认情况下为模拟运行。传递--live参数以执行实盘交易。
交易执行路径
- 1. sportslive.py从ESPN公共API获取实时比分(无需认证)
- 使用高斯分布(NBA/NFL/NHL)或泊松分布(足球)模型计算公平获胜概率
- 通过SimmerClient.findmarkets()查找匹配的Polymarket市场
- 将模型概率与Polymarket价格进行比较,应用>10%的偏差阈值
- 如果使用--live参数:调用SimmerClient.trade(),传入市场ID、方向、金额和理由
- 如果是模拟运行(默认):记录信号但不执行任何交易
安全性
- - 所有交易仅通过SimmerClient.trade()执行。不直接访问CLOB或钱包。
- 从环境变量读取SIMMERAPIKEY和可选的TRADING_VENUE。不涉及其他密钥。
- 此脚本不需要或读取任何钱包私钥。
- 默认情况下为模拟运行。必须显式传递--live标志才能执行交易。
可混编模板:分叉此技能以调整sigma值、添加新的体育项目(MLB、网球)、更改偏差阈值,或接入不同的实时比分数据源。