feat: operationalize local Tushare Qlib research

This commit is contained in:
2026-07-31 01:26:49 +08:00
parent f81c116bfe
commit 6275370afc
21 changed files with 4438 additions and 401 deletions
+21 -8
View File
@@ -66,12 +66,13 @@ XtTrader:
## Data plane and point-in-time semantics
本地 Tushare 镜像是独立只读输入边界。adapter 只信任 SQLite 中 completed
job,并重新核对文件大小、SHA-256、Parquet 行数/footerQlib provider
发布到新目录,manifest 绑定 source job、build parameter、converter source、
完整 provider tree 和可重算 `data_version`。当前镜像未完成且缺复权、
真实 benchmark历史成分/ST/停牌/涨跌停,因此只能进入 Qlib 技术 smoke,
不能直接进入 canonical production decision。完整合同与实跑证据见
本地 Tushare live mirror 是独立只读输入边界。scoped snapshot 在一次 SQLite
读事务中选择目标日期/API/指数的 canonical completed job,并重新核对文件
大小、SHA-256、Parquet 行数/footerQlib provider 发布到新目录,manifest
绑定 source job、build parameter、converter source、完整 provider tree 和
可重算 `data_version`。当前已有复权因子、真实 `000905.SH` benchmark/历史
权重、停牌和涨跌停数据,但 live mirror 仍可变化,且 `stock_st` 权限被拒;
因此必须先冻结、再验证,不能直接进入完整 canonical production decision。完整合同见
[`TUSHARE_LOCAL_DATA.md`](TUSHARE_LOCAL_DATA.md)。
JQData adapter 的输入合同是逐交易日历史指数成员和 `get_bars` 日线字段:
@@ -190,8 +191,20 @@ Qlib 路径固定为 `0.9.7`。CPython 3.12 实际 fixture smoke 已得到:
重算的有限值指标,明确 `investment_value_claim=false`
- local MLflow file store 使用时,runner 以
`os.environ.setdefault("MLFLOW_ALLOW_FILE_STORE", "true")` 显式确认。
- 本地 Tushare completed 分区已生成 managed provider;早期未复权动量
smoke 在 `PYTHONHASHSEED=0` 下连续两次得到逐 byte 相同的 evidence JSON
- Tushare 早期未复权 managed provider/momentum smoke 在
`PYTHONHASHSEED=0` 下连续两次得到逐 byte 相同的 evidence JSON;它只证明
旧转换器和运行时可重放;
- 2018—2025 v2 managed provider 已使用真实复权、`SH000905` benchmark 和
PIT index-weight universe,通过 verifier;同一 momentum run 两次 JSON
byte-identical。月末权重保守地从下一 provider 交易日生效,
`same_session_membership_use=false`97 个 observed snapshots 形成 96 个
effective rosters,每个严格 500 成分、weight sum 100±0.5,最大间隔 36 天。
live DB/WAL 可被无关下载任务修改,但 221 个 scoped jobs double verified、
验证后仍为 latest;独立 lineage 工具对 221 jobs 的 6 个身份字段得到
mismatch 0,并确认 converter source 为 current。它仍是
event-time/保守次日生效 PIT 近似,不是严格 knowledge-time PIT;不同
`start` 的首观测锚 provider 不可直接拼接。它仍是 research-only、
`gate_credit=[]`,不表达历史 ST 和逐股逐日涨跌停。
该 fixture 只有两只股票和一个 benchmark,性能没有投资意义。Qlib 的单一
`limit_threshold` 也不能表达逐日板块/ST 规则,所以它只参与 L1/L2 和诊断