BKKB20/nse-index-history

GitHub: BKKB20/nse-index-history

通过逆向工程解析 NSE 调整公告,重构 2004–2026 年间 28 个印度 NSE 指数的历史成分股数据,消除回测中的幸存者偏差。

Stars: 0 | Forks: 0

# NSE 指数历史成分股重构 Pipeline 通过逆向工程解析 NSE 调整公告,重构 2004 至 2026 年间 28 个 NSE 指数的完整历史成分股列表——从而消除导致大多数散户回测结果出错的幸存者偏差。 ## 问题所在 每一种回测工具都习惯将当下的指数成分股套用至过去。如果你回测 2010 年的 NIFTY 50,你实际上是在用 2020 年才被纳入的股票来模拟 2010 年的投资。你的收益看起来会比实际情况更好。这就是幸存者偏差,它在不知不觉中使每一个结果都产生了偏差。 目前没有任何免费工具能够为你提供印度指数在过去任意历史日期的真实成分股。 ## 本项目构建的内容 构建一个完整的历史数据库,用于解答:*"在 2014 年 3 月 15 日,哪些股票被纳入了 NIFTY 50?"* - 重构了 28 个 NSE 指数(NIFTY 50、NIFTY NEXT 50、NIFTY BANK、NIFTY IT、NIFTY MIDCAP 50 以及另外 23 个指数) - 覆盖 2004–2026 年,基于约 100 份 NSE PDF 和 HTM 公告 - 输出 SQLite 数据库和 Excel 文件(包含快照、平铺列表、股票代码 × 日期的宽格式数据) - 日期查询工具:`python query_date.py 2019-03-31` → 生成包含截至该日期所有 28 个指数数据的 Excel 文件 ## 工作原理 每当有股票被加入或移出指数时,NSE 都会发布调整公告。该 Pipeline 从当前已知的成分股开始,逐步倒推每份公告: ``` composition_before = composition_after + removed_stocks − added_stocks ``` 该 Pipeline 处理了 NSE 自 2004 年以来使用过的 4 种不同的公告格式、扫描版 PDF 的局限性、80 多项公司行动映射(如合并、更名、退市,例如 HDFC→HDFCBANK、PVR+INOX→PVRINOX),以及同一公告不同章节之间的跨指数数据污染。 ## 文件结构 | 文件 | 用途 | |------|---------| | `config.py` | 指数元数据、预期成分股数量、80 多个股票代码别名映射 | | `reparse_v3.py` | PDF 公告解析器 — 按指数提取对应章节 | | `reparse_htm_v2.py` | 用于解析 2004–2009 年数据的 HTM 公告解析器 | | `merge_and_reconstruct.py` | 核心重构引擎 | | `database.py` | SQLite 存储、查询与导出层 | | `query_date.py` | 命令行 (CLI) 日期查询工具 | | `current_members/` | 28 个 CSV 文件 — 截至 2026 年 3 月的 NSE 当前成分股 | | `NSE_INDEX_HISTORY_FINAL_V3.xlsx` | 最终输出文件 — 包含所有 28 个指数及所有日期的数据 | ## 输出内容 Excel 文件包含: - **FLAT_LIST** — 每行对应一个日期/指数/股票代码,最适合进行分析 - **WIDE_FORMAT** — 股票代码 × 日期矩阵 (0/1),可直接用于回测 - **TODAY** — 截至 2026 年 3 月所有 28 个指数的并列视图 - **SUMMARY** — 每个指数的快照数量和状态 ## 已知局限性 - 2018–2019 年间的 3 份公告为扫描版图片 PDF — 尚未处理,需要进行 OCR 识别 - 2010 年之前的数据准确性受限于公司名称到股票代码映射的完整度 - 尚未包含 BSE 指数(如 Sensex、BSE 500) ## 作者 Bhavya Khaitan — VJTI 孟买纺织工程 (Textile Technology) 专业,本科二年级 (B.Tech)
标签:Excel, NIFTY 50, NSE, PDF解析, Python, SQLite, 企业行动映射, 印度股市, 历史数据重构, 并购映射, 幸存者偏差, 开源金融工具, 投资研究, 指数成分股, 数据库构建, 数据清洗, 文本挖掘, 无后门, 时间序列数据, 消除幸存者偏差, 爬虫与解析, 股票分析, 退市处理, 逆向工具, 量化交易, 量化回测, 金融工程, 金融数据, 金融数据库