From 2013a2eb70c0607e186051abd389b1aef40bb283 Mon Sep 17 00:00:00 2001 From: WrBug Date: Wed, 18 Feb 2026 03:16:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=B0=BE=E7=9B=98=E7=AD=96=E7=95=A5=20b?= =?UTF-8?q?ook=20=E5=8F=96=E6=9C=80=E9=AB=98=E4=B9=B0=E4=BB=B7=E4=B8=BA=20?= =?UTF-8?q?bestBid=EF=BC=8C=E7=A7=BB=E9=99=A4=20tokenToEntries=20null=20?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - book 事件 bids 为升序,改为遍历取最高价作为 bestBid(修复 marketPrice 恒为 0.01) - 移除 onBestBid 中 tokenToEntries null 的 debug 日志 Co-authored-by: Cursor --- .../cryptotail/CryptoTailOrderbookWsService.kt | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/cryptotail/CryptoTailOrderbookWsService.kt b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/cryptotail/CryptoTailOrderbookWsService.kt index 7ad37b3..8797df3 100644 --- a/backend/src/main/kotlin/com/wrbug/polymarketbot/service/cryptotail/CryptoTailOrderbookWsService.kt +++ b/backend/src/main/kotlin/com/wrbug/polymarketbot/service/cryptotail/CryptoTailOrderbookWsService.kt @@ -10,6 +10,7 @@ import com.wrbug.polymarketbot.service.binance.BinanceKlineAutoSpreadService import com.wrbug.polymarketbot.util.RetrofitFactory import com.wrbug.polymarketbot.util.createClient import com.wrbug.polymarketbot.util.fromJson +import com.wrbug.polymarketbot.util.gt import com.wrbug.polymarketbot.util.toJson import com.wrbug.polymarketbot.util.toSafeBigDecimal import kotlinx.coroutines.CoroutineScope @@ -136,8 +137,13 @@ class CryptoTailOrderbookWsService( val assetId = (json.get("asset_id") as? com.google.gson.JsonPrimitive)?.asString ?: return val bids = json.get("bids") as? com.google.gson.JsonArray if (bids == null || bids.isEmpty) return - val firstBid = bids.get(0) as? com.google.gson.JsonObject - val bestBid = (firstBid?.get("price") as? com.google.gson.JsonPrimitive)?.asString?.toSafeBigDecimal() + // Polymarket book 的 bids 为价格升序,bids[0] 为最低买价;bestBid 应取最高买价 + var bestBid: BigDecimal? = null + for (i in 0 until bids.size()) { + val level = bids.get(i) as? com.google.gson.JsonObject ?: continue + val p = (level.get("price") as? com.google.gson.JsonPrimitive)?.asString?.toSafeBigDecimal() ?: continue + if (bestBid == null || p.gt(bestBid)) bestBid = p + } if (bestBid != null) onBestBid(assetId, bestBid) } @@ -157,10 +163,7 @@ class CryptoTailOrderbookWsService( private fun onBestBid(tokenId: String, bestBid: BigDecimal) { if (closedForNoStrategies.get()) return val entries = tokenToEntries.get()[tokenId] - if (entries == null) { - logger.debug("tokenToEntries null: $tokenId") - return - } + if (entries == null) return val nowSeconds = System.currentTimeMillis() / 1000 for (e in entries) { val windowStart = e.periodStartUnix + e.strategy.windowStartSeconds