fix: 修复仓位轮询检查逻辑,避免刚创建的订单被误判为已卖出
- 当仓位不存在时,只有当订单创建时间超过30秒才认为仓位被出售 - 避免因API延迟导致刚创建的订单被误判为已卖出状态
This commit is contained in:
+18
-3
@@ -372,9 +372,24 @@ class PositionCheckService(
|
|||||||
val position = positionsByAccountAndMarket[positionKey]?.firstOrNull()
|
val position = positionsByAccountAndMarket[positionKey]?.firstOrNull()
|
||||||
|
|
||||||
if (position == null) {
|
if (position == null) {
|
||||||
// 仓位不存在,更新所有订单状态为已卖出
|
// 仓位不存在,检查订单创建时间
|
||||||
val currentPrice = getCurrentMarketPrice(marketId, outcomeIndex)
|
// 只有当订单创建时间超过30秒时,才认为仓位被出售了
|
||||||
updateOrdersAsSold(orders, currentPrice, copyTrading.id, marketId, outcomeIndex)
|
// 这样可以避免刚创建的订单因为API延迟而被误判为已卖出
|
||||||
|
val now = System.currentTimeMillis()
|
||||||
|
val ordersToMarkAsSold = orders.filter { order ->
|
||||||
|
val orderAge = now - order.createdAt
|
||||||
|
orderAge > 30000 // 30秒 = 30000毫秒
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ordersToMarkAsSold.isNotEmpty()) {
|
||||||
|
// 有订单创建时间超过30秒,认为仓位已被出售
|
||||||
|
val currentPrice = getCurrentMarketPrice(marketId, outcomeIndex)
|
||||||
|
updateOrdersAsSold(ordersToMarkAsSold, currentPrice, copyTrading.id, marketId, outcomeIndex)
|
||||||
|
logger.debug("仓位不存在且订单创建时间超过30秒,标记为已卖出: marketId=$marketId, outcomeIndex=$outcomeIndex, orderCount=${ordersToMarkAsSold.size}")
|
||||||
|
} else {
|
||||||
|
// 订单创建时间不足30秒,可能是刚创建的订单,暂时不处理
|
||||||
|
logger.debug("仓位不存在但订单创建时间不足30秒,暂不标记为已卖出: marketId=$marketId, outcomeIndex=$outcomeIndex, orderCount=${orders.size}, oldestOrderAge=${orders.minOfOrNull { now - it.createdAt }?.let { "${it}ms" } ?: "N/A"}")
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
// 有仓位,按订单下单顺序(FIFO)更新状态
|
// 有仓位,按订单下单顺序(FIFO)更新状态
|
||||||
// 如果仓位数量 >= 订单数量总和,所有订单完全成交
|
// 如果仓位数量 >= 订单数量总和,所有订单完全成交
|
||||||
|
|||||||
Reference in New Issue
Block a user