Ingen beskrivning

Horace Zhang 269f59c3b9 feat: add Hong Kong city page with forecast chart, sidebar nav, and bug fixes 7 månader sedan
.claude 51b520f0a1 first commit 8 månader sedan
doc 269f59c3b9 feat: add Hong Kong city page with forecast chart, sidebar nav, and bug fixes 7 månader sedan
packages 269f59c3b9 feat: add Hong Kong city page with forecast chart, sidebar nav, and bug fixes 7 månader sedan
scripts 51b520f0a1 first commit 8 månader sedan
.dockerignore cb77e1654a Add Docker multi-service setup, README, and externalize DB password 7 månader sedan
.env.example 4039fd9aeb feat: compact market cards with per-city timezone Today filter, live temps, and forecast highs 7 månader sedan
.gitignore 0a2634d4f8 feat: add HKO data source, fix signal dedup, price lookup, Redis, and UI overhaul 7 månader sedan
CLAUDE.md e3535b9728 docs: update CLAUDE.md and README with undocumented features; fix markets loading skeleton 7 månader sedan
Dockerfile e2ea1e3393 fix: CLOB best-ask pricing for all strategies, Docker fixes, city clocks UI 7 månader sedan
README.md e3535b9728 docs: update CLAUDE.md and README with undocumented features; fix markets loading skeleton 7 månader sedan
docker-compose.yml e2ea1e3393 fix: CLOB best-ask pricing for all strategies, Docker fixes, city clocks UI 7 månader sedan
package.json 51b520f0a1 first commit 8 månader sedan
pnpm-lock.yaml 0a2634d4f8 feat: add HKO data source, fix signal dedup, price lookup, Redis, and UI overhaul 7 månader sedan
pnpm-workspace.yaml 51b520f0a1 first commit 8 månader sedan
tsconfig.base.json 51b520f0a1 first commit 8 månader sedan
turbo.json 51b520f0a1 first commit 8 månader sedan

README.md

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. 克隆并安装

git clone <repo-url> && cd poly-weather
pnpm install

2. 配置环境变量

cp .env.example .env
# 编辑 .env,填入你的 Polymarket 钱包私钥和地址

3. 启动基础服务

# 仅启动 PostgreSQL + Redis(本地开发)
docker compose up -d postgres redis

# 或者启动全部服务(包括 bot + dashboard)
docker compose up -d

4. 初始化数据库

pnpm db:generate
pnpm db:push

5. 派生 L2 API 密钥

pnpm derive-keys
# 将输出的 key/secret/passphrase 填入 .env

6. 启动

# 方式一: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 仪表盘
docker compose up -d                # 启动全部
docker compose up -d postgres redis # 仅基础设施
docker compose logs -f bot          # 查看 bot 日志
docker compose down                 # 停止全部

常用命令

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