Release v2.3.0
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:
5074bb4fix(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。
- tokenId:Activity 解析时写入
- Commit:
63ce410fix(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 修复。