更新 MakerEngine、OffsetMakerEngine 和 TrendEngine,优化撤单逻辑以清理本地缓存中的异常订单,确保在订单流推送重建时状态一致性。

This commit is contained in:
discountry
2025-09-24 02:56:56 +08:00
parent fa3c912d63
commit de96fa5910
3 changed files with 20 additions and 0 deletions
+3
View File
@@ -288,6 +288,7 @@ export class MakerEngine {
} else {
this.tradeLog.push("error", `撤销订单失败: ${String(error)}`);
this.pendingCancelOrders.delete(order.orderId);
this.openOrders = this.openOrders.filter((existing) => existing.orderId !== order.orderId);
}
}
}
@@ -386,6 +387,8 @@ export class MakerEngine {
} else {
this.tradeLog.push("error", `撤销订单失败: ${String(error)}`);
this.pendingCancelOrders.delete(order.orderId);
// 与偏移做市保持一致:移除本地缓存中的异常订单,等待订单流推送重建
this.openOrders = this.openOrders.filter((existing) => existing.orderId !== order.orderId);
}
}
}
+4
View File
@@ -374,6 +374,8 @@ export class OffsetMakerEngine {
} else {
this.tradeLog.push("error", `撤销订单失败: ${String(error)}`);
this.pendingCancelOrders.delete(order.orderId);
// 避免同一轮内重复操作同一张已出错的本地挂单,直接从本地缓存移除,等待下一次订单推送重建
this.openOrders = this.openOrders.filter((existing) => existing.orderId !== order.orderId);
}
}
}
@@ -472,6 +474,8 @@ export class OffsetMakerEngine {
} else {
this.tradeLog.push("error", `撤销订单失败: ${String(error)}`);
this.pendingCancelOrders.delete(order.orderId);
// 与同步撤单路径保持一致,移除本地异常订单,等待订单流重建
this.openOrders = this.openOrders.filter((existing) => existing.orderId !== order.orderId);
}
}
}
+13
View File
@@ -252,10 +252,16 @@ export class TrendEngine {
try {
await this.exchange.cancelAllOrders({ symbol: this.config.symbol });
this.cancelAllRequested = true;
// 清空本地挂单与撤单队列,避免在下一轮中基于过期快照继续操作
this.pendingCancelOrders.clear();
this.openOrders = [];
} catch (err) {
if (isUnknownOrderError(err)) {
this.tradeLog.push("order", "撤单时部分订单已不存在,忽略");
this.cancelAllRequested = true;
// 与成功撤单路径保持一致,立即清空本地缓存,等待订单流推送重建
this.pendingCancelOrders.clear();
this.openOrders = [];
} else {
this.tradeLog.push("error", `撤销挂单失败: ${String(err)}`);
this.cancelAllRequested = false;
@@ -379,6 +385,11 @@ export class TrendEngine {
} catch (err) {
if (isUnknownOrderError(err)) {
this.tradeLog.push("order", "止损前撤单发现订单已不存在");
// 清理本地缓存,避免重复对同一订单执行撤单
for (const id of orderIdList) {
this.pendingCancelOrders.delete(id);
}
this.openOrders = this.openOrders.filter((o) => !orderIdList.includes(o.orderId));
} else {
throw err;
}
@@ -446,6 +457,8 @@ export class TrendEngine {
} catch (err) {
if (isUnknownOrderError(err)) {
this.tradeLog.push("order", "原止损单已不存在,跳过撤销");
// 订单已不存在,移除本地记录,防止后续重复匹配
this.openOrders = this.openOrders.filter((o) => o.orderId !== currentOrder.orderId);
} else {
this.tradeLog.push("error", `取消原止损单失败: ${String(err)}`);
}