Files
PolyHermes/backend
WrBug 20df471683 feat: 回测任务添加最大仓位参数支持
参考跟单配置的实现,为回测任务添加最大仓位金额限制功能。

后端改动:
- 添加数据库迁移文件 V31__add_backtest_max_position_value.sql
- BacktestTask 实体添加 maxPositionValue 字段(BigDecimal?,NULL表示不启用)
- BacktestCreateRequest 添加 maxPositionValue 字段
- BacktestConfigDto 添加 maxPositionValue 字段
- BacktestService 处理 maxPositionValue 的创建、详情和复制
- BacktestExecutionService.taskToCopyTrading 映射 maxPositionValue 参数
- BacktestExecutionService.executeBacktest 在买入逻辑中添加仓位检查
  * 检查条件:当前仓位 + 买入金额 <= 最大仓位
  * 仓位价值计算:quantity * avgPrice
  * 超过限制时跳过该笔买入并记录详细日志
  * 按市场+方向(marketId + outcomeIndex)分别检查

前端改动:
- BacktestList 表单添加最大仓位金额输入框(可选字段)
- 创建回测任务时包含 maxPositionValue
- 回测任务详情中显示 maxPositionValue(仅在配置了时显示)
- 默认最大每日订单数从 50 改为 100
- 多语言翻译新增:
  * backtest.maxPositionValue: 最大仓位金额 / 最大倉位金額 / Max Position Value
  * maxPositionValuePlaceholder: 留空表示不启用最大仓位限制

功能特点:
- 可选参数:留空或为 null 时表示不启用该限制,保持向后兼容
- 单市场单方向限制:按 marketId 和 outcomeIndex 分别计算和限制
- 精确计算:使用 BigDecimal 进行数值比较
- 详细日志:超过限制时记录当前仓位、买入金额、总计等详细信息

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-09 02:25:24 +08:00
..

Polymarket Bot Backend

Polymarket 预测市场机器人后端服务

功能特性

  • 封装 Polymarket CLOB API(订单操作、市场数据、交易数据)
  • 封装 Polymarket Gamma API(市场、事件、系列查询)
  • WebSocket 转发服务(转发前端 WebSocket 连接到 Polymarket RTDS
  • 统一 API 响应格式
  • 分类验证(仅支持 sports 和 crypto
  • 工具类支持(安全转换、数学运算、HTTP 客户端等)

技术栈

  • Spring Boot 3.2.0
  • Kotlin 1.9.20
  • Retrofit 2.9.0
  • OkHttp 4.12.0
  • Java-WebSocket 1.5.4
  • MySQL 8.2.0
  • Flyway(数据库迁移)

项目结构

backend/
├── src/
│   ├── main/
│   │   ├── kotlin/com/wrbug/polymarketbot/
│   │   │   ├── api/              # API 接口定义
│   │   │   ├── config/           # 配置类
│   │   │   ├── controller/      # 控制器
│   │   │   ├── dto/              # 数据传输对象
│   │   │   ├── service/          # 服务层
│   │   │   ├── util/             # 工具类
│   │   │   └── websocket/        # WebSocket 处理
│   │   └── resources/
│   │       ├── application.properties
│   │       └── db/migration/    # Flyway 迁移脚本
│   └── test/
└── build.gradle.kts

配置说明

环境变量

  • DB_USERNAME: 数据库用户名(默认: root
  • DB_PASSWORD: 数据库密码(默认: password
  • SERVER_PORT: 服务器端口(默认: 8000
  • CRYPTO_SECRET_KEY: 加密密钥(用于加密存储私钥和 API Key,建议设置)

application.properties

主要配置项:

  • 数据库连接配置
  • Polymarket API 地址配置
  • WebSocket 地址配置

API 接口

市场相关

  • POST /api/markets/list - 获取市场列表
  • POST /api/markets/detail - 获取市场详情
  • POST /api/markets/search - 搜索市场
  • POST /api/markets/sports - 获取体育市场
  • POST /api/markets/crypto - 获取加密货币市场

WebSocket

  • WS /ws/polymarket - WebSocket 连接端点(转发到 Polymarket RTDS

响应格式

所有接口统一返回以下格式:

{
  "code": 0,
  "data": {},
  "msg": ""
}
  • code: 0 表示成功,非 0 表示失败
  • data: 响应数据
  • msg: 响应消息

错误码

  • 0: 成功
  • 1001-1999: 参数错误
  • 2001-2999: 认证/权限错误
  • 3001-3999: 资源不存在
  • 4001-4999: 业务逻辑错误
  • 5001-5999: 服务器内部错误

运行

# 构建项目
./gradlew build

# 运行应用
./gradlew bootRun

注意事项

  1. 仅支持 Polymarket 平台
  2. 仅支持 sportscrypto 两个分类
  3. WebSocket 转发需要配置正确的 Polymarket RTDS 地址
  4. 生产环境需要配置正确的 CORS 策略