claude_dev
b237c2d7e7
fix(data): 中证1000/2000 历史成份股补全(parse+migrate 聚合)
parse_csindex_announce.py 3 处修复:
- 932000 launch xlsx header 定位"证券代码"列(原 row[0]=指数代码 bug, distinct=1)
- 000852 列表搜索用 indexCode payload 精准拉(28 -> 96 公告, 回溯到 2016)
- akshare current snapshot header 定位"成分券代码"列(原 iloc[0]=日期 bug, current=0)
migrate_constituent.py:
- 加 _read_announce_union_aggregated(): 000852/932000 用 announce_union 全集
替换原 snapshot-only 路径, was_removed 治幸存者偏差
- 缺 announce_union 时回退旧 snapshot 逻辑(向后兼容)
TDD: tests/portfolio/test_migrate_announce_union.py 7 测全过(5 unit + 2 integration)
Mac 产出验证:
- 000852: distinct 1220 -> 1672, was_removed 0 -> 672
- 932000: distinct 1 -> 2684(launch 修复), was_removed 0 -> 684
2026-07-23 23:45:55 +08:00
..
2026-07-18 18:45:24 +08:00
2026-07-18 18:45:24 +08:00
2026-07-18 18:45:24 +08:00
2026-07-18 18:45:24 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 09:04:01 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-13 11:56:23 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-10 07:10:36 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 12:18:41 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-07 22:19:11 +08:00
2026-07-07 19:41:07 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-07 19:41:07 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 12:18:41 +08:00
2026-07-23 07:20:34 +08:00
2026-07-18 18:45:24 +08:00
2026-07-12 08:26:30 +08:00
2026-07-07 19:41:07 +08:00
2026-07-23 07:20:34 +08:00
2026-07-09 19:22:36 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 12:18:41 +08:00
2026-07-15 07:12:46 +08:00
2026-07-22 10:34:22 +08:00
2026-07-07 19:41:07 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 09:04:00 +08:00
2026-07-23 07:20:34 +08:00
2026-07-15 07:12:46 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 23:45:55 +08:00
2026-07-23 12:18:41 +08:00
2026-07-23 23:45:55 +08:00
2026-07-23 08:49:56 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 08:25:44 +08:00
2026-07-15 07:12:46 +08:00
2026-07-07 19:41:07 +08:00
2026-07-12 08:26:30 +08:00
2026-07-23 09:04:01 +08:00
2026-07-23 07:20:34 +08:00
2026-07-18 18:45:24 +08:00
2026-07-13 11:56:23 +08:00
2026-07-15 21:35:59 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-07 19:41:07 +08:00
2026-07-18 18:45:24 +08:00
2026-07-07 19:41:07 +08:00
2026-07-23 09:06:00 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-23 07:20:34 +08:00
2026-07-22 10:34:22 +08:00
2026-07-22 10:34:22 +08:00
2026-07-15 07:12:46 +08:00
2026-07-23 08:25:44 +08:00
2026-07-23 07:20:34 +08:00
2026-07-23 12:18:41 +08:00