一个功能完善的 Polymarket 预测市场自动化交易系统,包含多种交易策略、实时市场分析和 Web 仪表板。
- 自动做市机器人 - 基于订单簿深度的动态报价做市
- 网格交易机器人 - 单市场网格策略,系统化低买高卖
- 扫尾收敛策略 - 事件驱动的加密货币市场收敛交易
- Up Bot: 专注加密货币"涨跌"类型尾盘策略(Up/Down)
- Yes Bot: 通用的是/否市场收敛策略
- 实时加密货币市场数据可视化
- 多时间周期历史价格图表
- 订单簿深度分析
- 持仓追踪与盈亏监控
- 交易历史与执行日志
- 加密市场: 浏览和分析活跃的预测市场
- 控制面板: 实时市场概览与分析
- 机器人订单: 追踪自动交易活动和订单历史
- 市场数据接口
- 订单下单与管理
- 持仓与余额查询
- 历史数据访问
poly/
├── src/icu/poly/
│ ├── core/ # 核心交易客户端与工具
│ │ ├── PolyClient.js # Polymarket API 主封装类
│ │ ├── Logger.js # 结构化日志
│ │ ├── z-score.js # 统计分析
│ │ └── gen-key.js # 钱包密钥生成
│ ├── bots/ # 交易策略
│ │ └── tail-convergence/ # 收敛交易机器人
│ │ ├── up-bot.js # 比特币收敛策略
│ │ ├── yes-bot.js # 通用是/否收敛
│ │ ├── common.js # 共享工具
│ │ ├── liquidity-check.js
│ │ └── take-profit.js
│ ├── view/ # Web 仪表板 (HTML/CSS/JS)
│ ├── db/ # 数据库层 (Prisma + SQLite)
│ ├── data/ # 机器人配置文件
│ ├── web-server.js # Express API 服务器
│ ├── auto-maker-bot.js # 做市机器人
│ └── single-market-grid-bot.js # 网格交易机器人
└── test/ # 测试套件
└── icu/poly/
├── core/poly-client/ # 客户端方法测试
└── bots/ # 策略回测
- Node.js >= 18.x
- npm 或 yarn
- Polymarket 账户及 API 访问权限
- Polygon 钱包及 USDC.e 用于交易
# 克隆仓库
git clone https://github.com/yourusername/poly.git
cd poly
# 安装依赖
npm install
# 生成 Prisma 客户端
npx prisma generate
# 初始化数据库
npx prisma db push目前 .env 仅用于数据库连接(如 DATABASE_URL="file:./dev.db")。交易相关环境变量从 ~/.zshrc(或你的 shell 配置文件)导出。
建议在 ~/.zshrc 中配置:
# 钱包配置
export poly_mnemonic="你的 12 个单词助记词"
export poly_mnemonic_idx=0
# 可选:覆盖默认端点
export RPC_URL=https://polygon-rpc.com
# export CLOB_HOST=https://clob.polymarket.com
# 服务器配置
export PORT=3001
export BTC_PRICE_SOURCE=https://api.binance.com/api/v3/klines
export BTC_PRICE_SYMBOL=BTCUSDTnpm start访问仪表板:
- 加密市场: http://localhost:3001/
- 控制面板: http://localhost:3001/dashboard
- 机器人订单: http://localhost:3001/bot-orders
node src/icu/poly/auto-maker-bot.jsnode src/icu/poly/single-market-grid-bot.js# 比特币收敛策略
node src/icu/poly/tail-bot-start-up.js
# 通用是/否收敛策略
node src/icu/poly/tail-bot-start-yes.js# 运行所有测试
npm test
# 运行特定测试文件
npm run test:single -- "测试名称" path/to/file.test.jsGET /api/crypto-markets?tag=235返回按结束日期排序的活跃加密货币预测市场。
GET /api/price-history?market={tokenId}&interval=1h支持的时间间隔:1h, 6h, 1d, 1w, max
GET /api/orderbook/{tokenId}返回当前订单簿的买单和卖单。
GET /api/best-prices/{tokenId}返回最优买价和卖价。
POST /api/place-order
Content-Type: application/json
{
"price": 0.65,
"size": 100,
"side": "BUY",
"tokenId": "123456..."
}POST /api/cancel-order
Content-Type: application/json
{
"orderId": "0xabc..."
}GET /api/open-orders?market={conditionId}&assetId={tokenId}GET /api/trades?address=0x...GET /api/bot-orders?limit=100
DELETE /api/bot-orders/{id}
PUT /api/bot-orders/{id}策略原理: 基于订单簿深度的动态报价做市。
核心参数:
MIN_QUOTE_USD: 最小订单金额(默认 $20)SAFE_DEPTH_USD: 安全深度阈值(默认 $2000)TICKS_FROM_MID: 与中间价的跳动点差(2-3 档)
工作流程:
- 监控订单簿双边深度
- 在足够流动性后方挂买单
- 根据市场状况动态调整价格
- 持久化状态支持重启恢复
策略原理: 在预定义网格水平内系统化低买高卖。
核心参数:
GRID: 价格网格数组[1, 0.99, 0.97, ..., 0]tradeUsd: 每个网格档位的交易金额initPosition: 初始仓位倍数
工作流程:
- 按当前市价建立初始仓位
- 在相邻网格档位挂买卖单
- 成交后移动网格档位
- 捕获价格振荡产生的利润
策略原理: 基于价格收敛的统计套利,在事件临近结算时入场。
核心参数:
zMin: 最小 z-score 阈值ampMin: 最小小时振幅maxMinutesToEnd: 距离结束的最大分钟数triggerPriceGt: 入场价格阈值
工作流程:
- 扫描临近结算的市场
- 使用 z-score 分析识别偏离
- 满足统计标准时建仓
- 管理止盈和风险控制
特化版本:
- Up Bot: 专为加密货币 Up/Down 市场优化
- Yes Bot: 通用的是/否市场收敛
适用市场: 以小时级别的 Up/Down 事件为主(如 bitcoin-up-or-down-...、ethereum-up-or-down-...)。
核心思路:
- 尾盘入场: 只在接近结算时段扫描,降低信息噪音。
- 多信号确认:
z-score偏离、1小时振幅、动态阈值函数共同触发。 - 流动性与反转风控: 检查卖盘流动性、插针持续性、价格位置与短期趋势。
- 分层建仓: 初始建仓 + 可选额外买入(allowExtraEntryAtCeiling)。
- 止盈机制: 固定止盈价
takeProfitPrice,由独立监控器执行。
主要参数 (DB 配置项):
positionSizeUsdc/extraSizeUsdc: 初始与额外建仓金额triggerPriceGt: 超过该价格不建仓(顶区保护)zMin/ampMin: 统计与波动门槛maxMinutesToEnd: 最大剩余分钟数takeProfitPrice: 止盈挂单价格liquidity.sufficientThreshold: 卖盘流动性阈值spikeProtection.count: 插针持续性检查次数schedule.cronExpression: 扫描调度窗口extra(JSON 字符串):weightedThreshold、pricePositionThreshold、liquiditySignalWeight
在 ~/.zshrc 中准备基础密钥配置(Up Bot 依赖助记词派生地址):
export poly_mnemonic="你的 12 个单词助记词"
export poly_mnemonic_idx=0
export RPC_URL=https://polygon-rpc.com如需自定义 CLOB 或数据源,追加:
# export CLOB_HOST=https://clob.polymarket.com
# export BTC_PRICE_SOURCE=https://api.binance.com/api/v3/klines编辑 src/icu/poly/db/seed-convergence-task-configs.js,常改字段:
task.slug: Up/Down 事件 slug,支持${day}${hour}${am_pm}task.symbol:BTC/ETH/SOL等position/riskControl: 建仓、阈值、止盈参数schedule: 扫描时间窗口extra: 扩展风控参数(JSON 字符串)
示例 extra:
extra: '{"weightedThreshold":0.75,"pricePositionThreshold":0.2,"liquiditySignalWeight":0.05}',写入数据库:
node src/icu/poly/db/seed-convergence-task-configs.jsnode src/icu/poly/tail-bot-start-up.js想只跑测试模式,可将配置里的 task.test 设为 true。
- ES 模块 必需(
type: "module") - 4 空格缩进
- 尾随逗号 用于多行对象
- Kebab-case 命名 API 路由(
/api/place-order) - 描述性前缀 用于常量(
DEFAULT_*、SUPPORTED_*)
- 每个
PolyClient方法对应一个测试文件 - 测试位于
test/icu/poly/core/poly-client/ - 使用 Node 内置测试运行器
- 扩展
test-helper.js添加测试固件
使用 log4js 结构化日志:
- 日志存储在
logs/{日期}-{级别}.log - 日志级别:
info、error、debug - 自动按日切分
SQLite + Prisma ORM:
# Schema 变更后重新生成 Prisma 客户端
npx prisma generate
# 应用 schema 迁移
npx prisma db push
# 打开 Prisma Studio(可视化编辑器)
npx prisma studio- 保护密钥安全: 将
.env排除在版本控制外 - 先测试模式: 正式交易前用
test: true运行机器人 - 监控持仓: 定期检查挂单和持仓状态
- 设置限额: 保守配置仓位规模和风险参数
- 审查日志: 检查
logs/目录中的错误和异常
- 最大仓位限制
- 基于时间的入场限制
- 流动性充足性检查
- 价格突变保护机制
- 自动止盈订单
- 监控
logs/目录中的日志文件 - 通过
/bot-orders端点检查机器人订单状态 - 查看数据库记录获取订单历史
- 追踪 USDC 余额和持仓
# 查看最近的机器人订单
curl http://localhost:3001/api/bot-orders?limit=20
# 检查当前持仓
curl http://localhost:3001/api/trades?address=你的地址
# 获取市场信息
curl http://localhost:3001/api/crypto-markets?tag=235欢迎贡献!请遵循以下指南:
- 使用祈使句:
add feature、fix bug - 保持主题简洁
- 相关时引用 issue 编号
- 总结范围和变更
- 列出受影响的端点/模块
- 记录新的环境变量
- UI 变更包含截图
- 说明
.env要求
- 运行
npm test- 确保所有测试通过 - 运行
npm run lint- 检查代码风格 - 必要时更新文档
- 使用真实 API 进行本地测试
ISC
本软件仅用于教育目的。预测市场交易涉及财务风险。作者不对使用本软件造成的任何财务损失负责。请务必自行研究并负责任地交易。
如有问题或需要支持,请在 GitHub 上提 issue。
| 组件 | 命令 | 说明 |
|---|---|---|
| Web 服务器 | npm start |
启动 API + 仪表板 |
| 做市机器人 | node src/icu/poly/auto-maker-bot.js |
双边做市 |
| 网格机器人 | node src/icu/poly/single-market-grid-bot.js |
网格套利 |
| BTC 收敛 | node src/icu/poly/tail-bot-start-up.js |
比特币扫尾策略 |
| 通用收敛 | node src/icu/poly/tail-bot-start-yes.js |
是/否扫尾策略 |
| 运行测试 | npm test |
执行完整测试套件 |
- 3001: Web 服务器默认端口(可通过
PORT环境变量修改)
- SQLite 文件:
src/icu/poly/db/orders.db - Schema 定义:
src/icu/poly/db/schema.prisma
- 日志目录:
logs/ - 命名格式:
YYYYMMDD-{level}.log - 自动轮转: 每日创建新文件