# 筹码版(B30 / A30 / A30·副图共振)生产复刻 · 逐位比对
> 目的:把这次研究的三个买点接进生产链路(`holdings_daily_scan.build_buy_sell`),并验证生产路径与研究路径的信号逐位一致。
| KPI | 逐位一致性 | 全部 0 差异 | 68 只 × 2 种数据源 × 3 个买点 = 408 组,全部逐位一致 |
|---|---|---|---|
| KPI | 回归 | 在役席位未受影响 | 75/75 组 0 差异(潜龙吸水·双闸 / 三重奏·终卖) |
| KPI | 性能 | 25.7s / 204 次调用 | 均 0.063s/次(8 只持仓约 0.5s,可接受) |
| KPI | 生产状态 | 已注册,未切换 | 规则进 `strategy_rules.json`,席位表未动 → 现有推送行为零变化 |
## 01|接进生产链路做了什么
| 项 | 内容 | 文件 |
|---|---|---|
| 新买点模式 | `ql_a30`(低位回升)· `ql_b30`(筹码跳升)· `ql_a30_sub`(A30+副图共振) | `holdings_daily_scan.py` 新增 `ql_indicators()` / `ql_fwd_any()` |
| 新卖点模式 | `hold30`(无事件卖点,持有 N 日到期卖) | 同上 |
| 规则注册 | `筹码版B30` / `筹码版A30` / `筹码版A30·副图共振`(各带 desc 与实测数字) | `strategy_rules.json`(纯新增 3 条) |
| 备份 | 改动前两个文件已备份 | `/root/backups/ql30_20260913/` |
指标口径(与你的副图完全同源):
| 指标 | 实现 |
|---|---|
| 获利筹码 W | `winner.py` 的 `winner_series`(VERIFIED_PARAMS:mid / λ=0.035 / window=160) |
| 量比 VR | `V / REF(MA(V,5),1)`(副图口径,非 `V/MA(V,5)`) |
| 主力清洗 WUP | 副图 VAR1~VAR5:`EMA(IF(LOW<=LLV(LOW,33), EMA(VAR2,10), 0), 3)` 上行 |
| 副图买点 SUB | `K=EMA(EMA(RSV,3),3)`、`D=MA(K,3)` 的 K 上穿 D(你确认的红箭头) |
## 02|逐位比对结果
| 数据源 | 买点 | 生产路径信号点 | 研究路径信号点 | 差异 | 判定 |
|---|---|---|---|---|---|
| 生产缓存(腾讯qfq) | A30 | 89 | 89 | 0 | ✅ 逐位一致 |
| 生产缓存(腾讯qfq) | B30 | 29 | 29 | 0 | ✅ 逐位一致 |
| 生产缓存(腾讯qfq) | A30副图 | 51 | 51 | 0 | ✅ 逐位一致 |
| 研究 bundle(mootdx) | A30 | 1,986 | 1,986 | 0 | ✅ 逐位一致 |
| 研究 bundle(mootdx) | B30 | 504 | 504 | 0 | ✅ 逐位一致 |
| 研究 bundle(mootdx) | A30副图 | 915 | 915 | 0 | ✅ 逐位一致 |
生产路径 = `build_buy_sell(s, g, C, n, {buy: ql_*}, df)`(14:45 扫描器调用的同一函数);研究路径 = 本次研究用的自算实现(`bt58.compute_ind` + `bt67` 副图 K/D)。两条路径在所有 bar 上完全一致。
回归验证:在役两个席位(个股席 潜龙吸水·双闸、ETF席 三重奏·终卖)在改动后仍然 75/75 组 0 差异 → 现有生产逻辑未被破坏。
## 03|现在的状态与后续动作
| 状态 | 说明 |
|---|---|
| 筹码版 B30 / A30 / A30·副图 | 已可在生产链路运行(改席位表即生效),当前未切换 |
| 现有生产席位 | 个股席 潜龙吸水·双闸 · ETF席 三重奏·终卖 —— 行为零变化 |
| 切换动作(待你点头) | ① 改席位表 `strategy-naming-20260812.md` ② 跑 `update_active_strategy.py` ③ 14:45 扫描自然切换 ④ 观察一次实盘推送核对 |
| 需要留意的 | 生产缓存只有 ~1,620 根(2020-02 起)+ 归一化到现价 → 信号数比研究口径少 10~30%(已量化,方向一致) |
## 04|局限