# 生产席位信号 · 逐位比对

> 目的：把前面所有对拍用到的「生产席位复刻口径」钉到实盘链路上，消除最后一项不确定。
> 样本：8 只持仓 + 池内随机 60 只 = **68 只**（个股席 潜龙吸水·双闸 · ETF席 三重奏·终卖）

|KPI|逐位一致性|**68/68 全部一致**|买入/卖出数组逐位差异 = 0|
|KPI|席位→规则|**与假设完全相符**|个股席 buy=`xih3_mx3` sell=`zhong_bts`；ETF席 buy=`bts` sell=`bts_sell`|
|KPI|数据源差异|**存在，需披露**|生产缓存（腾讯qfq归一化）vs 研究 bundle（mootdx前复权）：末价比 0.90~1.07|
|KPI|结论|复刻可信|生产席位对拍结论可用；绝对信号数随数据源浮动，相对排序不受影响|

## 01|席位 → 规则解析（权威来源）

| 席位 | 读法 | buy mode | sell mode | 注册描述 |
|---|---|---|---|---|
| 个股席 **潜龙吸水·双闸** | 席位表 regex | `xih3_mx3` | `zhong_bts` | xih3 & MX3(主力吸3)买 + 双闸卖: zhong筹码终止 | BTS终卖(55/50) | 迭代F1定型 2 |
| ETF席 **三重奏·终卖** | 席位表 regex | `bts` | `bts_sell` | 三重奏BTS: 波动率自适应二段式买点 + 终卖S | B/T/S三信号体系 |

**与我复刻的口径对照**：

| 席位 | 我复刻的写法 | 是否一致 |
|---|---|---|
| 个股席 潜龙吸水·双闸 | 买 `fwd_any(xihuo,3) & MX3`；卖 `zhong \| bts.sell` | ✅ 一致 |
| ETF席 三重奏·终卖 | 买 `bts.buy`；卖 `bts.sell` | ✅ 一致 |

## 02|逻辑逐位比对（同一份数据，两条计算路径）

| 路径 | 说明 |
|---|---|
| ① 生产路径 | `holdings_daily_scan.build_buy_sell(s, g, C, n, rule, extra, df)`（14:45 扫描器调用的同一函数）|
| ② 复刻路径 | 直接按模式计算（`fwd_any(xihuo,3) & MX3` / `zhong \| bts.sell`），不经规则分发 |

**结果：68 只标的、两种数据源（生产缓存 + mootdx bundle）下，买入与卖出数组逐位差异全部为 0。**

| 标的 | 席位 | 生产缓存根数 | bundle 根数 | 生产路径买点 | 复刻路径买点 | 差异 |
|---|---|---:|---:|---:|---:|---|
| 002156 | 潜龙吸水·双闸 | 1,624 | 4521 | 292 | 902 | 0 / 0 ✅ |
| 002436 | 潜龙吸水·双闸 | 1,624 | 3780 | 336 | 743 | 0 / 0 ✅ |
| 159259 | 三重奏·终卖 | 253 | — | 2 | — | 0 / 0 ✅ |
| 159558 | 三重奏·终卖 | 546 | 542 | 6 | 7 | 0 / 0 ✅ |
| 300820 | 潜龙吸水·双闸 | 1,600 | 1596 | 426 | 410 | 0 / 0 ✅ |
| 301611 | 潜龙吸水·双闸 | 503 | 499 | 100 | 100 | 0 / 0 ✅ |
| 600584 | 潜龙吸水·双闸 | 1,619 | 5344 | 247 | 1027 | 0 / 0 ✅ |
| 603179 | 潜龙吸水·双闸 | 1,624 | 2303 | 399 | 525 | 0 / 0 ✅ |

## 03|数据源差异（为什么我的绝对数字和生产报告不同）

| 标的 | 生产缓存 | 研究 bundle | 末价比 | 吸货信号数 生产/研究 |
|---|---:|---:|---:|---|
| 002156 | 1,624 根 | 4,521 根 | 0.9806 | 626 / 1730 |
| 002436 | 1,624 根 | 3,780 根 | 1.0702 | 647 / 1495 |
| 159259（三重奏·终卖） | 253 | — | — | None / — |
| 159558 | 546 根 | 542 根 | 0.9579 | 202 / 220 |
| 300820 | 1,600 根 | 1,596 根 | 0.9605 | 679 / 679 |
| 301611 | 503 根 | 499 根 | 0.9523 | 229 / 229 |
| 600584 | 1,619 根 | 5,344 根 | 0.9817 | 677 / 2141 |
| 603179 | 1,624 根 | 2,303 根 | 0.9006 | 615 / 877 |

**原因**：

- 生产缓存 = 腾讯前复权并按**现价归一化**，只保留约 1,620 根（2020-02 起）
- 研究 bundle = mootdx 前复权**全历史**（最长 5,344 根）
- 两者复权尺度不同（末价比 0.90~1.07）→ **筹码分布与信号数量会差 10%~30%**，但**逻辑与方向一致**
- 影响评估：回测窗口（末 1600 根）与生产缓存长度基本重合，且筹码 W 只用 160 根窗口 → 对相对排序无实质影响

## 04|结论

| 项 | 结论 |
|---|---|
| 生产席位复刻 | **逐位一致，可信** |
| 之前的对拍结论 | 有效（B30 0.88 ＞ A30+副图 0.89≈ ／ A30 0.68；生产 0.47） |
| 仍在的口径差 | ① 数据源（腾讯归一化 qfq vs mootdx 全历史）② 成交价（收盘）③ 费率（本表统一 0.15%，生产 万0.9/万0.5）|
| 切换前建议 | 生产链路的选股扫描要用**同一数据源**做一次端到端实跑对账（本表已把逻辑钉住，剩下只差数据层）|

## 05|局限

- 只比对了个股席与 ETF 席两种在役策略（其他研究级策略未覆盖）
- 逐位一致是在**同一份 df** 内比较，跨数据源的一致性是逻辑层面（同函数同参数），不是数值层面
- 未比对 START 之前（前 120 根）的信号，生产扫描同样从 START=120 起算

<div class='foot'>脚本 /root/ths_analysis/winner_test/{bt70_parity,make_report32}.py · 生成 2026-09-13</div>