# Poly Weather Polymarket 天气预测市场套利机器人。通过比较专业气象模型(GFS / ECMWF / ICON 集合预报)的概率与 Polymarket 每日温度市场的隐含概率,自动发现并交易定价偏差。 ## 策略 | 策略 | 说明 | |------|------| | **TAIL_NO** | 在尾部区间买入 NO — 当模型概率 < 5% 但市场 YES 价格 > 3¢ 时 | | **LATENCY_ARB** | 新气象数据使概率偏移 > 5%,市场尚未重新定价时交易 | | **PARITY_ARB** | 当某事件所有 YES 价格之和偏离 100¢ 时的纯套利 | ## 架构 TypeScript monorepo,使用 Turborepo + pnpm workspaces。 ``` packages/ core/ — 共享类型、工具函数、Prisma schema、常量 weather-engine/ — GFS/ECMWF/ICON 预报获取(Open-Meteo)、集合概率计算 market-engine/ — Polymarket Gamma API 扫描、CLOB 订单簿读取、认证下单 strategy/ — 信号生成(Tail NO / Latency Arb / Parity Arb)、风控、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) - **交易**: @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`(默认)仅检测信号,不自动下单 | ## 注意事项 - **DRY_RUN=true 为默认值** — 所有信号检测和数据库记录正常工作,但不会真正下单 - **温度单位** — 美国城市使用 °F,其他城市使用 °C - **仅 Maker 订单** — 在 Polymarket 上使用限价单(GTC)以免手续费 - **时间戳均为 UTC** — 本地时区仅在仪表盘显示中使用 ## License Private