| data | ||
| deploy | ||
| src | ||
| tests | ||
| .dockerignore | ||
| .gitignore | ||
| docker-compose.yml | ||
| Dockerfile | ||
| pyproject.toml | ||
| README.md | ||
Polymarket BTC Up/Down Lab
只读可行性验证项目,用来研究 Polymarket BTC Up/Down 5m 市场是否存在足够稳定的定价偏差。
当前版本不会连接钱包、不会签名、不会下单。它做三件事:
- 从 Gamma API 读取事件、market、token id、
priceToBeat。 - 从 Polymarket CLOB WebSocket 读取 Up/Down 增量盘口。
- 从 Polymarket RTDS Chainlink BTC/USD 获取实时价格,估算
P(end >= priceToBeat)和扣费后的 taker edge。 - 将实时观测和盘口事件写入 DuckDB。
安装
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
观察指定市场
.venv/bin/updown-lab observe --slug btc-updown-5m-1779347700 --duration 60
输出会写入 data/observations.jsonl,每行是一条可回放的 JSON 快照。
发现当前候选市场
.venv/bin/updown-lab discover --limit 10
Gamma 的 recurring series 有时会返回尚未启用订单簿的未来市场,所以实盘观察前要看 acceptingOrders、enableOrderBook、priceToBeat 是否存在。
启动实时监控网站
.venv/bin/updown-dashboard --host 127.0.0.1 --port 8765
然后打开:
http://127.0.0.1:8765
监控台会按 5 分钟 Unix 时间边界自动切换当前 BTC Up/Down 市场,实时展示价格、盘口、fair value、taker edge 和最近日志。实时网站的数据源是 data/updown.duckdb。
如果 live 市场的 Gamma 元数据暂时没有 priceToBeat,仪表盘会优先使用 RTDS 边界 tick 作为 rtds_boundary。只有中途启动且缺少边界 tick 时才会临时显示 proxy_start,这种样本不会计入可信回测。
策略口径
第一版 fair value 使用短期布朗运动近似:
z = (current_price - price_to_beat) / (sigma * sqrt(seconds_remaining))
fair_prob = normal_cdf(z)
其中 sigma 由最近价格收益率滚动估算,并设置了下限,避免临近结算时概率过度极端。
扣 taker fee 后的近似 edge:
buy_up_edge = fair_prob - up_ask - fee(up_ask)
buy_down_edge = (1 - fair_prob) - down_ask - fee(down_ask)
Polymarket crypto fee 近似:
fee = 0.07 * price * (1 - price)
下一步
- 用 DuckDB 回放页分析入场时机、滑点、手续费后 edge 和窗口胜率。
- 增加进程锁/单实例启动保护,避免多个 dashboard 同时写一个 DuckDB 文件。
- 用海外 VPS 长时间采集,比较 RTDS 延迟、边界 tick 命中率和 CLOB 盘口年龄。
海外 VPS 部署
部署脚本在 deploy/ 目录。推荐美国东部 Ubuntu VPS,通过 SSH tunnel 访问本地绑定的 dashboard:
deploy/sync_to_server.sh user@YOUR_SERVER_IP /opt/updown-dashboard
ssh user@YOUR_SERVER_IP
cd /opt/updown-dashboard
sudo bash deploy/install_ubuntu.sh
sudo bash deploy/install_systemd.sh
sudo systemctl start updown-dashboard
本地访问:
ssh -L 8765:127.0.0.1:8765 user@YOUR_SERVER_IP