This commit is contained in:
2026-09-12 16:25:34 +08:00
parent 7a7049ce44
commit 554dd0f4cb
13 changed files with 646 additions and 93 deletions

View File

@@ -33,9 +33,8 @@ class OrderBook:
"""线程安全的活动委托缓存。"""
def __init__(
self, order_prefix: str, lock_timeout_sec: int = 180, cancel_timeout_sec: float = 30
self, lock_timeout_sec: int = 180, cancel_timeout_sec: float = 30
) -> None:
self.order_prefix = order_prefix
self.lock_timeout_sec = max(1, lock_timeout_sec)
self.cancel_timeout_sec = timedelta(seconds=cancel_timeout_sec)
self.data: list[OrderItem] = []
@@ -59,7 +58,7 @@ class OrderBook:
def _busy_key(side: str, code: str) -> str:
return f"{side}-{code}"
def refresh(self, client: Client, orders: list[OrderItem]) -> None:
def refresh(self, client: Client, orders: list[OrderItem], *, cancel_prefix: str | None = None) -> None:
"""用账户快照刷新委托,并撤销超时的活动委托。"""
current = datetime.now()
data: list[OrderItem] = []
@@ -77,7 +76,8 @@ class OrderBook:
created_at = item.created_at
if (
created_at is not None
and item.local_order_id.startswith(f"{self.order_prefix}-")
and not item.local_order_id.startswith('IPO-')
and (cancel_prefix is None or item.local_order_id.startswith(cancel_prefix))
and status in CANCELABLE_STATUSES
and current - created_at > self.cancel_timeout_sec
):