feat: preserve Quant OS target-package vertical slice
This commit is contained in:
@@ -7,9 +7,11 @@ Quant OS 是项目名;`quant60` 是第一版 A 股 Baseline 的 Python
|
||||
本地与 Colab 可零账号运行工程 smoke;JQData 登录后可生成不可变快照并直接
|
||||
运行 PIT 本地回测/目标决策;聚宽、QMT 与 Qlib 有各自明确的运行入口。
|
||||
|
||||
> 当前状态仍是 `NOT_BASELINE_60`。代码存在、单测、synthetic、fake harness、
|
||||
> Qlib fixture 和单次真实聚宽 hosted smoke,都不能代替同输入跨引擎对比、
|
||||
> 真实 QMT、券商影子盘、连续对账与合规证据。
|
||||
> 当前状态仍是 `NOT_BASELINE_60`。本地五层 vertical slice、单测、
|
||||
> synthetic、fake harness、Qlib fixture、真实聚宽 hosted 动量 smoke,以及
|
||||
> 单个 synthetic-research TargetPackage 的真实聚宽 **execution smoke**,
|
||||
> 都不能代替授权真实数据 OOS、逐层同输入 parity、真实 QMT、券商影子盘、
|
||||
> 连续对账与合规证据。
|
||||
> 原文章复评为设计覆盖约 70/100、可实施规格 49/100、原实现证据 6/100、
|
||||
> G1—G10 为 0/10。详见
|
||||
> [`docs/AUDIT_2026-07-25.md`](docs/AUDIT_2026-07-25.md) 与
|
||||
@@ -40,18 +42,21 @@ python3 tools/build_public_status.py --check
|
||||
| 路径 | 当前能做什么 | 已有证据 | 仍缺什么 |
|
||||
| --- | --- | --- | --- |
|
||||
| 本地 synthetic execution | 周度信号、T+1 开盘撮合、费用、涨跌停、部分成交、ledger、重放 | 标准库全量测试、确定性 smoke、manifest verifier | 不代表真实市场或投资价值 |
|
||||
| 本地 synthetic research | PIT/Universe、透明特征、purged walk-forward、Ridge、成本/风险、约束 target | research artifact 与 verifier | 仍是 synthetic;Ridge 尚未冻结为跨平台生产模型 |
|
||||
| 本地 synthetic research | Universe → Ridge Alpha → 风险/成本参与的 Portfolio → post-risk → reference execution 五层链 | 冻结 model bundle、无股数 TargetPackage、逐层 hash trace 与 manifest verifier | 仍是 synthetic;当前风险是 60 日对角方差,尚无真实样本校准或投资价值 |
|
||||
| JQData → 本地 | 原始价、复权因子、前收、涨跌停、停牌、PIT ST 状态与历史指数成员快照;PIT 本地回测与单日目标 | fake-provider 端到端回归测试、完整收盘日 fail-closed 合同 | 需要用户授权登录后保存真实数据运行;基本面/公司行动尚未全接 |
|
||||
| Colab | 自动 clone、测试、bundle、两套 synthetic 流程;可选 JQData/Qlib | notebook 本地逐 cell 执行 | JQData/Qlib 可选 cell 需对应账号/运行时 |
|
||||
| 聚宽 hosted | 可上传的 Python 单文件,直接回测 portable baseline | 2024 全年、100 万资金的真实 hosted run 已完成且可见日志无 ERROR;另有 bundle/fake/mock 合约 | 仍需完整导出、相同输入本地 peer 与逐层差异报告 |
|
||||
| QMT built-in/qmttools | 可上传/驱动的硬 backtest-only portable baseline;固定中证 500 benchmark、10% 参与率、PIT 成分/ST | Python 3.6 语法、fake/qmttools 合约 | 需要已授权 QMT 客户端、历史 ST 数据权限/正例探针与实跑导出 |
|
||||
| 聚宽 hosted | 默认动量 smoke;显式注入 TargetPackage 后只消费本地 post-risk 权重并绑定平台账户/价格 | 动量模式已有一次 2024 全年 run;一个 synthetic-research TargetPackage 已真实命中、绑定 `day_open` 并产生 3 笔委托/成交 | 只观察 execution consumer;无授权真实长样本/OOS、上游四层 hosted 执行、QMT peer 或逐层真实数据 parity |
|
||||
| QMT built-in/qmttools | 默认动量 smoke;TargetPackage 模式为 Python 3.6 backtest-only 消费器 | Python 3.6 语法、TargetPackage/fake/qmttools 合约 | 需要已授权 QMT 客户端、历史数据权限与 TargetPackage 实跑导出 |
|
||||
| Qlib 0.9.7 | native momentum backtest;Alpha158/LightGBM CLI/Recorder 工作流 | Python 3.12 两条 fixture 已真实跑通,并保存表级 hash、行列/时间边界和重算指标 | synthetic 两股票没有投资价值;无真实 OOS、L3/L4 parity |
|
||||
| Tushare → Qlib | 只读盘点 completed Parquet、校验 checksum、构建/验证不可变 provider、运行本地回测 | 93 个 completed 文件已验证;早期未复权 provider 与两次 byte-identical momentum run | 下载仅到 1993-10;缺复权、真实 benchmark、历史成分/ST/停牌/涨跌停,不能进入生产 decision |
|
||||
| XtTrader shadow | 只读账户查询、HMAC 账户绑定、broker observation/snapshot、零下单 target-diff 计划与完整 verifier | fake broker/QMT 合约;所有 broker mutation 均不可达 | 需要授权 QMT 环境的账户合同探针、20 日影子、恢复/对账和券商确认 |
|
||||
|
||||
跨四个引擎当前共同的、可冻结生产基线是
|
||||
`portable-momentum-v1`。本地 Ridge 与 Qlib Alpha158/LightGBM 是研究候选,
|
||||
在出现版本化 model bundle、真实 OOS 证据和跨引擎推理验证前,不会冒充已经部署。
|
||||
`portable-momentum-v1` 只是当前真实跑过聚宽的跨引擎连通性 smoke,不是
|
||||
60 分 Baseline。Baseline 的权威决策留在本地:冻结 Ridge model bundle,
|
||||
完成五层链并发布无股数的 `TargetPackageV1`;聚宽/QMT 只做精确双时钟查找、
|
||||
账户状态绑定和执行。当前 synthetic 包已经真实通过聚宽 execution consumer,
|
||||
但这只证明平台边界可运行;尚未证明上游四层的真实数据有效性、QMT peer 或
|
||||
跨引擎一致性。
|
||||
|
||||
## 一条命令验证本地工程
|
||||
|
||||
@@ -90,6 +95,9 @@ artifacts/
|
||||
│ └── report.json
|
||||
├── research-smoke/
|
||||
│ ├── manifest.json
|
||||
│ ├── model_bundle.json
|
||||
│ ├── target_package.json
|
||||
│ ├── pipeline.json
|
||||
│ ├── signals.json
|
||||
│ ├── targets.json
|
||||
│ ├── forecasts.json
|
||||
@@ -175,6 +183,11 @@ provider calendar 的唯一下一交易日 Asia/Shanghai `[09:00,09:30)`;它
|
||||
|
||||
它仍是本地 fill model,不是聚宽/QMT 的真实成交证据。
|
||||
|
||||
注意:现有 `snapshot-decision` 仍是 `portable-momentum-v1` 的 provider-data
|
||||
路径,不能因为输入来自 JQData 就冒充 Ridge Baseline。完整候选链的权威交换物
|
||||
是 `TargetPackageV1`;在真实数据训练、风险/成本校准与 OOS 冻结完成前,
|
||||
`research-smoke/target_package.json` 只用于验证部署结构。
|
||||
|
||||
## Colab
|
||||
|
||||
打开 [`notebooks/quant_os_colab.ipynb`](notebooks/quant_os_colab.ipynb)
|
||||
@@ -197,7 +210,7 @@ python3 tools/run_colab_notebook.py notebooks/quant_os_colab.ipynb --execute
|
||||
|
||||
## 聚宽:直接上传回测
|
||||
|
||||
先构建:
|
||||
不传目标包时,构建的是历史兼容的动量 smoke:
|
||||
|
||||
```bash
|
||||
python3 tools/bundle_platforms.py
|
||||
@@ -221,7 +234,7 @@ canonical 周时钟不是固定星期几:某 ISO 周第一实际交易日收
|
||||
作为限价保护;共享核心拒绝不足 200 股的普通科创板申报,只保留一次性卖清
|
||||
不足 200 股余额的交易所例外。
|
||||
|
||||
2026-07-26 已用生成 bundle 完成一次真实聚宽全年 hosted backtest。运行记录、
|
||||
2026-07-26 已用该动量 smoke bundle 完成一次真实聚宽全年 hosted backtest。运行记录、
|
||||
bundle hash、指标、真实平台发现的问题和证据边界见
|
||||
[`docs/JOINQUANT_HOSTED_EVIDENCE_2026-07-26.md`](docs/JOINQUANT_HOSTED_EVIDENCE_2026-07-26.md)。
|
||||
该次运行的可见完成日志没有 `ERROR`,但尚未导出相同输入、plan、orders/fills,
|
||||
@@ -238,13 +251,52 @@ bundle hash、指标、真实平台发现的问题和证据边界见
|
||||
单次 hosted smoke 是外部运行证据,但没有同输入跨引擎 manifest 时仍不算
|
||||
真实聚宽 Gate 通过。
|
||||
|
||||
要验证五层候选链,必须显式传入已验真的 TargetPackage;打包器不会自动从
|
||||
动量回退或把 smoke 提升成 Baseline:
|
||||
|
||||
```bash
|
||||
python3 tools/bundle_platforms.py \
|
||||
--target-package artifacts/research-smoke/target_package.json \
|
||||
--output-dir dist/target-package
|
||||
```
|
||||
|
||||
这个示例包来自 synthetic 数据,只能验证线路。目标包保存 post-risk **权重**
|
||||
及 model/data/feature/risk/cost/optimizer/config/source hash,不保存账户股数。
|
||||
聚宽在包声明的 `next_session` 开盘读取真实 equity、持仓、可卖数量和价格,
|
||||
形成 execution plan;包缺失、双时钟不匹配、hash 篡改或重复决策都会停止,
|
||||
不会现场改算 momentum。
|
||||
|
||||
此时应上传
|
||||
[`dist/target-package/joinquant_strategy.py`](dist/target-package/joinquant_strategy.py),
|
||||
并以同目录
|
||||
[`bundle_manifest.json`](dist/target-package/bundle_manifest.json)
|
||||
核对 package ID、package SHA 与 tape SHA;不要误传默认 smoke 文件。
|
||||
|
||||
2026-07-26,`TP-20240311-795dcfba` 已用 FINAL4 在真实 JoinQuant hosted
|
||||
环境完成 2024-03-11 至 2024-03-13 的 execution smoke:3 月 11/13 日为
|
||||
精确时钟 no-op,3 月 12 日按 `CURRENT_DATA_DAY_OPEN` 命中包,生成 3 笔
|
||||
委托并全部成交。`600519.XSHG` 虽有 10% 权重,但 1693.94 元开盘价使一手
|
||||
价值 169,394 元,高于 100,000 元目标名义金额,因而合法取整为 0 股。
|
||||
|
||||
- 脱敏机器记录:
|
||||
[`evidence/joinquant/TP-20240311-795dcfba/2457a7c39a276e09e0fabf99e28978e1/run.json`](evidence/joinquant/TP-20240311-795dcfba/2457a7c39a276e09e0fabf99e28978e1/run.json)
|
||||
- 证据边界:
|
||||
[`docs/JOINQUANT_TARGET_PACKAGE_EVIDENCE_2026-07-26.md`](docs/JOINQUANT_TARGET_PACKAGE_EVIDENCE_2026-07-26.md)
|
||||
|
||||
该 run 的 `platform_evidence_class` 是 `real_platform_runtime`,但输入
|
||||
`input_evidence_class` 仍是 `synthetic-research`;它只支持
|
||||
`execution.real_platform_observed=true`。JoinQuant 没有重跑本地冻结的
|
||||
Universe、Alpha、Portfolio、Risk,三日收益字段仅用于识别 smoke,
|
||||
`performance_claim=false`,不计 G9 或 Baseline 60。
|
||||
|
||||
## QMT built-in 与 qmttools
|
||||
|
||||
同一 bundler 生成:
|
||||
同一 bundler 可生成动量 smoke 或显式 TargetPackage 消费器:
|
||||
|
||||
```text
|
||||
dist/qmt_builtin_strategy.py
|
||||
dist/bundle_manifest.json
|
||||
dist/qmt_builtin_strategy.py # 默认 momentum smoke
|
||||
dist/target-package/qmt_builtin_strategy.py # synthetic 候选线路调试
|
||||
dist/target-package/bundle_manifest.json # 目标包与 bundle 身份
|
||||
```
|
||||
|
||||
在 QMT Python 策略编辑器导入,选择 `1d` 与 **backtest**,主图/基准设为
|
||||
@@ -253,18 +305,20 @@ dist/bundle_manifest.json
|
||||
QMT 文档所述的 `ContextInfo` 用户属性回滚。它硬编码 backtest-only;参数和
|
||||
环境变量均不能把它提升成实盘 `passorder`。
|
||||
|
||||
策略按原始毫秒 timetag 查询历史中证 500 成分,并通过
|
||||
在动量 smoke 模式,策略按原始毫秒 timetag 查询历史中证 500 成分,并通过
|
||||
`ContextInfo.get_his_st_data` 读取决策日 ST/*ST/PT 区间;接口缺失、格式异常
|
||||
或覆盖不足会阻止计划。首次真实验收还必须用一只已知历史 ST 股票做正例探针,
|
||||
证明客户端权限和本地历史 ST 数据确实可用,不能把空结果直接解释成“当天无
|
||||
ST”。
|
||||
ST”。在 TargetPackage 模式,Universe/Alpha/Portfolio/Risk 已由本地包冻结;
|
||||
QMT 不重算这些层,只在包的 signal close 命中后绑定账户和完成日线价格,
|
||||
以 `quickTrade=0` 交给下一执行步。两种模式的证据不得混记。
|
||||
|
||||
Windows 上、已登录且安装券商分发 `xtquant` 的 qmttools 入口:
|
||||
|
||||
```powershell
|
||||
$env:PYTHONPATH = "src;."
|
||||
python -m platforms.qmt_research_runner `
|
||||
dist/qmt_builtin_strategy.py `
|
||||
dist/target-package/qmt_builtin_strategy.py `
|
||||
--stock-code 000905.SH `
|
||||
--start 20240102 `
|
||||
--end 20241231 `
|
||||
@@ -509,6 +563,11 @@ gate_credit = []
|
||||
- `universe.py`:openable / hold-only / sell-only / frozen / excluded;
|
||||
- `features.py`:透明价量特征、可执行时钟标签、train-only 预处理;
|
||||
- `research.py` / `experiment.py`:purge/embargo、Ridge、OOS IC/RankIC;
|
||||
- `model_bundle.py`:冻结 train-only 预处理、Ridge 参数、标签与训练 lineage;
|
||||
- `baseline_pipeline.py`:唯一五层本地主链和因果 hash trace;
|
||||
- `target_package.py`:无股数、双时钟、可防篡改的 post-risk 权重合同;
|
||||
- `release_reachability.py`:逐层区分 implemented、tested、entrypoint
|
||||
reachable 与 real-platform observed;
|
||||
- `factor_risk.py`:行业/风格暴露、EWMA 收缩因子协方差、特异风险、stress;
|
||||
- `costs.py`:日期化费率、最低佣金、low/base/high impact 与 capacity;
|
||||
- `optimizer.py`:deterministic fallback 与 lazy CVXPY 约束优化;
|
||||
@@ -519,22 +578,27 @@ gate_credit = []
|
||||
provider snapshot 到 PIT target 与本地历史回测;
|
||||
- `platforms/` / `adapters/`:聚宽、QMT、Qlib 与 XtTrader 边界。
|
||||
|
||||
这些模块已有自动测试,聚宽 hosted 路径也已有一次真实运行;真实数据校准、
|
||||
QMT/券商运行和运营证据仍分别计分。
|
||||
组件存在、单测通过、进入本地入口、进入平台入口和真实平台观察是五种不同
|
||||
事实。聚宽现有 TargetPackage run 只观察 execution consumer;它不证明
|
||||
factor risk、CVXPY、TWAP/POV 或 Ridge 上游四层在 hosted 环境被调用。
|
||||
|
||||
## 仍未达到 60 的核心原因
|
||||
|
||||
- 基本面公告时点、完整公司行动、Security Master 与退市链尚未形成生产数据湖;
|
||||
- Ridge/LightGBM 候选尚未冻结成四引擎共同加载的 model bundle;
|
||||
- Ridge 已能冻结成可重放 model bundle,但目前只有 synthetic 候选;
|
||||
尚无授权真实长样本 OOS,也没有必要让 hosted 引擎重新加载训练栈;
|
||||
- 风险协方差、冲击参数和容量尚未用真实长样本校准;
|
||||
- 聚宽已有真实 hosted run 但尚无完整同输入导出;QMT 尚无真实导出,QMT
|
||||
- factor risk、CVXPY 和 guarded TWAP/POV 仍是组件级能力,尚未进入当前
|
||||
Baseline vertical slice;
|
||||
- 聚宽已有单包 TargetPackage execution 导出,但仍缺授权真实数据的多期
|
||||
TargetPackage、本地/聚宽逐层同输入对账;QMT 尚无真实 peer 导出,QMT
|
||||
历史 ST 权限正例、账户 query 合同、
|
||||
20 日只读影子、回调/恢复/对账尚未形成真实证据;
|
||||
- 自动 scheduler、日终对账服务、监控告警与 kill-switch 演练未形成连续证据;
|
||||
- 实际券商程序化交易报告、权限、频率与软件要求尚未书面确认。
|
||||
|
||||
因此当前是可以继续填真实证据的 Quant OS 生产候选框架,不是可直接投入资金的
|
||||
成品,也不构成投资建议。
|
||||
因此当前是“已接通本地五层与平台 TargetPackage 边界的候选骨架”,不是已经
|
||||
达到 60 分或可直接投入资金的成品,也不构成投资建议。
|
||||
|
||||
## 安全与进一步文档
|
||||
|
||||
@@ -542,7 +606,11 @@ QMT/券商运行和运营证据仍分别计分。
|
||||
行情数据一律不得进入 Git。
|
||||
|
||||
- 架构:[`docs/ARCHITECTURE.md`](docs/ARCHITECTURE.md)
|
||||
- 五层真实结构与缺口:
|
||||
[`docs/BASELINE_VERTICAL_SLICE.md`](docs/BASELINE_VERTICAL_SLICE.md)
|
||||
- 平台矩阵:[`docs/PLATFORM_MATRIX.md`](docs/PLATFORM_MATRIX.md)
|
||||
- 聚宽 TargetPackage 证据:
|
||||
[`docs/JOINQUANT_TARGET_PACKAGE_EVIDENCE_2026-07-26.md`](docs/JOINQUANT_TARGET_PACKAGE_EVIDENCE_2026-07-26.md)
|
||||
- 部署:[`runbooks/PLATFORM_DEPLOYMENT.md`](runbooks/PLATFORM_DEPLOYMENT.md)
|
||||
- 安全:[`docs/SECURITY.md`](docs/SECURITY.md)
|
||||
- 故障:[`runbooks/INCIDENTS.md`](runbooks/INCIDENTS.md)
|
||||
|
||||
Reference in New Issue
Block a user