feat: preserve Quant OS target-package vertical slice

This commit is contained in:
2026-07-30 21:27:44 +08:00
parent 00efeb7ec2
commit 919c64c679
42 changed files with 15454 additions and 404 deletions
+54 -31
View File
@@ -13,23 +13,26 @@ JQData (authorized account)
canonical immutable snapshot
exact-set/hash + semantic reconstruction
|
+---------+----------+
| |
v v
snapshot-backtest snapshot-decision
local event engine Signal -> Target -> Order Delta
| |
+---------+----------+
|
portable-momentum-v1
+----------------------+
|
v
snapshot-backtest / snapshot-decision
portable-momentum-v1 compatibility path (smoke only)
local Baseline authority:
Universe
-> frozen Ridge model bundle / Alpha
-> risk + cost-aware Portfolio
-> post-risk TargetPackageV1 (weights, no account quantities)
-> five-layer hash trace
|
+------------+-------------+
| | |
JoinQuant bundle QMT bundle local contract oracle
hosted backtest built-in/qmttools backtest-only
| |
JoinQuant consumer QMT consumer
T+1-open account bind completed-close bind + quickTrade=0
order_target passorder (backtest-only)
synthetic PIT/features -> purged walk-forward -> Ridge challenger
(not deployment-frozen)
Current TargetPackage fixture is synthetic research evidence, not market proof.
Qlib 0.9.7:
Tushare completed/checksummed Parquet -> immutable managed provider
@@ -159,19 +162,24 @@ terminal/xtquant build 探针时不假设它与 `price × quantity` 的精确误
## Research and model boundary
synthetic research pipeline 已实现
synthetic research vertical slice 当前实际接通
- PIT table 和未来值拒绝;
- Universe 原因码;
- 透明价量特征与 T+1-open 标签时钟;
- train-only winsor/impute/standardize
- purge/embargo walk-forward
- deterministic Ridge、OOS IC/RankIC
- factor risk、dated cost/capacity 和 constrained target。
- deterministic Ridge、OOS IC/RankIC 与可重放 model bundle
- 60 日对角 realized variance
- dated explicit fee + spread + square-root impact/capacity
- deterministic constrained portfolio、独立 post-risk gate
- reference execution binding、完整五层 hash trace 与 TargetPackageV1。
这些功能证明研究管线可执行。Ridge 尚未冻结成带版本、输入 schema 和推理
hash 的 deployment bundle,也没有授权真实长样本 OOS 与四引擎推理验证,因此
不是生产 champion。
`factor_risk.py`、CVXPY 路径和 guarded TWAP/POV 仍是有单测的独立组件,
不在上述 vertical slice 中。Ridge 已能冻结预处理、系数、标签、训练截止日
和 lineage,但目前只有 synthetic 候选;没有授权真实长样本 OOS、真实风险/
成本校准、多期逐层 parity 或 QMT peer,因此不是生产 champion。已有的单包
JoinQuant run 只观察 execution consumer。
Qlib 路径固定为 `0.9.7`。CPython 3.12 实际 fixture smoke 已得到:
@@ -191,9 +199,15 @@ L6,不声称 L3 target 或 L4 order-intent parity。
## Portable strategy and platform boundary
当前可跨 hosted wrapper 冻结的共同基线是 `portable-momentum-v1`。平台 API
不得进入 symbol normalization、momentum score、target weight、target
quantity 和 order delta 计算。
hosted artifact 有两个互斥模式:
- `portable_momentum_smoke`:保留历史连通性回归,平台端计算动量;
- `target_package`:本地唯一权威已完成 Universe/Alpha/Portfolio/Risk
hosted wrapper 只验证包、精确匹配 `signal_as_of + next_session`、读取账户
事实并构造 execution plan,绝不回退到 momentum。
`portable-momentum-v1` 不是生产 Baseline。TargetPackage 只有权重,没有股数、
现金、订单或成交;这些属于下一交易日平台账户绑定后的 execution layer。
canonical 股票代码采用 JoinQuant 形式:
@@ -208,8 +222,9 @@ canonical 股票代码采用 JoinQuant 形式:
QMT built-in bundle 和 qmttools runner 都硬限制为 backtest/history。built-in
状态存放在模块全局 `g`,不写入可能在下个 `handlebar` 回滚的
`ContextInfo` 用户属性。两条路径固定中证 500 benchmark、PIT 历史成分/ST
与 baseline 费率;built-in 的 10% 参与率由 QMT GUI 设置,qmttools
`ContextInfo` 用户属性。动量 smoke 路径固定中证 500 benchmark、PIT 历史
成分/ST 与费率;TargetPackage 路径消费本地冻结 Universe/权重,不重新计算
Alpha/Portfolio/Risk。built-in 的 10% 参与率由 QMT GUI 设置,qmttools
程序化传入。live mutation 只存在于外部 XtTrader adapter,并且默认关闭、
未认证、没有 live 启动命令;operator 可运行的 shadow CLI 只接受查询边界。
@@ -217,6 +232,9 @@ QMT built-in bundle 和 qmttools runner 都硬限制为 backtest/history。built
最低交换合同是:
- [`model_bundle.schema.json`](../schemas/model_bundle.schema.json)
- [`target_package.schema.json`](../schemas/target_package.schema.json)
- [`release_reachability.schema.json`](../schemas/release_reachability.schema.json)
- [`signal.schema.json`](../schemas/signal.schema.json)
- [`target.schema.json`](../schemas/target.schema.json)
- [`order_event.schema.json`](../schemas/order_event.schema.json)
@@ -228,8 +246,13 @@ saved/current source aggregate、saved/current schema aggregate 和 payload
schema。`verify-snapshot-decision` 与 data snapshot semantic verifier 承担
各自边界的同类职责。
这些合同已有自动测试;最近一次标准库套件为 224 tests、OK、6 个可选路径
skip。测试结果不能替代 schema 迁移演练、真实平台导出或券商回调认证。
`release_reachability` 对每层分别记录 `implemented``unit_tested`
`local_entrypoint_reachable``jq_entrypoint_reachable`
`qmt_entrypoint_reachable``real_platform_observed`,并逐文件验证路径与
SHA。源文件总 hash 不能冒充真实运行。测试结果仍不能替代 schema 迁移演练、
真实平台导出或券商回调认证。当前只有
`execution.real_platform_observed=true`,由一个真实 JoinQuant
TargetPackage smoke 支持;其他四层及 all-layer summary 仍为 false。
## Clocks and reconciliation
@@ -274,12 +297,12 @@ synthetic/fake 数据是合同测试,不是市场证据;Qlib synthetic fixtu
当前还缺:
- 授权 JQData 真实快照、基本面公告 PIT、完整公司行动/Security Master
- Ridge/LightGBM 冻结模型包和真实 OOS 证据;
- 授权真实数据训练的冻结模型包和真实 OOS 证据;
- 真实数据校准的风险、冲击、容量和 TCA;
- 真实 JoinQuant/QMT 导出;
- 授权真实数据的多期 JoinQuant 导出、逐层本地对账与真实 QMT peer
- 券商状态映射、restart recovery daemon、20 日 shadow 与连续对账;
- 运维监控、kill-switch 演练和程序化交易合规确认。
所以 Quant OS 是可执行、可继续填证据的生产候选框架,不是已经达到整体
60 分的实盘系统。证据政策见
所以 Quant OS 已具备本地五层 vertical slice 与 TargetPackage 平台边界,
但仍只是可继续填证据的候选骨架,不是已经达到整体 60 分的实盘系统。证据政策见
[`AUDIT_2026-07-25.md`](AUDIT_2026-07-25.md)。
+13 -5
View File
@@ -25,7 +25,11 @@ A 股 Baseline 内核。它的新增得分必须在授权数据、真实平台
截至 2026-07-26 的实现事实快照:
- 截至 2026-07-26 的最新标准库全量测试为 `Ran 224 tests``OK (skipped=6)`
> 这是复评当日的历史快照,不是滚动状态页。当前五层主链、测试数和平台证据
> 边界以 [`BASELINE_VERTICAL_SLICE.md`](BASELINE_VERTICAL_SLICE.md)、
> [`gate_scorecard.json`](../gate_scorecard.json) 和生成的公开状态为准。
- 本次复评当时的标准库全量测试为 `Ran 224 tests``OK (skipped=6)`
- JQData raw/factor/pre-close/limits/paused + 每日 PIT `is_st`/指数成员
已连接到 semantic snapshot verifier、`snapshot-backtest`
`snapshot-decision`,并拒绝把抓取当日未到 24:00 的日线标成完整收盘,
@@ -39,8 +43,12 @@ A 股 Baseline 内核。它的新增得分必须在授权数据、真实平台
- fixture 只有两只 synthetic 股票,任何性能数字都没有投资意义;
- JoinQuant/QMT mock parity exporter 已实现,但
`real_platform_pass=false` 且不计 G9
- 2026-07-26 已完成一次 2024 全年真实 JoinQuant hosted smoke,可见日志
无 ERROR;它证明 runtime/path,但尚无完整同输入导出和本地 strict peer
- 2026-07-26 已完成一次 2024 全年真实 JoinQuant hosted momentum smoke,可见
日志无 ERROR;它证明 `portable_momentum_smoke` runtime/path,不是
Ridge/TargetPackage Baseline 证据,且尚无完整同输入导出和本地 strict peer
- 同日一个 `synthetic-research` TargetPackage 已在真实 JoinQuant hosted
环境完成 exact-clock/`day_open` 绑定、3 笔委托和 3 笔成交;该证据只支持
execution 层真实平台观察,不支持上游四层、G9 或投资表现;
- XtTrader 已有严格只读、HMAC 账户绑定的 observation/snapshot/shadow
plan 与 verifier,但真实 QMT、broker callback/shadow 均未运行,
G1—G10 仍全部 `not_passed`
@@ -233,8 +241,8 @@ PYTHONPATH=src:. python -m quant60 snapshot-backtest \
1. 用户授权登录 JQData,生成不可变真实 snapshot,保存许可/lineage,并通过
semantic verifier、`snapshot-backtest``snapshot-decision`
2. 基于已完成的聚宽 hosted smoke,冻结一个小型 canonical 平台输入并导出
close arrays/hash、planorders/fills
2. 已完成的单包 JoinQuant execution smoke 扩展为授权真实数据的多期
TargetPackage,并保存完整 identity/plan/orders/fills
3. 用本地与聚宽对相同输入逐层比较 L1—L4,而不是先比较净值;mock parity
只作为回归辅助;
4. 把基本面公告 available-time、完整公司行动/Security Master 加入真实
+134
View File
@@ -0,0 +1,134 @@
# Quant OS Baseline vertical slice:当前真实结构与缺口
更新时间:2026-07-26。
## 一句话结论
Quant OS 现在已经不是“只有一堆互不相连的模块”:本地 synthetic 路径已经把
Universe、Ridge Alpha、风险/成本参与的 Portfolio、post-risk gate 和
reference Execution 串成唯一五层链,并发布冻结模型包与无股数
`TargetPackageV1`
但它仍然是 `NOT_BASELINE_60`。原因不是代码行数,而是当前候选只在 synthetic
数据上形成上游四层;虽然一个 synthetic-research TargetPackage 已真实通过
JoinQuant execution consumer 并成交,真实 JQData 长样本 OOS、上游逐层
真实数据 parity、真实 QMT peer 与 20 日 shadow 都还没有证据。
## 两条不能混记的运行路径
| 模式 | 上游决策在哪里 | 平台上运行什么 | 当前真实平台事实 |
| --- | --- | --- | --- |
| `portable_momentum_smoke` | JoinQuant/QMT wrapper 现场用完成日线算动量 | 动量、封顶权重、股数与 delta | JoinQuant 2024 全年跑过;不是 Baseline |
| `target_package` | 本地 Quant OS 完成 Universe → Alpha → Portfolio → Risk | 验包、精确双时钟命中、读取 equity/position/sellable/price、Execution | JoinQuant 已有一个真实 execution smoke3 单/3 成交);上游仍是 syntheticQMT 未实跑 |
默认 bundler 仍生成 smoke,保持历史回归兼容。只有显式传
`--target-package` 才会生成候选消费者;目标包缺失、重复、篡改或时钟不匹配
都会停止,不会回退到 momentum。
## 五层实际用了什么
| 层 | 当前 vertical slice 的实际实现 | 已接通的策略 | 明确未接通/未证明 |
| --- | --- | --- | --- |
| Universe | `SecurityEligibility` → 五态 state machine,原因码进入 trace/package | openable、hold-only、sell-only、frozen、excluded | synthetic 成员;真实基本面 PIT、Security Master、退市链未完成 |
| Alpha | train-only winsor/impute/standardize + `DeterministicRidge(alpha=5)` | 冻结 feature order、transform、系数、截距、训练截止与标签 | 无授权真实 OOSQlib Alpha158/LightGBM 是另一研究路径 |
| Portfolio | deterministic long-only constrained optimizer | Alpha 减显式成本,按预测方差调整;单名、行业、gross、capacity、turnover 约束 | CVXPY 有组件测试但未进入当前主链 |
| Risk | 60 日 realized diagonal variance 进入优化,随后独立 concentration/gross/turnover post-check | 风险输入变化必须改变 target;风险 gate 不可旁路 | `factor_risk.py` 的因子协方差/stress 尚未进入主链,也未真实校准 |
| Execution | 本地 reference account 生成 quantity/delta;平台从 TargetPackage 权重重新绑定真实账户 | 百股、科创板最小申报、T+1 sellable、卖单优先、平台保护价;JoinQuant 单包已有 3 单/3 fill | guarded TWAP/POV 尚未进入这条 slice;无 QMT peer、多期真实数据回放或长期 callback 证据 |
权威实现和合同:
- `src/quant60/baseline_pipeline.py`
- `src/quant60/model_bundle.py`
- `schemas/model_bundle.schema.json`
- `src/quant60/target_package.py`
- `schemas/target_package.schema.json`
- `src/quant60/release_reachability.py`
- `schemas/release_reachability.schema.json`
- `releases/quant60-research-candidate-v1/reachability.json`
可直接做平台线路调试的 synthetic 单文件在:
- `dist/target-package/joinquant_strategy.py`
- `dist/target-package/qmt_builtin_strategy.py`
- `dist/target-package/bundle_manifest.json`
它们只用于验证 TargetPackage 消费与执行边界,不能当作真实数据 Baseline
或投资结果。
## 为什么 hosted 文件仍然可以很短
“完整 Baseline”不等于把训练、特征工程、协方差估计和优化器全部复制进聚宽或
QMT。那样会制造多个决策权威,也会被平台 Python 版本、依赖和数据语义拖成
不同策略。
目标架构是:
```text
本地唯一权威
冻结数据/模型/配置
-> 五层决策与逐层 hash
-> post-risk TargetPackage(权重)
平台薄消费者
验证同一个 TargetPackage
-> 绑定平台账户事实和执行价格
-> quantity / order delta
-> order API 与导出
```
所以平台代码短本身是合理的;不合理的是薄 wrapper 自己改算 momentum,却被
文档称为完整 Baseline。现在这两种模式已经在配置、manifest、测试和文档中
分开。
## 当前机器可证明到哪里
每一层不再只写一个“已实现”,而是分别记录:
1. `implemented`
2. `unit_tested`
3. `local_entrypoint_reachable`
4. `jq_entrypoint_reachable`
5. `qmt_entrypoint_reachable`
6. `real_platform_observed`
`release_reachability` 要求每个 true 状态有类型匹配、仓库相对路径和实际
SHA-256 证据。源文件 aggregate hash 不能冒充真实平台运行。2026-07-26 的
TargetPackage hosted run 只允许把 `execution.real_platform_observed` 设为
trueUniverse、Alpha、Portfolio、Risk 仍为 false,因此
`all_layers_real_platform_observed` 也必须保持 false。
该真实执行记录使用 `synthetic-research` 输入,只证明验包、时钟、
`day_open`、账户绑定、下单和成交:
- [`JOINQUANT_TARGET_PACKAGE_EVIDENCE_2026-07-26.md`](JOINQUANT_TARGET_PACKAGE_EVIDENCE_2026-07-26.md)
- [`../evidence/joinquant/TP-20240311-795dcfba/2457a7c39a276e09e0fabf99e28978e1/run.json`](../evidence/joinquant/TP-20240311-795dcfba/2457a7c39a276e09e0fabf99e28978e1/run.json)
## 还差什么
按先后顺序:
1. 用授权 JQData/其他合法数据形成真实 PIT 长样本,训练并冻结候选 model
bundle;封住测试集,保存 OOS、容量和多状态报告。
2. 用真实数据校准 risk/cost;决定并接通 factor risk、CVXPY 是否进入
Baseline 60,而不是因为模块存在就自动算完成。
3. 从同一个真实候选生成多期 TargetPackage tape;不能用当前单个 synthetic
package 代替。
4. 把同一真实 tape 分别打入 JoinQuant/QMT;现有 JoinQuant 单包 execution
smoke 作为线路先验,但仍要导出完整多期 identity/plan/orders/fills。
5. 做 local/JoinQuant/QMT 逐层差异;任何 `UNEXPLAINED` 必须为零。当前无
QMT peer,所以 G9 仍未通过。
6. 完成至少 20 个交易日 QMT 只读 shadow、重启/回调/对账和合规确认。
## 用户什么时候需要参与
当前代码、测试、合同和文档整理不需要用户提供任何凭据,可以直接完成。
后续只有三处需要用户环境:
- JQData:在本机授权环境抓取可保存的脱敏快照;
- JoinQuant:已有一个 synthetic 单包 execution smoke;真实候选形成后仍需
上传多期 tape 并导出完整结果;
- Windows QMT/MiniQMT:使用已登录且有历史数据权限的客户端做 backtest 和
read-only shadow。
不要把密码、cookie、token、QMT userdata、account id 或持牌二进制发到聊天、
Git 或文档中。
@@ -0,0 +1,104 @@
# JoinQuant TargetPackage execution evidence — 2026-07-26
This is a conservative record of one real JoinQuant hosted execution smoke.
It proves that the frozen TargetPackage consumer reached the real hosted
account/price/order/fill boundary. It does not prove that JoinQuant recomputed
the upstream Universe, Alpha, Portfolio, or Risk layers, and it is not an
investment-performance claim.
## Frozen identity
- Run:
[JoinQuant backtest detail](https://www.joinquant.com/algorithm/backtest/detail?backtestId=2457a7c39a276e09e0fabf99e28978e1)
- Run ID: `2457a7c39a276e09e0fabf99e28978e1`
- Observed at: `2026-07-26T08:50:15Z`
- Bundle SHA-256:
`0586930ddc483f4489f09b562f4d4232b458b703e6a1194af809b707211be8c4`
- Bundle manifest SHA-256:
`91f4b4dc0bdd0d9f99b3466c830600e2678be78dd991d4499a4154bffec8597a`
- Portable core SHA-256:
`f9de9f18e4008bb0fc80edb0b21cae6ea06a61828d89e9b7c11057f98225fc19`
- Wrapper SHA-256:
`0c672b64665b7c1d4409ba288b00d1608e976800af3a4f9a6467767ce4def592`
- TargetPackage ID: `TP-20240311-795dcfba`
- Package SHA-256:
`baa15c8156aa6cb54d3775d0cd562613a9d0a4f15b0c39f2a60e0f8b8c6f1f3a`
- Tape SHA-256:
`5383c376951637b8d4b1ca42fc6db80347abda74c0181c0f70d6c411fb97ea64`
- Evidence class: `synthetic-research`
The uploaded browser snapshot and the frozen bundle had the same SHA-256.
The machine record distinguishes
`platform_evidence_class=real_platform_runtime` from
`input_evidence_class=synthetic-research` and fixes
`performance_claim=false`.
The tracked, redacted machine record is
[`run.json`](../evidence/joinquant/TP-20240311-795dcfba/2457a7c39a276e09e0fabf99e28978e1/run.json).
It contains no account identifier, cookie, token, credentials, screenshots, or
personal information.
## Runtime and observed sessions
- Period: 2024-03-11 through 2024-03-13
- Initial capital: CNY 1,000,000
- Frequency/runtime: daily, Python 3
- Benchmark: CSI 500 (`000905.XSHG`)
- Decision mode: `target_package`
| Session | Hosted observation | Orders | Fills |
| --- | --- | ---: | ---: |
| 2024-03-11 | Exact-clock miss; `TARGET_PACKAGE_NOOP`; no fallback | 0 | 0 |
| 2024-03-12 | Package hit; prices bound from `CURRENT_DATA_DAY_OPEN` | 3 | 3 |
| 2024-03-13 | Exact-clock miss; `TARGET_PACKAGE_NOOP`; no fallback | 0 | 0 |
The hosted plan preserved the package weights exactly: 10% each for
`600519.XSHG`, `601012.XSHG`, `601318.XSHG`, and `688981.XSHG`; all other
weights were zero.
The resulting targets and fills were:
| Symbol | Weight | Target quantity | Filled quantity | Fill price |
| --- | ---: | ---: | ---: | ---: |
| `600519.XSHG` | 0.10 | 0 | 0 | — |
| `601012.XSHG` | 0.10 | 4,500 | 4,500 | 22.22 |
| `601318.XSHG` | 0.10 | 2,300 | 2,300 | 43.18 |
| `688981.XSHG` | 0.10 | 2,000 | 2,000 | 47.87 |
`600519.XSHG` opened at CNY 1,693.94. One 100-share board lot therefore
required CNY 169,394, above the CNY 100,000 target notional. The deterministic
lot rule correctly produced a zero-share target; this was not a rejected or
skipped order. The STAR Market request for `688981.XSHG` used the configured
hosted limit-price protection.
## What this evidence proves
For the `execution` layer only, this run observes:
- exact bundle/package identity verification;
- exact signal-close/next-session clock matching with no momentum fallback;
- real hosted equity and `day_open` price binding;
- deterministic target-quantity and order construction;
- three accepted orders and three real hosted fills;
- clean no-op behavior on the surrounding sessions.
The release reachability manifest may therefore mark only
`execution.real_platform_observed=true`, backed by the tracked machine record.
Universe, Alpha, Portfolio, and Risk remain
`real_platform_observed=false`: those layers were computed locally and carried
to JoinQuant as a frozen TargetPackage rather than recomputed inside JoinQuant.
## What this evidence does not prove
The package still has evidence class `synthetic-research`. This three-session,
single-package run provides no:
- authorized real-data long-sample or out-of-sample validation;
- real-data calibration of the upstream Alpha, Portfolio, or Risk layers;
- multi-period same-input layer-by-layer local/JoinQuant parity;
- real QMT peer run or 20-trading-day broker shadow;
- G9 cross-engine acceptance, `BASELINE_60`, release verification, live
readiness, or investment-value evidence.
The hosted performance fields are retained in the machine record solely to
identify the completed smoke. They are economically meaningless over this
three-session window and must not be presented as strategy performance.
+22 -12
View File
@@ -5,16 +5,16 @@
| Path | Intended use | Runtime / prerequisite | Current verified fact | Missing release evidence |
| --- | --- | --- | --- | --- |
| Local synthetic execution | 确定性事件回测、ledger/replay | Python ≥3.10,无账号 | 标准库套件最近记录为 224 tests、OK、6 skipsmoke + exact manifest verifier 可运行 | synthetic 不代表真实市场/收益 |
| Local synthetic research | PIT/features/walk-forward/Ridge/risk/cost/target | Python ≥3.10,无账号 | research smoke + manifest verifier 可运行 | Ridge 未冻结部署,未做授权长样本 OOS |
| Local synthetic execution | 确定性事件回测、ledger/replay | Python ≥3.10,无账号 | 标准库套件smoke + exact manifest verifier 可运行 | synthetic 不代表真实市场/收益 |
| Local synthetic research | 五层 vertical sliceUniverse/Ridge Alpha/risk+cost Portfolio/post-risk/reference Execution | Python ≥3.10,无账号 | 冻结 model bundle、TargetPackageV1、layer trace + manifest verifier 可运行;风险/成本扰动必须改变 target | 仍是 synthetic;当前只接对角风险与 deterministic optimizer,未做授权长样本 OOS |
| JQData ingestion | 授权数据到 canonical immutable snapshot | `jqdatasdk==1.9.8` + 授权账号 | fake-provider 测试覆盖 raw/factor/pre-close/limits/paused/PIT `is_st`/membership、24:00 完整收盘约束和语义 verifier | 尚未登录真实账号保存快照、许可与 lineage |
| Snapshot local backtest | PIT membership 的 provider-data 本地回测 | semantic verifier 通过的 snapshot | `snapshot-backtest` 复用 production decision path,输出普通 run manifest | 尚无授权真实 snapshot;仍是本地 fill model |
| Snapshot decision | 某决策日 Signal/Target/Order Delta | snapshot + equity 或完整 broker snapshot | fail-closed broker state 与 exact decision manifest verifier 已实现 | 未接真实账户 snapshot,未冻结生产模型 |
| Colab | clone、测试、bundle、本地两条 synthetic 链;可选 JQData/Qlib | Colab runtime | notebook 已可本地逐 cell 执行 | 可选账号/依赖 cell 仍需运行时授权;不是平台证据 |
| JoinQuant local harness | wrapper API 合同 | Python ≥3.10,无账号 | fake lifecycle 与 mock parity 可运行 | 不证明 JoinQuant |
| JoinQuant hosted bundle | hosted backtest | JoinQuant 登录/数据权限 | 真实 2024 全年 run 已完成且可见日志 0 ERROR;单文件、PIT index/ST、批量 history、费率/滑点/10% 参与率、科创板保护价/200 股约束已运行 | 尚无完整输入/plan/orders/fills 导出和同输入本地比较 |
| QMT local harness | built-in wrapper 合同 | Python ≥3.10,无账号 | Python 3.6 source、`ContextInfo` 回滚模拟和 mock parity | 不证明 QMT |
| QMT built-in bundle | GUI backtest-only | 授权 QMT 客户端/板块与历史 ST 数据 | bundle 硬限制 backtest;毫秒 timetag PIT 成分/ST;固定中证 500、费率/滑点;模块全局 `g` | 尚无真实 QMT run/export10% GUI 配置与历史 ST 正例探针待取证 |
| JoinQuant local harness | wrapper API 合同 | Python ≥3.10,无账号 | 动量 smoke 与 TargetPackage 消费模式均有 fake lifecycle;目标包缺失/篡改不回退 | 不证明 JoinQuant |
| JoinQuant hosted bundle | hosted backtest | JoinQuant 登录/数据权限 | 动量 smoke 的真实 2024 全年 run 已完成FINAL4 的单个 synthetic-research TargetPackage 已在真实 hosted 环境按 `day_open` 命中并产生 3 单/3 fill | 只观察 execution consumer;无授权真实长样本/OOS、上游四层 hosted 执行、QMT peer 或逐层真实数据 parity |
| QMT local harness | built-in wrapper 合同 | Python ≥3.10,无账号 | Python 3.6 source、`ContextInfo` 回滚模拟、动量 smoke 与 TargetPackage 合同 | 不证明 QMT |
| QMT built-in bundle | GUI backtest-only | 授权 QMT 客户端/历史数据 | 两种模式都硬限制 backtestTargetPackage 模式不重算上游四层;模块全局 `g` | 尚无 TargetPackage 真实 QMT run/export10% GUI 配置和执行时钟待取证 |
| qmttools runner | native-Python QMT backtest/history | 券商分发 `xtquant` + 已登录 terminal | 固定中证 500/10% 参与率、参数、只读 preflight 和 hard backtest/history 合同已测 | 尚无专有运行时实跑 |
| XtTrader read-only shadow | 账户绑定 target-diff 与 broker observation | MiniQMT/QMT、账户查询权限、既有本地 HMAC key | HMAC 账户绑定 + authenticated evidence envelope、decision/observation semantic replay、资产/持仓/委托/成交恒等式、fail-closed exact verifier 与 fake broker 合同 | HMAC 不是 broker attestation;仍缺官方 query 失败/空结果合同、callback/restart、20 日真实 shadownot live-ready |
| Qlib native momentum | signal/model research | CPython 3.12 + exactly `pyqlib==0.9.7` | 真实本地 fixture 成功,24 signal;保存 signal/report hash、表边界和重算 portfolio 指标 | synthetic 两股票;无真实数据/OOS,无 L3/L4 parity |
@@ -22,12 +22,14 @@
| Tushare local → Qlib | completed Parquet 的只读盘点、不可变 provider 与本地研究 smoke | 同上 + `pyarrow==24.0.0`;本地镜像 | 93 个 completed 文件全部通过 size/SHA/row-countv4 provider verifier 成功;同一动量命令连续两次 evidence JSON 逐 byte 相同 | `daily` 仅完成约 8.2%,缺复权、真实 benchmark、PIT 成分/ST/停牌/涨跌停;`production_ready=false` |
| Mock parity exporter | JoinQuant/QMT wrapper 的 L2—L4 合同回归 | Python ≥3.10 | `mock_contract_only``real_platform_pass=false``gate_credit=[]` | 不计 G9;必须换成真实平台导出 |
G1—G10 当前都未通过。JoinQuant hosted smoke 与 Qlib fixture smoke 是真实
runtime 证据,但不是市场有效性或跨平台 Gate 通过证据。
G1—G10 当前都未通过。JoinQuant TargetPackage run 支持且只支持
`execution.real_platform_observed=true`;输入仍是 `synthetic-research`
Universe/Alpha/Portfolio/Risk 的真实平台观察均为 false。它与旧 momentum
smoke、Qlib fixture 一样,不是市场有效性或跨平台 Gate 通过证据。
## Stable strategy boundary
当前四引擎共同可冻结的是 `portable-momentum-v1`
`portable-momentum-v1` 当前只作为 smoke 冻结
- canonical symbol normalization
- momentum score/rank
@@ -36,8 +38,11 @@ runtime 证据,但不是市场有效性或跨平台 Gate 通过证据。
- T+1/sellable-aware order delta。
- 科创板 200 股最小申报、余额一次性卖清与 hosted 最坏价保护。
本地 Ridge 与 Qlib Alpha158/LightGBM 是研究候选。没有 versioned model
bundle、授权真实 OOS 和跨引擎推理结果前,不能称为已部署 champion。
本地 Ridge 已能冻结为 versioned model bundle,并通过
`TargetPackageV1` 把 post-risk 权重移交给 JoinQuant/QMT;平台不需要、也
不应重新运行训练栈。一个 synthetic 包已通过真实 JoinQuant execution
consumer,但没有授权真实 OOS、真实校准、多期逐层 parity 和 QMT peer
仍不能称为已部署 champion。
Qlib 的单一 `limit_threshold` 是市场级近似,不能表达逐日板块/ST 限制;
因此它只参加 L1/L2 和诊断 L6。XtTrader mutation 边界目前只接受 `.SH`
@@ -81,8 +86,13 @@ PYTHONPATH=src:. python -m quant60 snapshot-decision \
--config configs/baseline.json --as-of 2024-12-31 \
--equity 1000000 --output artifacts/csi500-2024-decision
# hosted bundle 和 mock-only parity
# 默认只构建 portable momentum smoke
python tools/bundle_platforms.py
# 显式构建无 fallback 的 TargetPackage 消费器
python tools/bundle_platforms.py \
--target-package artifacts/research-smoke/target_package.json \
--output-dir dist/target-package
PYTHONPATH=src:. python tools/export_mock_parity.py \
export --output artifacts/mock-parity/report.json
PYTHONPATH=src:. python tools/export_mock_parity.py \