"""K 线周期常量与每周期 bar 数 / 缓存 TTL。""" CHART_INTERVALS: tuple[str, ...] = ("5m", "15m", "30m", "1h", "4h", "1d", "1w") LONG_INTERVALS: frozenset[str] = frozenset({"1d", "1w"}) # 1d 及以上 500 根;以下 1000 根 INTERVAL_LIMITS: dict[str, int] = { "5m": 1000, "15m": 1000, "30m": 1000, "1h": 1000, "4h": 1000, "1d": 500, "1w": 500, } # 预取 / 本地 freshness(分钟) INTERVAL_CACHE_MINUTES: dict[str, int] = { "5m": 5, "15m": 15, "30m": 15, "1h": 30, "4h": 30, "1d": 60, "1w": 60, } def validate_interval(interval: str) -> str: iv = interval.lower().strip() if iv not in CHART_INTERVALS: raise ValueError(f"unsupported interval: {interval}") return iv def limit_for_interval(interval: str) -> int: iv = validate_interval(interval) return INTERVAL_LIMITS[iv] def cache_minutes_for_interval(interval: str) -> int: iv = validate_interval(interval) return INTERVAL_CACHE_MINUTES[iv]