Files
eth_hedge_sim/backend/app/strategy/clock.py
T

41 lines
1.0 KiB
Python

"""日历日分组键;可选周末跳过开仓(上海时区)。"""
from __future__ import annotations
from datetime import datetime
from zoneinfo import ZoneInfo
_SH = ZoneInfo("Asia/Shanghai")
def now_sh(now: datetime | None = None) -> datetime:
return (now or datetime.now(tz=_SH)).astimezone(_SH)
def window_key(now: datetime | None = None) -> str:
"""组号日期键:日历日 YYYYMMDD。"""
return now_sh(now).strftime("%Y%m%d")
def is_weekend(now: datetime | None = None) -> bool:
"""上海时区:周六=5、周日=6。"""
return now_sh(now).weekday() >= 5
def can_open_new(
now: datetime | None = None,
*,
skip_weekends: bool = True,
open_hhmm: str = "16:00",
stop_hhmm: str = "08:00",
) -> bool:
"""是否允许新开仓。开仓窗已取消;可选跳过周六日。持仓平仓不受此限制。"""
_ = open_hhmm, stop_hhmm
if skip_weekends and is_weekend(now):
return False
return True
def group_date_ymd(now: datetime | None = None) -> str:
return window_key(now)