Skip to content

Release v2.3.0

Choose a tag to compare

@WrBug WrBug released this 14 Feb 17:48
· 89 commits to main since this release

v2.3.0 改动梳理

一、尾盘策略功能(加密市场尾盘策略)

1. 核心能力

  • 策略 CRUD:创建/更新/删除/查询尾盘策略,支持多账户、多市场。
  • 触发与下单:基于 CLOB 订单簿 WebSocket 订阅,价格满足时间窗口与价差条件时自动下单(固定价 0.99)。
  • 时间窗口:按 K 线周期(如 5 分钟)配置「区间开始~区间结束」秒数,仅在窗口内检查触发。
  • 价格区间:最低价~最高价过滤;最小价差支持三种模式:
    • NONE:不校验价差
    • FIXED:固定点数
    • AUTO:基于币安 BTC 历史 K 线 IQR 剔除后 × 动态系数(50% 基准),按毫秒 progress 计算
  • 投入方式:固定金额(USDC)或比例(账户可用余额百分比)。
  • 结算与收益:轮询未结算触发记录,拉取 activity 成交数据回写 realizedPnl、winnerOutcomeIndex 等,支持总收益与胜率统计。

2. 后端实现要点

  • CryptoTailStrategy / CryptoTailStrategyTrigger 实体与 Repository;迁移脚本 V34~V37。
  • CryptoTailOrderbookWsService:订阅 CLOB Market WS,多策略共享连接,按策略刷新订阅;bids 为空时防护,避免 Index 0 out of bounds。
  • CryptoTailStrategyExecutionService:触发时校验价差、时间窗口,固定价格签名下单,成功/失败写触发记录(含 failReason);取消 FIXED 模式预签,改为触发时再签名。
  • CryptoTailSettlementService:轮询未结算订单,用 activity 成交优先 usdcSize 更新投入金额与盈亏。
  • CryptoTailOrderNotificationPollingService:轮询未通知的成功订单,发送 TG;已结算的触发不再请求 getOrder,直接标记 notification_sent=true。
  • BinanceKlineService / BinanceKlineAutoSpreadService:币安 5m/15m K 线 WS、自动价差(历史 20 根 K 线);健康检查接入币安 API/WS 状态。
  • TelegramNotificationService:尾盘下单成功 TG 通知(轮询实现,修复自调用问题)。

3. 前端与体验

  • 策略列表页(CryptoTailStrategyList):列表/卡片(移动端)、账户筛选、状态筛选;状态列(Switch)PC 端第一列;账户列、时间区间(PC 换行/移动端单行)、价格区间、投入方式、总收益、胜率;操作:编辑、订单、删除。
  • 触发记录弹窗:成功/失败分 Tab,失败展示失败原因;分页;按天时间范围(日历,结束日不超过今天);时间范围卡片、空状态、分页总数;订单按钮文案为「订单」。
  • 表单:编辑时账户与市场不可修改;策略名称 placeholder「选填,留空将自动生成」;最小价差 NONE/FIXED/AUTO 及前端默认与文案。
  • 币安 API 状态:策略页展示币安 API/WS 不可用时的告警与重新检测。
  • 多语言(zh-CN/zh-TW/en)与 i18n 键补全。

4. 配置与部署

  • DOCKER_VERSION:支持从 .env 读取;deploy.sh 调整。
  • CLOB /time 使用 ResponseBody 解析纯数字;PolymarketApiKeyService 等适配。

5. 文档与脚本

  • docs/zh/crypto-tail-strategy-*.md:流程、市场数据、最小价差、任务、UI 说明。
  • docs/crypto-tail-auto-spread-dynamic-coefficient.md:AUTO 价差动态系数说明。
  • scripts/fetch_binance_btc_usdc_klines.py、scripts/ws_binance_btc_usdc_klines.js、scripts/fetch_crypto_minute_markets.py 等。

二、订单相关 Bug 修复(重点)

1. 订单签名 salt 并发碰撞(fix(order))

  • 问题:在高并发或尾盘策略 FIXED 模式预签双单等场景下,generateSalt() 可能生成相同 salt,导致订单冲突或 invalid。
  • 修复:OrderSigningService 使用 AtomicLong + 时间戳 生成 salt,保证同一毫秒内多次调用也唯一(时间戳主位 + 自增序列次位),与 Polymarket/TypeScript SDK 语义兼容。
  • Commit:5074bb4 fix(order): 修复订单签名 salt 并发碰撞问题。

2. 跟单 invalid signature 与 orderbook 不存在(fix(copytrading))

  • 问题:跟单下单时出现 invalid signature;部分市场 orderbook 不存在或 tokenId/合约选择错误。
  • 修复:
    • tokenId:Activity 解析时写入 trade.tokenId=asset,链上解析时写入 tokenId,优先使用与 CLOB 一致。
    • Neg Risk 市场:从 Gamma 读取 negRisk,按市场选择 CTF Exchange 或 Neg Risk Exchange 签约;否则用错合约会 invalid signature。
    • 签名:OrderSigningService 支持 exchangeContract 参数;Credentials 路径与 v 提取、EIP-712 与链上一致。
    • 校验:创建订单前校验 signer 与 account.walletAddress 一致。
    • 数据层:TradeResponse/EventResponse/MarketResponse 增加 tokenId、negRisk 等字段;MarketService 增加 getMarketInfoByTokenId、getNegRiskByConditionId。
  • Commit:63ce410 fix(copytrading): 修复跟单 invalid signature 与 orderbook 不存在。

三、其他重要修复与优化

  • 账户/赎回:无跟单配置的账户也执行自动赎回,支持仅用尾盘策略的账户仓位赎回(PositionCheckService)。
  • 尾盘下单失败:取消重试并打印完整报错信息;已结算触发不再请求 getOrder,直接标记 notification_sent。
  • 健康检查:新增币安 API ping、币安 WebSocket 连接状态;订单簿 bids 空防护;自动价差历史 K 线由 30 根改为 20 根。
  • 前端:加密尾盘策略列表编辑与展示修复;策略列表文案换行、列宽、移动端 Switch 位置与时间区间单行等体验优化。

四、变更统计(v2.2.0..HEAD)

  • 56 个文件变更,约 +5882 / -132 行。
  • 新增后端:Controller/Service/Entity/Repository 尾盘策略全链路;Binance K 线与自动价差;健康检查;跟单 OrderSigning、MarketService、CopyOrderTracking 等改动。
  • 新增前端:CryptoTailStrategyList.tsx 及多语言、API;Layout 入口。
  • 新增 DB 迁移:V34~V37(尾盘策略表、触发记录、结算与通知字段、最小价差字段)。
  • 新增/更新文档与脚本见上。

梳理基于 git log v2.2.0..HEAD 与关键 commit 内容,重点为尾盘策略功能与订单/跟单相关 Bug 修复。