feat dev6

This commit is contained in:
2026-09-01 14:28:49 +08:00
parent dedbf63a92
commit 556e21d624
27 changed files with 334 additions and 144 deletions

View File

@@ -3,12 +3,13 @@
from __future__ import annotations
import secrets
import logging as log
from dataclasses import dataclass
from datetime import datetime, timedelta
from threading import Lock
from typing import Any
from sdk import ORDER_SIDE_BY_OFFSET, Client, OrderItem
from sdk import APIError, ORDER_SIDE_BY_OFFSET, Client, OrderItem
# 表示委托仍在处理、可能继续成交的 QMT 状态。
BUSY_STATUSES = {"48", "49", "50", "51", "52", "55"}
@@ -57,6 +58,7 @@ class OrderBook:
now_timestamp = current.timestamp()
data: list[OrderItem] = []
lock: dict[str, float] = {}
canceled = 0
for item in orders:
# 不处理状态不对的
@@ -69,6 +71,8 @@ class OrderBook:
and current - item.created_at > self.cancel_timeout_sec
):
client.cancel_by_id(item.id)
canceled += 1
log.info("[订单] 超时撤单,代码=%s,方向=%s,柜台订单=%s", item.code, item.side, item.id)
continue
# 缓存本次有效订单
@@ -86,20 +90,27 @@ class OrderBook:
with self.mutex:
self.data = data
self.lock = lock
log.info("[订单] 刷新完成,跟踪=%d,处理中=%d,撤销=%d", len(data), len(lock), canceled)
def place(self, request: PlaceOrderRequest) -> bool:
"""按最新价提交委托,并立即写入本地方向锁。"""
result = request.client.passorder_latest_tagged(
request.op,
request.code,
request.volume,
request.strategy_name,
request.order_id,
)
try:
result = request.client.passorder_latest_tagged(
request.op,
request.code,
request.volume,
request.strategy_name,
request.order_id,
)
except APIError as exc:
log.exception("[订单] 下单失败,代码=%s,本地订单=%sHTTP状态=%d,错误=%s", request.code, request.order_id, exc.status_code, exc.message or str(exc))
return False
if not isinstance(result, dict):
log.warning("[订单] 下单失败,代码=%s,本地订单=%s,原因=响应格式无效", request.code, request.order_id)
return False
order_ref = str(result.get("order_ref") or "").strip().lower()
if result.get("status") != "success" or order_ref in {"", "unknown", "none"}:
log.warning("[订单] 下单被拒绝,代码=%s,本地订单=%s,状态=%s,柜台订单=%s", request.code, request.order_id, result.get("status"), order_ref)
return False
side = ORDER_SIDE_BY_OFFSET.get(str(request.op), "")
@@ -117,4 +128,5 @@ class OrderBook:
key = f"{side}-{request.code}"
self.data.append(pending)
self.lock[key] = pending.created_at.timestamp()
log.info("[订单] 下单已受理,代码=%s,方向=%s,数量=%d,本地订单=%s,柜台订单=%s", request.code, side, request.volume, request.order_id, order_ref)
return True