feat(market): 交易日探针——工作日休市剔除行情轮询与分钟增量

- 探测链: fuyao 交易日历(权威) → tickflow 行情时间戳(5只篮子 OR 判定, 9:40 开盘缓冲窗) → None 未知回退周几近似
- 周末零成本直判; 结论分档 TTL 缓存 (交易日 1h / 休市 30min 自愈 / 未知 5min 防重试风暴), 纯读不落盘
- 实时行情: 休市日跳过轮询/盘前预热/定版, fuyao 周五数据误归属从源头消除
- 分钟增量: gate_reason 新增 holiday; 探针未知时空轮升级机制仍为第二道防线
- 实测(周六): 三层链路真实验证, fuyao 日历连调休周一均正确判休市
This commit is contained in:
shy3130
2026-08-30 19:05:28 +08:00
parent 3b09fac15e
commit 9d290f003d
7 changed files with 448 additions and 1 deletions
+10
View File
@@ -207,6 +207,16 @@ class FuyaoClient:
rows = data.get("item")
return rows if isinstance(rows, list) else []
def trading_days(self) -> list[dict]:
"""近一年 A 股交易日序列 (固定窗口 [今日-1年, 今日], 无入参)。
返回 data.item 原始行: {date_ms(上海零点), date(yyyyMMdd)}。
供交易日探针判定「今天在列表内 ⇔ 交易日」。
"""
data = self._get("/api/a-share/calendar/trading-days", {})
rows = data.get("item")
return rows if isinstance(rows, list) else []
# ---- 市场 dump ----
def dump_download_url(self, dump_kind: str) -> dict:
"""获取 dump 预签名下载信息(约 300s 有效)。
+9
View File
@@ -878,6 +878,15 @@ class FuyaoProvider:
rows_out.append(row)
return pl.DataFrame(rows_out) if rows_out else pl.DataFrame()
def trading_days(self) -> set:
"""近一年交易日集合 (供交易日探针)。失败抛 FuyaoError, 由探针兜为未知。"""
rows = self._get_client().trading_days()
return {
d
for d in (_date_of_ms(r.get("date_ms")) for r in rows)
if d is not None
}
def _derive_bps(self, symbols: list[str]) -> dict[str, float]:
"""估值快照 pb_mrq 与行情快照最新价同源同刻 → bps = price / pb_mrq。