# Poly Weather Polymarket 天气预测市场套利机器人。通过比较专业气象模型(GFS / ECMWF / ICON 集合预报)的概率与 Polymarket 每日温度市场的隐含概率,自动发现并交易定价偏差。 ## 策略 | 策略 | 说明 | |------|------| | **TAIL_NO** | 在尾部区间买入 NO — 当模型概率 < 5% 但市场 YES 价格 > 3¢ 时 | | **LATENCY_ARB** | 新气象数据使概率偏移 > 5%,市场尚未重新定价时交易 | | **PARITY_ARB** | 当某事件所有 YES 价格之和偏离 100¢ 时的纯套利 | | **OBSERVED_YES** | 峰值时段(当地 11:00–14:00)在观测温度区间买入 YES,市场尚未反映已知高温 | | **OBSERVED_NO** | 在观测日最高温度以下的区间买入 NO(全天有效,最高置信度策略) | ## 架构 TypeScript monorepo,使用 Turborepo + pnpm workspaces。 ``` packages/ core/ — 共享类型、工具函数、Prisma schema、常量 weather-engine/ — GFS/ECMWF/ICON 预报获取(Open-Meteo)、HKO 香港天文台预报、集合概率计算 market-engine/ — Polymarket Gamma API 扫描、CLOB 订单簿读取、认证下单 strategy/ — 信号生成(Tail NO / Latency Arb / Parity Arb / Observed YES/NO)、风控、Kelly 仓位、组合追踪 trading-engine/ — 机器人主循环、流水线编排、健康检查服务 dashboard/ — Next.js App Router 仪表盘,实时市场数据、信号、手动下单 ``` ### 依赖关系 ``` core (叶子节点 — 无内部依赖) ↑ weather-engine, market-engine (依赖 core) ↑ strategy (依赖 core + weather-engine + market-engine) ↑ trading-engine (依赖以上所有) dashboard (依赖 core,直接读取数据库) ``` ## 快速开始 ### 前置条件 - Node.js >= 20 - pnpm >= 9 - Docker & Docker Compose ### 1. 克隆并安装 ```bash git clone && cd poly-weather pnpm install ``` ### 2. 配置环境变量 ```bash cp .env.example .env # 编辑 .env,填入你的 Polymarket 钱包私钥和地址 ``` ### 3. 启动基础服务 ```bash # 仅启动 PostgreSQL + Redis(本地开发) docker compose up -d postgres redis # 或者启动全部服务(包括 bot + dashboard) docker compose up -d ``` ### 4. 初始化数据库 ```bash pnpm db:generate pnpm db:push ``` ### 5. 派生 L2 API 密钥 ```bash pnpm derive-keys # 将输出的 key/secret/passphrase 填入 .env ``` ### 6. 启动 ```bash # 方式一:Docker 全栈启动 docker compose up -d # 方式二:本地开发 pnpm i pnpm build pnpm bot:start # 启动交易机器人 pnpm dashboard:dev # 启动仪表盘 http://localhost:3000 ``` ## Docker 服务 | 服务 | 端口 | 说明 | |------|------|------| | `postgres` | 5432 | PostgreSQL 16 数据库 | | `redis` | 6379 | Redis 7 缓存 | | `bot` | 3001 | 交易机器人(健康检查端口) | | `dashboard` | 3000 | Next.js 仪表盘 | ```bash docker compose up -d # 启动全部 docker compose up -d postgres redis # 仅基础设施 docker compose logs -f bot # 查看 bot 日志 docker compose down # 停止全部 ``` ## 常用命令 ```bash pnpm install # 安装所有依赖 pnpm build # 构建所有包 pnpm dev # 开发模式(全部包) pnpm test # 运行测试 pnpm db:generate # 生成 Prisma Client pnpm db:push # 推送 schema 到数据库 pnpm db:studio # 打开 Prisma Studio pnpm bot:start # 启动交易机器人 pnpm dashboard:dev # 启动仪表盘开发服务器 pnpm derive-keys # 从 PRIVATE_KEY 派生 L2 API 密钥 ``` ## 技术栈 - **运行时**: Node.js 20+, TypeScript (ES2022, NodeNext, strict) - **Monorepo**: pnpm workspaces + Turborepo - **数据库**: PostgreSQL 16 (Prisma ORM) + Redis 7 - **仪表盘**: Next.js 14 (App Router), Tailwind CSS, next-themes, Radix UI - **市场 API**: Polymarket Gamma API + CLOB API - **气象 API**: Open-Meteo (GFS, ECMWF, ICON), 香港天文台 (HKO), wttr.in (实时温度) - **交易**: @polymarket/clob-client, ethers ## 环境变量 参见 `.env.example`,关键变量: | 变量 | 说明 | |------|------| | `DB_PASSWORD` | PostgreSQL 密码 | | `DATABASE_URL` | PostgreSQL 连接串(引用 `${DB_PASSWORD}`) | | `REDIS_URL` | Redis 连接地址 | | `PRIVATE_KEY` | Polymarket 钱包私钥 | | `FUNDER_ADDRESS` | Polymarket 代理钱包地址 | | `DRY_RUN` | `true`(默认)模拟交易,`false` 真实下单 | | `AUTO_EXECUTE` | `false`(默认)仅检测信号,不自动下单 | ## 覆盖城市 24 个城市,分 3 个优先级: - **P0**(高流动性):纽约、伦敦、芝加哥 - **P1**(中等流动性):巴黎、首尔、东京、迈阿密 - **P2**(其他 Polymarket 城市):布宜诺斯艾利斯、香港、多伦多、西雅图、达拉斯、亚特兰大、慕尼黑、特拉维夫、圣保罗、上海、惠灵顿、米兰、勒克瑙、新加坡、安卡拉、华沙、马德里、台北 ## 集合模型权重 | 模型 | 权重 | |------|------| | ECMWF | 30% | | GFS | 25% | | HKO | 25% | | ICON | 20% | HKO 为香港市场的官方结算数据源,每日更新 4 次。 ## 风控配置 - **Kelly 仓位管理**:Kelly 分数默认 25% - **头寸限制**:单市场 $50、单城市 $200、总敞口 $1000、日亏损上限 $100 - **最低流动性**:订单簿需有 $500 流动性 ## 健康检查服务(端口 3001) | 端点 | 说明 | |------|------| | `/health` | 基本状态(运行/停止、运行时长、DryRun 模式) | | `/metrics` | 详细指标(持仓、日 PnL、最近一轮结果) | | `/auto-execute` | 自动执行开关 | ## 注意事项 - **DRY_RUN=true 为默认值** — 所有信号检测和数据库记录正常工作,但不会真正下单 - **温度单位** — 美国城市使用 °F,其他城市使用 °C - **仅 Maker 订单** — 在 Polymarket 上使用限价单(GTC)以免手续费 - **时间戳均为 UTC** — 本地时区仅在仪表盘显示中使用 - **WebSocket 实时价格** — 通过 Polymarket WebSocket 获取实时价格更新,支持自动重连 ## License Private