Gate one-open-per-expiry by historical expiry_ymd across days.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-08-03 07:35:44 +08:00
parent 5c334a4d89
commit a10ecf7409
10 changed files with 49 additions and 44 deletions
+11 -7
View File
@@ -41,15 +41,15 @@ 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]:
def used_expiry_ymds(db: Any, now: datetime | None = None) -> set[str]:
"""
海日历日已开过的期权到期日(groups.expiry_ymdYYMMDD)。
按当日组号 G-{YYYYMMDD}-% 统计;含已平仓,用于「同到期一天只开一次」
历史上已开过的期权到期日(groups.expiry_ymdYYMMDD)。
跨日历日:任一已开组(含已平仓)占用该到期后,不可再开同到期,只能盯下一档
"""
wkey = window_key(now)
_ = now
rows = db.fetchall(
"SELECT DISTINCT expiry_ymd FROM groups WHERE group_id LIKE ?",
(f"G-{wkey}-%",),
"""SELECT DISTINCT expiry_ymd FROM groups
WHERE expiry_ymd IS NOT NULL AND TRIM(expiry_ymd) != ''"""
)
out: set[str] = set()
for r in rows or []:
@@ -59,6 +59,10 @@ def used_expiry_ymds_for_day(db: Any, now: datetime | None = None) -> set[str]:
return out
# 兼容旧名(语义已改为跨日/历史到期占用)
used_expiry_ymds_for_day = used_expiry_ymds
def pending_residual_expiry_ymds(db: Any) -> set[str]:
"""待到期结算的残留期权到期日(YYMMDD);监控/下一组开仓应跳过这些档。"""
rows = db.fetchall(
@@ -79,7 +83,7 @@ def expiry_blocked_by_one_per_day(
*,
enabled: bool = True,
) -> bool:
"""开启时:候选到期已在当日用过则拦截。"""
"""开启时:候选到期已在历史上用过则拦截。"""
if not enabled:
return False
y = str(expiry_ymd or "").strip()