fix: 尾盘策略 book 取最高买价为 bestBid,移除 tokenToEntries null 日志

- book 事件 bids 为升序,改为遍历取最高价作为 bestBid(修复 marketPrice 恒为 0.01)
- 移除 onBestBid 中 tokenToEntries null 的 debug 日志

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
WrBug
2026-02-18 03:16:22 +08:00
parent de89175c8e
commit 2013a2eb70
@@ -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