Skip to content

foreverchens/poly-trade

Repository files navigation

Polymarket 交易机器人 & 分析平台

一个功能完善的 Polymarket 预测市场自动化交易系统,包含多种交易策略、实时市场分析和 Web 仪表板。

🌟 核心功能

交易机器人

  • 自动做市机器人 - 基于订单簿深度的动态报价做市
  • 网格交易机器人 - 单市场网格策略,系统化低买高卖
  • 扫尾收敛策略 - 事件驱动的加密货币市场收敛交易
    • Up Bot: 专注加密货币"涨跌"类型尾盘策略(Up/Down)
    • Yes Bot: 通用的是/否市场收敛策略

分析与监控

  • 实时加密货币市场数据可视化
  • 多时间周期历史价格图表
  • 订单簿深度分析
  • 持仓追踪与盈亏监控
  • 交易历史与执行日志

Web 仪表板

  • 加密市场: 浏览和分析活跃的预测市场
  • 控制面板: 实时市场概览与分析
  • 机器人订单: 追踪自动交易活动和订单历史

REST API

  • 市场数据接口
  • 订单下单与管理
  • 持仓与余额查询
  • 历史数据访问

📁 项目结构

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
  • npmyarn
  • 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=BTCUSDT

⚠️ 安全警告: 切勿将私钥或助记词写入仓库,建议仅存在本机 shell 配置中!

🎯 使用方法

启动 Web 服务器 & 仪表板

npm start

访问仪表板:

运行交易机器人

自动做市机器人

node src/icu/poly/auto-maker-bot.js

网格交易机器人

node 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.js

📡 API 接口

市场数据

获取加密货币市场

GET /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}

🤖 交易策略详解

1. 自动做市机器人

策略原理: 基于订单簿深度的动态报价做市。

核心参数:

  • MIN_QUOTE_USD: 最小订单金额(默认 $20)
  • SAFE_DEPTH_USD: 安全深度阈值(默认 $2000)
  • TICKS_FROM_MID: 与中间价的跳动点差(2-3 档)

工作流程:

  1. 监控订单簿双边深度
  2. 在足够流动性后方挂买单
  3. 根据市场状况动态调整价格
  4. 持久化状态支持重启恢复

2. 网格交易机器人

策略原理: 在预定义网格水平内系统化低买高卖。

核心参数:

  • GRID: 价格网格数组 [1, 0.99, 0.97, ..., 0]
  • tradeUsd: 每个网格档位的交易金额
  • initPosition: 初始仓位倍数

工作流程:

  1. 按当前市价建立初始仓位
  2. 在相邻网格档位挂买卖单
  3. 成交后移动网格档位
  4. 捕获价格振荡产生的利润

3. 扫尾收敛策略

策略原理: 基于价格收敛的统计套利,在事件临近结算时入场。

核心参数:

  • zMin: 最小 z-score 阈值
  • ampMin: 最小小时振幅
  • maxMinutesToEnd: 距离结束的最大分钟数
  • triggerPriceGt: 入场价格阈值

工作流程:

  1. 扫描临近结算的市场
  2. 使用 z-score 分析识别偏离
  3. 满足统计标准时建仓
  4. 管理止盈和风险控制

特化版本:

  • Up Bot: 专为加密货币 Up/Down 市场优化
  • Yes Bot: 通用的是/否市场收敛

4. Up 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 字符串): weightedThresholdpricePositionThresholdliquiditySignalWeight

🧩 Up Bot 个人配置与使用

1) 环境变量

~/.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

2) 生成/更新 Up Bot 任务配置

编辑 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.js

3) 启动 Up Bot

node 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
  • 日志级别:infoerrordebug
  • 自动按日切分

数据库

SQLite + Prisma ORM:

# Schema 变更后重新生成 Prisma 客户端
npx prisma generate

# 应用 schema 迁移
npx prisma db push

# 打开 Prisma Studio(可视化编辑器)
npx prisma studio

🛡️ 安全与风险管理

最佳实践

  1. 保护密钥安全: 将 .env 排除在版本控制外
  2. 先测试模式: 正式交易前用 test: true 运行机器人
  3. 监控持仓: 定期检查挂单和持仓状态
  4. 设置限额: 保守配置仓位规模和风险参数
  5. 审查日志: 检查 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 featurefix bug
  • 保持主题简洁
  • 相关时引用 issue 编号

Pull Request

  • 总结范围和变更
  • 列出受影响的端点/模块
  • 记录新的环境变量
  • UI 变更包含截图
  • 说明 .env 要求

提交前检查

  1. 运行 npm test - 确保所有测试通过
  2. 运行 npm run lint - 检查代码风格
  3. 必要时更新文档
  4. 使用真实 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
  • 自动轮转: 每日创建新文件

About

poly-trade

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published