diff --git a/backend/app/jobs/daily_pipeline.py b/backend/app/jobs/daily_pipeline.py index 5ed61fd..fdc38f5 100644 --- a/backend/app/jobs/daily_pipeline.py +++ b/backend/app/jobs/daily_pipeline.py @@ -2,7 +2,8 @@ 调度: 09:10 盘前 — 同步个股维表 instruments (全量覆盖) - 15:30 盘后 — 日K同步 + 增量除权因子 + enriched 计算 + 刷新视图 + 15:35 盘后 — 日K同步 + 增量除权因子 + enriched 计算 + 刷新视图 + (默认 15:35: 盘后固定价 15:30 终止 + 供应商日线定稿缓冲, 见 preferences) 盘后同步策略: 日 K: QuoteService 交易时段已实时落盘 → 有数据时跳过 batch,首次拉 1 年区间 @@ -1123,7 +1124,7 @@ def start_scheduler(repo: KlineRepository, capset: CapabilitySet) -> AsyncIOSche """启动调度器。 工作日 09:10 — 同步个股维表 - 工作日 HH:MM — 盘后管道(时间由用户偏好决定,默认 15:30) + 工作日 HH:MM — 盘后管道(时间由用户偏好决定,默认 15:35) """ from app.services import preferences sched = preferences.get_pipeline_schedule() diff --git a/backend/app/services/preferences.py b/backend/app/services/preferences.py index 45ffdda..210761a 100644 --- a/backend/app/services/preferences.py +++ b/backend/app/services/preferences.py @@ -487,17 +487,23 @@ def set_pipeline_index_symbols(symbols: str) -> str: def get_pipeline_schedule() -> dict: - """返回盘后管道调度时间 {"hour": 15, "minute": 30}。""" - d = load().get("pipeline_schedule", {"hour": 15, "minute": 30}) - return {"hour": d.get("hour", 15), "minute": d.get("minute", 30)} + """返回盘后管道调度时间 {"hour": 15, "minute": 35}。 + + 默认 15:35 而非 15:30 整: 盘后固定价交易 15:30 才彻底结束, 且供应商 + 聚合含盘后量的官方日K需要时间 —— 整点即拉可能写入不含盘后成交的 + 日线, 也与 quote 定版重试窗口终点 (15:30) 精确重合。留 5 分钟缓冲。 + """ + d = load().get("pipeline_schedule", {"hour": 15, "minute": 35}) + return {"hour": d.get("hour", 15), "minute": d.get("minute", 35)} def set_pipeline_schedule(hour: int, minute: int) -> dict: h = max(0, min(23, hour)) m = max(0, min(59, minute)) - # 盘后不早于 15:00 - if h * 60 + m < 15 * 60: - h, m = 15, 0 + # 盘后管道不早于 15:35: 15:30 盘后固定价才终止 (量/额此前仍会变), + # 且供应商官方日线定稿需要缓冲 —— 更早启动可能固化不含盘后量的当日分区 + if h * 60 + m < 15 * 60 + 35: + h, m = 15, 35 save({"pipeline_schedule": {"hour": h, "minute": m}}) return {"hour": h, "minute": m} diff --git a/docs/features.md b/docs/features.md index 495b78a..03a8afa 100644 --- a/docs/features.md +++ b/docs/features.md @@ -34,7 +34,7 @@ - **原子信号**:MA / MACD 金叉死叉 · N 日新高新低 · 布林突破 - **复权**:基于除权因子自动前复权,回测与指标口径一致 -盘后管道(15:30 CST 自动触发)会重新拉日 K + 重算 enriched 表。 +盘后管道(默认 15:35 CST 自动触发; 盘后固定价 15:30 终止 + 供应商日线定稿缓冲)会重新拉日 K + 重算 enriched 表。 --- @@ -202,7 +202,7 @@ timeseries 模式的表 (如人气排行) 默认只能从开启拉取之日起 ### 盘后定时管道 -APScheduler 15:30 CST 自动:拉日 K → 重算 enriched 表 → 跑监控规则。 +APScheduler 默认 15:35 CST 自动:拉日 K → 重算 enriched 表 → 跑监控规则。 ### 令牌桶限流