Skip to content

fix: 分钟线增量改回溯窗口,修复历史空洞被永久跳过 (#7)#8

Closed
xbfighting wants to merge 1 commit into
masterfrom
fix/minute-gaps
Closed

fix: 分钟线增量改回溯窗口,修复历史空洞被永久跳过 (#7)#8
xbfighting wants to merge 1 commit into
masterfrom
fix/minute-gaps

Conversation

@xbfighting
Copy link
Copy Markdown
Owner

Summary

修复 #7

  • cli.py: 分钟线增量起点 latest + 1latest - 30LOOKBACK_DAYS=30)。配合 ON CONFLICT DO NOTHING 自动补 TDX .lc5 拉取滞后造成的空洞。
  • scripts/backfill_minute_gaps.py: 一次性脚本,全量重读 .lc5 修旧空洞。
  • README / CLAUDE.md 同步说明。

不在本 PR 范围(独立 follow-up):

  • sync_all_daily_data 用全局 max 而非 per-stock,类似但不同的隐患
  • get_latest_datetime_by_code 只查 minute5 表导致的多表 cursor 不一致 — 当前 PR 通过回溯窗口已自然缓解

Test plan

  • 用 issue 复现 SQL 看当前空洞分布:
    SELECT DATE(date), COUNT(DISTINCT code) FROM minute60_data WHERE date >= '2026-04-25' GROUP BY DATE(date) ORDER BY DATE(date);
  • python scripts/backfill_minute_gaps.py --dry-run --code sz000001 确认流程
  • python scripts/backfill_minute_gaps.py --code sz000001 单只回填,对比该股票 04-28/29 数据是否补上
  • 跑全量 python scripts/backfill_minute_gaps.py,重新跑复现 SQL 确认空洞消失
  • python main.py sync 看耗时增加是否可接受(预期 +30-60s)

🤖 Generated with Claude Code

cli.py: 增量起点从 latest+1 改为 latest-30 天。原有逻辑在 TDX .lc5
拉取滞后场景下会形成永久空洞——后置日期入库后 cursor 推进,前置缺日
再也回不来。回溯窗口配合 ON CONFLICT DO NOTHING 自动补缺,零副作用。

scripts/backfill_minute_gaps.py: 一次性脚本,全量重读修复旧数据。

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@xbfighting
Copy link
Copy Markdown
Owner Author

Compliance Check

Done Criteria

按 Issue #7 核心诉求 — (a) 修旧空洞 (b) 防再发生 (c) 不破坏现有 sync 流程:

  • a. 修旧空洞: PASS — scripts/backfill_minute_gaps.pystart_date='1990-01-01'incremental=Truecli.py:54if incremental and not start_date: 因 start_date truthy 跳过 lookback 分支;incremental=Truesave_incremental() → ON CONFLICT DO NOTHING,只插真正缺失行。
  • b. 防再发生: PASS — LOOKBACK_DAYS=30 加在 cli.py:27,起点改 latest - timedelta(days=LOOKBACK_DAYS)(line 57)。latest=None 边界:if latest: (line 56) 正确放行,start_date 保持 None 走全量,无边界 bug。
  • c. 不破坏现有 sync 流程: PASS — sync 命令仍调 sync_all_min_data(..., start_date=None) 让 per-stock lookback 生效;日线逻辑未动;minutes --auto-start 老路径是预存在、明确不在范围。

Standards Check

  • 无 TODO/FIXME
  • 无 debug 代码
  • 无硬编码 secret
  • 无注释掉的死代码
  • 无 out-of-scope 改动 — 仅 src/cli.py / scripts/backfill_minute_gaps.py / README.md / CLAUDE.md,全部约定范围内
  • README 更新(backfill 用法 + 2026-05 起的注解)
  • CLAUDE.md 更新(关键数据流补回溯窗口)

Violations Found

None.

Risks

  • minutes --auto-start 子命令路径(cli.py:391)仍是 latest + timedelta(days=1)。预存在、明确不在本 PR 范围;建议另开 follow-up 统一到 LOOKBACK_DAYS。
  • per-stock cursor 只查 minute5_data。若某股票 minute15/30/60 有空洞但 5min 没有,30 天窗口内会被自动补齐(因 4 张表从同一 processed 数据集写);超出 30 天的则需 backfill 脚本兜底。

Verdict

APPROVE

Rationale

三条 Done Criteria 均满足,边界处理正确;无代码质量或安全问题;改动均在范围内。

@xbfighting
Copy link
Copy Markdown
Owner Author

实测观察到的空洞 100% 是市场停牌,非 pipeline bug。详见 issue #7 评论。30 天回溯窗口对当前问题是 over-engineering,关闭 PR。

@xbfighting xbfighting closed this May 5, 2026
@xbfighting xbfighting deleted the fix/minute-gaps branch May 5, 2026 14:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant