Add one-expiry-per-day open rhythm gate (default on).
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -3,6 +3,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from datetime import datetime
|
||||
from typing import Any
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
_SH = ZoneInfo("Asia/Shanghai")
|
||||
@@ -38,3 +39,34 @@ def can_open_new(
|
||||
|
||||
def group_date_ymd(now: datetime | None = None) -> str:
|
||||
return window_key(now)
|
||||
|
||||
|
||||
def used_expiry_ymds_for_day(db: Any, now: datetime | None = None) -> set[str]:
|
||||
"""
|
||||
上海日历日已开过的期权到期日(groups.expiry_ymd,YYMMDD)。
|
||||
按当日组号 G-{YYYYMMDD}-% 统计;含已平仓,用于「同到期一天只开一次」。
|
||||
"""
|
||||
wkey = window_key(now)
|
||||
rows = db.fetchall(
|
||||
"SELECT DISTINCT expiry_ymd FROM groups WHERE group_id LIKE ?",
|
||||
(f"G-{wkey}-%",),
|
||||
)
|
||||
out: set[str] = set()
|
||||
for r in rows or []:
|
||||
y = str(r["expiry_ymd"] or "").strip()
|
||||
if y:
|
||||
out.add(y)
|
||||
return out
|
||||
|
||||
|
||||
def expiry_blocked_by_one_per_day(
|
||||
expiry_ymd: str | None,
|
||||
used: set[str],
|
||||
*,
|
||||
enabled: bool = True,
|
||||
) -> bool:
|
||||
"""开启时:候选到期已在当日用过则拦截。"""
|
||||
if not enabled:
|
||||
return False
|
||||
y = str(expiry_ymd or "").strip()
|
||||
return bool(y and y in used)
|
||||
|
||||
Reference in New Issue
Block a user