# 近三年主连与真实合约精细数据包

## 范围

- 品种：EB, V, SP, FG, OI, M, RB, PP
- 时间：`2023-09-10 00:00:00` 至 `2026-09-09 22:29:00`（北京时间，含首尾）
- 周期：1 分钟
- 主力口径：天勤 `KQ.m@交易所.品种` 历史主连映射
- 换月切点：本窗口内均使用真实合约与本地主连逐分钟重叠核实后的 09:00/21:00 切点
- 真实合约范围：仅保留最近三年窗口；每个曾任主力合约从交割月前 18 个月开始尝试下载，到交割月结束或数据窗口截止，以覆盖成为主力前、主力期间及被替换后的行情。

## 文件

- `精细数据索引.html`：可直接打开的总入口，含摘要、换月时间表、合约清单、换月覆盖检查和日频主力日历。
- `精细数据索引.xlsx`：若本机具备 `openpyxl` 时同时生成；所有内容也都有独立 CSV，不依赖 Excel。
- `换月时间表.csv`：每次旧主力到新主力的分钟级切换时间。
- `换月前后覆盖检查.csv`：逐次检查旧合约切换后、新合约切换前是否都有数据，并给出两侧文件。
- `合约清单与质量检查.csv`：每个真实合约的时间范围、三阶段行数、重叠比对和 SHA256。
- `主力日历_日频.csv`：每日主连对应的真实合约。
- `主连数据/`：最近三年的 888 主连数据；新增 `real_contract` 与 `contract_instance_id` 列。
- `真实合约数据/品种/`：真实合约 1 分钟文件；`main_phase` 为 `成为主力前`、`主力期` 或 `被替换后`。
- `_下载缓存/`：可断点续跑的分块缓存，不参与策略运行。

## 汇总

| 品种 | 主连行数 | 真实合约数 | 换月次数 | 真实合约总行数 |
|---|---:|---:|---:|---:|
| EB | 248,139 | 37 | 36 | 2,615,208 |
| V | 248,160 | 10 | 9 | 715,608 |
| SP | 248,160 | 13 | 12 | 975,477 |
| FG | 248,160 | 10 | 9 | 715,650 |
| OI | 248,135 | 11 | 10 | 783,969 |
| M | 248,160 | 10 | 9 | 715,650 |
| RB | 248,160 | 10 | 9 | 709,559 |
| PP | 248,140 | 10 | 9 | 714,873 |

- 换月覆盖检查：{"完整": 103}
- 真实合约总数：111
- 换月总数：103

## 如何查看一次换月

先在 `换月时间表.csv` 按 `roll_id` 找到切点，再到 `换月前后覆盖检查.csv` 查看 `prev_file` 与 `new_file`。旧合约文件中切点之后的 `main_phase=被替换后`，就是原主力被替换后仍继续交易的数据；新合约文件中切点之前的 `main_phase=成为主力前`，就是它成为主力之前的数据。

例如 `FG609 -> FG701`：以表内精确 `roll_start` 为界，分别筛选 FG609 的 `被替换后` 与 FG701 的 `成为主力前`。

## 字段说明

- `datetime`：北京时间、无时区的分钟起始时间。
- `open/high/low/close`：原始 1 分钟 OHLC。
- `volume`：该分钟成交量。
- `open_interest`：该分钟末持仓量。
- `exact_contract`：交易所真实合约代码。
- `contract_instance_id`：带完整交割年月的唯一实例；用于避免郑商所三位码每十年重复造成混淆。
- `main_phase`：相对该合约主力任期的位置。
- `is_main`：该分钟是否处于该合约的主力任期。
- `main_start/main_end`：该真实合约成为/退出主力的分钟切点。

## 质量边界

- 原 `Historical data 1M` 文件与策略文件均未修改。
- 本数据包不做前复权、后复权或跨合约价格平滑；价格跳变保持原样。
- 非交易时段天然没有行，不把午休、夜盘差异、周末和节假日当作缺口。
- `合约清单与质量检查.csv` 中 `main_ohlc_exact_match_ratio` 和 `main_volume_oi_exact_match_ratio` 用于核对真实合约在主力期与本地 888 数据的一致性。
