fix: 清理幽灵止盈止损监控并修正仓位上限冻结误触发

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-24 14:09:42 +08:00
parent 5af04ef661
commit 23d0f1d6fa
4 changed files with 176 additions and 30 deletions
+4 -4
View File
@@ -227,7 +227,7 @@ def reduce_cooloff_after_journal(conn, *, trading_day: str, now: Optional[dateti
)
def get_risk_status(conn, *, now: Optional[datetime] = None) -> dict:
def get_risk_status(conn, *, now: Optional[datetime] = None, active_count: Optional[int] = None) -> dict:
def _load() -> dict:
ensure_account_risk_schema(conn)
row = conn.execute("SELECT * FROM account_risk_state WHERE id=1").fetchone()
@@ -244,7 +244,7 @@ def get_risk_status(conn, *, now: Optional[datetime] = None) -> dict:
now_ms = _now_ms(now)
daily = int(_row_get(row, "daily_frozen") or 0) == 1
until = _row_get(row, "cooloff_until_ms")
active = count_active_trade_monitors(conn)
active = count_active_trade_monitors(conn) if active_count is None else int(active_count)
mx = max_active_positions()
pos_limit = active >= mx
@@ -295,8 +295,8 @@ def get_risk_status(conn, *, now: Optional[datetime] = None) -> dict:
return _db_retry(_load)
def assert_can_open(conn) -> Optional[str]:
rs = get_risk_status(conn)
def assert_can_open(conn, *, active_count: Optional[int] = None) -> Optional[str]:
rs = get_risk_status(conn, active_count=active_count)
if not rs.get("can_trade"):
return rs.get("reason") or "当前不可开仓"
return None