---
title: 操盘手揭秘主力派发征兆与离场信号 — 外部材料六标准拆解
tags: [主力派发, 换手率, 高位放量, 事件研究, 判据回测, 不可测, 台账登记, 20261006]
created: 2026-10-06
status: draft
---

# 《操盘手揭秘主力派发征兆与离场信号》外部材料六标准拆解（后半段）

> 产出时间: 2026-10-06 (CST) | 状态: draft | 前半段（判据①事件研究回测）由既有产物提供，本文不重跑
> 归档正本: ~/.hermes/knowledge/wiki/复盘/[[操盘手_主力派发_20261006]].md

## 0. 材料与数据源

- **材料**：`/home/ubuntu/.hermes/cache/documents/doc_cabf5cd3db76_原文_操盘手揭秘主力派发征兆与离场信号.txt`（2273字/23行，口播转写，发言人1）
- **材料三征兆**：高（位置）/ 放（换手）/ 滞（全天滞涨+尾盘拉高）；两个假象：高位放量走加速、高位缩量横盘（托底不抬）
- **本次拆解的三条判据**：①当天最高点换手≥40% 或比之前高出一倍=派发 ②封单变薄+尾盘回封=卖压 ③托底不抬=诱多
- **回测数据源（引用，不重跑）**：`/tmp/backtest_1006.json`（22KB）
  - 价格: tushare pro.daily（缓存 /tmp/panel_2y.pkl，568交易日 20240603–20260930）
  - 换手: tushare daily_basic `turnover_rate`（缓存 /tmp/dist1006_basic.pkl）
  - 基准: 000001.SH 上证指数；窗口 20260409–20260930（120交易日，5592股，662,469股·日）
  - 推断: 同日事件先取日均 → 以交易日为观测的 t 分布 95%CI（df=天数−1）
- **交叉复核数据源（同日另一产物，只读）**：`stock_workspace/data/paifa_backtest_20261006.json`（`paifa_turnover_backtest.py`，generated_at 2026-10-06T07:51:57+08:00）
  - 基准 399001 深证成指、窗口 20260416–20260930（115日面板，但位置暖机 i≥65 → **有效事件窗仅39个交易日**）
  - 15 格 = 高位3口径（pos65 / dbl60翻倍 / w2_70两周+70%）× 换手5口径（T40/T30/T2x5/T2x10/T2x20），对照=同高位格内未触发样本

---

## ① 批判吸收（先跑数据、再下判断；每条断言标 ✅/❌/⚠️）

| # | 材料断言 | 数据 | 裁决 |
|---|---|---|---|
| 1 | 「当天最高点换手≥40% 或比之前高出一倍 = 派发」 | A(≥40%)全体: T+5 −2.48 [−5.31, 0.34] **不显著**、T+10 −4.11 [−7.98, −0.24] 显著(n=699事件/171股)；A高位子组: T+5 −3.42 [−6.33, −0.51]、T+10 −5.44 [−9.46, −1.41]；B(≥2×前20日均)全体: T+5 −0.91 [−1.32, −0.49]、T+10 −1.41 [−1.98, −0.84](n=34,414)；**B低位对照 T+5 −0.70 [−1.28, −0.12] 同样显著负**；base(全样本634,679股·日) T+5 −0.04 [−0.42, 0.35]≈0 | ✅**方向**：高换手后跑输基准（两类事件 T+10 均显著为负，且 base≈0 排除大盘漂移）<br>❌**阈值稳健性**：交叉产物 pos65×T40 n=72 → T+5 −3.20 **不显著**、相对同位对照 +0.38 **不显著**；而 T30(≥30%) −3.61 **显著**、对照差 −2.91 **显著** → 「40%」这个具体数字未被复现，更松的30%反而更稳<br>❌**位置必要性**：B口径低位对照同样显著负，高位净增益仅 −0.50pct/5日、−0.77pct/10日；A口径 96.4% 事件本就在高位、低位仅8例 → 位置效应**不可识别**（共线） |
| 2 | 「封单越挂越薄 + 尾盘回封 = 卖压，比早盘炸板危险十倍」 | 数据源盘点：`data_hub.py` 中 buy1/bid/ask1/五档/盘口字段 **0命中**；`yangjia_signals.py:493-518` 封单量只能用量比代理并留「数据不足」分支；`intraday_nine_windows.py:117` 的 `seal_ratio` 只有消费方（T9）与 demo，**无生产方**；`wuwei_signals.py:580` 明注「需要 data_hub 支持逐笔量价数据」；`v43_engine.py:262` 明注「资金背离需 level2」 | ⚠️**不可验证（数据缺口）**：无历史封单/委托队列 → 「变薄」无从度量；「尾盘回封」可用 `data_hub.get_minutes`（data_hub.py:2046）1分钟K半近似，但缺封单量仍无法验核心断言。**不做伪回测** |
| 3 | 「托底不抬（下方大买单地板、不主动上吃）= 诱多」 | 同上：无历史五档；实时 `get_realtime()`（data_hub.py:2906，mootdx quotes→mx后备）返回列不含委托档位 | ⚠️**不可验证（历史）**；实时侧可用性**未验证** → 现阶段仅思维层 |
| 4 | 「高位放量走加速**一定是**派发」（绝对化） | 交叉产物判据1b（高位+量≥2×20日均+5日涨幅为正且加速）: n=3,715，T+5 −0.14 [−1.06, 0.78]、T+10 −0.20 [−1.17, 0.77] **均不显著**（中位差 −1.7/−3.7pp 仅「有识别能力」档）；/tmp A口径 T+5 CI 含0、日间 sd=15.3 | ❌**绝对化被证伪**：平均意义上不显著，不存在「一定」；只能保留为提示信号 |
| 5 | 「从启动位翻倍 = 进入结算区（位置条件）」 | 回测用的是 60日收盘分位≥70 代理；交叉产物 `dbl60`（60日涨幅≥100%）口径样本仅 n=16~53，T2x10/T2x20 显著负但 n=22/40 极小 | ⚠️**未直接回测**：材料的「翻倍/结算区」口径与系统真源 `position_layer.HIGH_PCT=65` 不一致，两者都未形成可复现结论 |
| 6 | 「龙虎榜游资席位扎堆上榜 → 必须出」 | 本任务范围外，未回测 | ⚠️未验证 |
| 7 | 「顶部不是价格决定的，是接盘者的余量决定的」 | 无排队人数/委托队列数据，无法操作化 | ❌不可操作化 → 仅思维可复用 |

**小结（批判吸收）**：三条判据中只有判据①拿到了数据，且数据支持的是一句被削弱的话——「**高换手（无论口径）之后 5–10 日相对基准跑输**」，而不是材料原话「高位+40%换手=主力派发」。判据②③卡在[[数据缺口]]，属不可测而非已证伪。

---

## ② 逻辑结构化（公理 → 推导 → 缺口/跳跃 → 实质反驳）

**材料的隐含公理**
- P1 主力成本与利润目标有限：吃一个月货、拉一倍后继续拉＝替散户抬轿 → 到达结算区后倾向边拉边出
- P2 主力出货不能砸绿（要有人接）→ 派发必然表现为「红盘中的量价异常」，而非价格下跌
- P3 接盘能力（排队资金）有上限 → 顶部由边际接盘者决定，不由价格决定

**推导链**
P1+P2 → 派发的可观测量 = 位置(高) × 换手(异常放大) × 盘口结构(封单变薄) → 三判据（高/放/滞）+ 托底不抬（诱多）
P3 → 「尾盘回封/脉冲试盘」是主力试探接盘能力的手段

**缺口与跳跃（逐跳标注）**
- G1（公理→阈值）：P1 推不出「翻倍」「40%」这两个具体数字——是经验数字，且**无基准**（相对启动价？相对板块/大盘？）。材料自己把 30–50% 说成「不算啥」，阈值是拍的。
- G2（现象→因果）：高换手 → 「派发」跳过了替代解释：换庄、接力、新股开板、定增解禁、情绪退潮期的极端波动。回测测到的只是「极端换手后的负漂移」，**不是「主力在派发」这个因果命题**。
- G3（口径含混）：材料说「**当天最高点的**换手率≥40%」——日线换手是全日累计量/流通股，「最高点那一刻的换手」在日线上不可定义，只能用分钟累计近似；回测用全日换手做操作化 → 时点换手 ≤ 全日换手，回测口径实际比材料**更宽松**，事件被稀释（可部分解释 A 口径 T+5 不显著）。
- G4（条件耦合/共线）：材料把「高位」当必要条件，但 A 口径 96.4% 事件本就在高位 → 变量共线，命题不可证；B 口径高位只多跌 0.5pct/5日。
- G5（统计跳跃）：「一定是派发」从个体因果跳到统计规律，而回测只有平均意义的负超额，且交叉产物的 1b 判据均值不显著。
- G6（不可证伪的来源）：②③的不可证伪性来自**[[数据缺口]]**（微观结构），不是逻辑缺陷 → 不能因为「验不了」就当它成立，也不能当它错。

**实质性反驳（≥2，含对自己结论的限制）**

- **R1 单一 regime / 单窗口**：/tmp 回测事件窗仅 20260409–20260930（120交易日）单一段行情；交叉产物因位置暖机（i≥65、n=115）**有效事件窗只有最后39个交易日**（≈2026-07-13～09-30）。同一判据在两窗的显著性相反（A口径 T+10 显著 vs pos65×T40 n=72 不显著）→ **任何跨期外推都不成立**，这是对我自己「判据①部分支持」结论的第一层限制。
- **R2 基准与对照设计敏感**：base rate 在 000001.SH 下是 T+5 −0.04%，在 399001 下是 +1.69%（[1.04, 2.35]，显著正），相差 ~1.7pct/5日；对照设计也不同（全样本 base vs 同高位格内未触发样本）。超额的**量级与显著性都随设计变**，说明「跑输多少」不是判据的性质，是设计的产物。
- **R3 换手率在不同市值/板块基准下含义不同**：40% 换手在小流通盘题材股与大市值蓝筹是完全不同的事件；回测**未按流通市值/板块分层** → 「高换手」可能只是小市值高波动的风险溢价代理。**限制**：我自己的「主效应=高换手」同样受此污染——若 A 事件集中在小市值（171只股、699事件、多为连板题材），负超额可能来自极端波动后的均值回归，而非派发。
- **R4 A口径低位仅8例（中位17例）= 共线，位置效应不可识别**：所以我只能说「**数据无法检验**『高位是必要条件』」，**不能**说「已证明高位非必要」——这是对我自己结论的第二层限制；B口径的 0.5pct 净增益还依赖「低位高换手组与高位高换手组在市值/波动率上可比」这一**未做匹配、未验证**的假设。
- **R5 事件样本自选择**：能出现≥40%换手的股票本身就是极端行情股（171/5592 只），负超额可能是「极端情绪后的退潮」这一普适现象，与主力行为无关；全样本 base≈0 并不能排除事件子样本的风格敞口。
- **R6 阈值不稳定（实测）**：交叉产物15格中12格方向为负（方向一致性尚可），但 T40 不显著、T30 显著、T2x5/T2x10 不显著、T2x20 显著；aggregate 去重后 T+5 −0.21 [−1.06, 0.64]、T+10 −0.15 [−0.98, 0.68] → **verdict = 待定**。材料给的具体数字（40%）不是被验证的阈值。

---

## ③ 能力蒸馏（可复用判据四要素表）

| 判据 | 阈值 | 触发条件 | 适用位置 | 验证状态 |
|---|---|---|---|---|
| **D1-a 高换手（绝对阈值）** | 当日 `turnover_rate ≥ 40%` | 当日收盘后一次性判定；**必须叠加位置门**（60日分位≥65/70，真源 `position_layer.HIGH_PCT=65`） | 日线、收盘后全市场扫描 / 持仓离场检查 | ⚠️**部分验证**：/tmp A高位 T+10 −5.44 [−9.46,−1.41] 显著；但全体 T+5 CI 含0；交叉产物 pos65×T40 n=72 **不显著**（对照差 +0.38）→ 阈值40% **待跨窗复验** |
| **D1-b 高换手（相对阈值）** | 当日换手 ≥ 自身前20日均值 × 2 | 同上；**位置门不必要**（低位对照同样显著负） | 同上 | ✅**方向已验证**：T+5 −0.91 [−1.32,−0.49]、T+10 −1.41 [−1.98,−0.84]（n=34,414）；位置净增益仅 −0.50pct/5日（未做市值匹配，见R4） |
| **D1-c 高位翻倍=结算区** | 60日涨幅≥100%（材料口径）或60日分位≥65（系统真源） | 与 D1-a/b 组合使用 | 日线位置判定 | ⚠️**未验证**：`dbl60`×T2x10/T2x20 显著负但 n=22/40 极小；材料「30–50%不算」无回测 |
| **D1-d 高位放量加速=必派发** | 量≥2×20日均 + 5日涨幅为正且>前5日 | 高位 + 放量 + 加速同时成立 | 日线 | ❌**绝对化证伪**：n=3,715，T+5 −0.14、T+10 −0.20 均 CI 含0 → 只可做**提示**，不得作硬否决 |
| **D2 封单变薄+尾盘回封** | 无（缺封单量数据，阈值无法标定） | 半近似：14:45–15:00 1分钟K中涨停价「先失封后回封」（数据 `data_hub.get_minutes`） | 盘中/收盘后分钟K；封单量仅实时可得时才有意义 | ⚠️**不可测**（历史封单/委托队列缺失）；半近似**待验证** |
| **D3 托底不抬=诱多** | 无 | 实时五档：下方多价位大单堆积 + 分时均价不上行 + 主动买不增 | 实时盘口（历史不可回测） | ⚠️**不可测**（无历史五档；实时可用性未验证）→ 现阶段仅思维复用 |
| **D4 位置条件（材料原文）** | 从启动位翻倍（或两周+70–80%）进入「结算区」 | 启动点定义缺失 → 只能用分位代理 | 日线 | ⚠️**口径不一致、未直接回测** |

---

## ④ 分析输出（完整逻辑链：数据源 + 分析路径 + 判断）

- **数据源**：tushare `pro.daily` + `daily_basic(turnover_rate)`（120交易日 × 5592股 × 662,469股·日，20260409–20260930）+ 上证指数（基准）；交叉复核用同日另一产物 `data/paifa_backtest_20261006.json`（基准399001、有效事件窗39日、15格参数网格）。
- **分析路径**：材料断言 → 事件化（A:换手≥40% / B:≥2×前20日均值）→ 按自身60日收盘分位分桶（高位≥70 vs 同换手低位<30 对照）→ 前瞻 T+5/T+10 超额（个股 pct 复利除权安全 − 指数同期复利）→ 按交易日聚类求 95%CI（同日事件=1观测）→ 与全样本 base rate 对比 → 交叉产物做参数网格与对照设计复核。
- **判断**：
  1. ✅「高换手之后 5–10 日相对基准跑输」成立（A T+10 −4.11、B T+5/T+10 均显著负，base≈0）；
  2. ❌「40%」这一具体阈值**不稳健**（另一设计下 n=72 不显著，30% 反而显著）；
  3. ❌「高位是必要条件」**未被数据证明**（B口径低位对照同样显著负；A口径低位仅8例=共线，位置效应不可识别；位置净增益≈0.5pct/5日）；
  4. ❌「高位放量加速**一定**派发」被证伪（1b 判据 n=3,715 双期限均不显著）；
  5. ⚠️判据②③**不可测**（无历史封单/五档/逐笔），只登记不回测。
- **判断的边界**：单一窗口/单一段行情、未按市值与板块分层、事件样本自选择、两份回测基准与对照设计不同 → 结论是「**方向层面的弱证据**」，不构成可直接实盘的硬规则。

---

## ⑤ 归档

- 正本：`~/.hermes/knowledge/wiki/复盘/操盘手_主力派发_20261006.md`（frontmatter: title/tags/created/status: draft）
- 工作稿（防丢，分段追加）：`/tmp/caopanshou_1006.md`
- 引用产物（只读）：`/tmp/backtest_1006.json`、`stock_workspace/data/paifa_backtest_20261006.json`、`stock_workspace/paifa_turnover_backtest.py`

---

## ⑥ 内化三分类（可代码化→脚本与接入点 / 仅可复用为思维 / 两者都不行）

> **本节只给改动清单，不改任何代码**（分析任务约束）。

### D1 高换手判据 → 【可代码化】，但**上线前置条件未满足**

| 目标脚本 | 接入点（函数/行号级） | 具体改动 | harm 评估 |
|---|---|---|---|
| `wuwei_signals.py` | `class ContinuationVsDistribution` L369；新方法锚在 `has_escape()` L400–420 之后；`judge()` L436 分支 | 新增 `has_turnover_spike()`（≥40% 或 ≥2×前20日均），命中时并入 complex/reversal 分支 | 中：需要 `df` 注入 `turnover_rate` 列（当前只用 `vol/pct_chg/close`）→ **数据契约变更**，所有调用方受影响 |
| `wuwei_signals.py` | `check_high_position_hold()` L1364；条件5 `phase_danger` L1488–1491；`conditions` dict L1499–1506 | 新增条件6 `'no_turnover_spike'`，并加入 `condition_list` L1508 | 低：只增不改；同样依赖换手列 |
| `sell_advisor.py` | `check_stock()` L73；锚 L129–132「高位(pos_pct)+主力出货 → 建议清仓」 | 追加触发器 `pos_pct >= HIGH_PCT and turnover_rate >= 40` | **高（清仓级动作）**：阈值不稳健(R6)+单窗口(R1) → 若接入，**先降级为提示、禁止直接给清仓指令** |
| `pullback_screener.py` | `scan_pullback()` L137、`scan_launch()` L263 | 加过滤：`turnover ≥ 2×前20日均 且 60日分位≥HIGH_PCT` → 降权/剔除 | 中：买向脚本加卖向过滤，可能漏掉强势股，**必须先回测** |
| `alert_engine.py` | `_check_volume()` L440；已读 `turnover_rate`（L467–476，现阈值 `tr > 5.0`） | 增加材料阈值分支（40% / 2×均值）+ 位置门 | 低：仅告警，无下单影响 |
| `position_layer.py` | `LOW_PCT/HIGH_PCT` L47–48、`get_position()` L113 | **只 import 不新增**：位置阈值唯一真源（回测已遵守 `HIGH_PCT=65`） | — |
| `factor_filter.py` | `FactorValidator.validate()` L34 | 接入方式=**准入闸**：把「高换手信号」当因子算 IC 后过 Bonferroni/FDR，未过校正不得上线（判据①属多判据并行检验场景） | 低：只在验证期使用 |

**上线前置（缺一不得写进实盘链路）**：① `df` 注入 `turnover_rate` 的数据契约改造 ② 至少3段不同 regime 窗口复验 ③ 按流通市值/板块分层复验（R3）④ 阈值敏感性网格（40/30/2×5/2×10/2×20，已知不一致）。

### D2 封单变薄+尾盘回封 → 【半可代码化，标待验证】

| 目标脚本 | 接入点 | 具体改动 | harm |
|---|---|---|---|
| `intraday_nine_windows.py` | `check_window('T9')` L115–125（已消费 `seal_ratio`，**无生产方**）、`check_window('T8')` L104–113（尾盘时段） | 用 `data_hub.get_minutes`（data_hub.py:2046）补「14:45–15:00 先失封后回封」半近似；封单量接入前 `seal_ratio` 只能留空 | 中：误把正常尾盘回封当派发 → **仅提示级**，不得驱动卖出 |
| `same_slot_volume.py` | L37 `"last30": (210, 240)` 尾盘30分钟窗口 | 复用其分段口径，避免二次定义「尾盘」 | 低 |
| （缺）封单量生产方 | 无 | 需新增实时封单快照采集（五档/Level1）→ 属**新数据能力**，不是判据接入 | — |

### D3 托底不抬 → 【两者都不行（现状）】
- 历史五档不存在 → 无法回测；实时五档可用性未验证 → 不接入。**仅可复用为思维**：下方大单地板 + 价格不主动上移 ≠ 支撑，而是「让持有者安心不卖、让后来者排队接」。
- 若未来验证 mootdx quotes 含五档，可另立项目（先做可用性验证，再谈判据）。

### 「一定是派发」类绝对化断言 → 【可代码化但必须改写】
- 可写成**提示**（`sell_advisor` / `wuwei_signals` 的 warning 字段），**禁止**写成硬否决或清仓触发（数据：n=3,715 双期限均不显著）。

---

## 台账写入记录（外部状态，已回读核对）

- **入口**：`stock_workspace/analysis_logger.py` → `log_analysis()` L47（`accuracy` 默认 `"待验证"`，L79；索引 `~/.hermes/data/analysis_log/<date>.jsonl` + `index.json`）。文档入口：`~/.hermes/knowledge/wiki/系统架构/决策闭环操作手册.md` L22。
- **写入 3 条**（2026-10-06，回读 `2026-10-06.jsonl` 共3条、`pending_reviews()` 含 OP-D2/OP-D3）：

| rule_id | entry_id | accuracy |
|---|---|---|
| OP-D1（判据①） | `analysis-20261006-083126-4ece` | 回测已验:部分支持(2026-10-06)（回测数字与CI同记录内） |
| OP-D2（判据②） | `analysis-20261006-083126-2387` | 待验证 |
| OP-D3（判据③） | `analysis-20261006-083126-0794` | 待验证 |

- **未用 `judgment_ledger.save_judgment()` 的理由**（入口存在，属**选择**而非缺失）：其 `backtest_results`/胜率池服务 L4「按命中率淘汰错判据」，要求判据可自动回测；D2/D3 不可测会永久挂 pending 并污染胜率统计，且其去重键（date+source+target+direction）是标的级、与本次规则级登记不匹配。三条均带 `falsify` 字段（写入 `extra`），满足可证伪要求。
- `action="规则登记"` **刻意不在** `auto_verify_analysis.ACTION_DIRECTION` 映射表内 → 16:00/23:05 自动验证会 skip，不会用上证指数5日涨跌把规则级预测误判成「正确/错误」。

## 不可测声明（缺什么）

- **判据②**：缺**历史封单量与委托队列**（Level2/逐笔）。现有能力 = 日线（tushare pro.daily/daily_basic）、分钟K（`data_hub.get_minutes`/mootdx minute）、实时 Level1（mootdx quotes，**无 bid/ask 档位字段**）。半近似 = 1分钟K判「尾盘先失封后回封」，仍无法验「封单变薄」→ 不做伪回测。
- **判据③**：缺**五档历史**；实时侧未验证。
- 这是**[[数据缺口]]**，不是逻辑被证伪；在补齐数据前，②③只能以「待验证」身份留在台账。

---

## ⑦ 跨窗复验（2026-10-07 补做，前置条件①②③全部满足）

> 老板指令「你回测，验证使用 tushare 数据」。首轮单窗（有效事件窗仅39日）的「方向级弱证据」到此升级。

- **数据**：tushare `pro.daily` + `pro.daily_basic` 全量 **568 交易日（20240603–20260930）、292 万股·日、turnover 覆盖率 100%、0 缺失**（新缓存 `~/.hermes/cache/scratch/basic_full_2y.pkl`，`pull_basic_full.py` 本批新拉 428 日）
- **脚本**：`stock_workspace/paifa_multiwindow_reverify.py` → **产物（唯一真源）**：`stock_workspace/data/paifa_reverify_20261007.json`
- **设计**：3 段 regime 窗口（W1 2024H2 下跌+暴力反转 指数+11.2% / W2 2025 全年 +29.9% / W3 2026 前三季度 −4.7%）× 5 换手口径（A40/A30/B2x5/B2x10/B2x20）× 2 位置门（高位≥65 / 无门）；日聚类 t-CI；对照=同窗口同高位未触发样本按日配对求 net；事件内流通市值三分位分层

**跨窗裁决（T+10，net=对照扣减后净效应）**：

| 判据 | W1 | W2 | W3 | 裁决 |
|---|---|---|---|---|
| **A30+高位门** | −3.68* | −3.53* | −4.04* | ✅ **3/3 显著负 → 采用** |
| A40+高位门（材料原话） | −8.68* | −4.12* | −2.70（CI含0） | ❌ W3 不显著 → 阈值弃用 |
| A40 无门 | −8.26* | −4.29* | **+0.46** | ❌ 翻正 → 位置门必须保留 |
| B2x20（≥2×前20日均） | −1.89* | −1.17* | −0.96* | ✅ **3/3 显著负 → 采用**（无门同样 3/3） |

- 市值分层：A30 在大/中/小三档全部为负（非小市值风格伪影）；A40 不稳定集中在 W3 小市值（+2.76，题材股高换手属常态）→ 再证 40% 阈值不可用
- base rate：三窗 T+10 分别 +0.70/+0.30/+0.09（≈正）→ 负超额非大盘漂移
- **板块分层（2026-10-07 补做，封缺口）**：tushare `stock_basic.industry`（110行业）
  - A30+高位门：n≥20 行业中 **19/20、36/43、19/23 为负**；top1 行业事件占比仅 10~14%（软件服务/电气设备）；**剔除 top1 行业后 net = −6.11/−3.65/−5.69**（不弱于全量）→ **非少数行业驱动**
  - B2x20：**96/111、89/111、92/110 为负**；top1 占比 6%；剔除后 −0.93/−1.06/−0.92 → 广谱负
  - 产物内 `windows.*.sector_stratification`（同 JSON）
- **边界**：单指数基准（399001）、事件子样本自选择仍在 → 结论限「方向+量级」，不外推窗口外

**接入（同日完成）**：
- `alert_engine.py` **ALERT 8 `_check_turnover_spike()`**：绝对口径 = 换手≥30%（`TURNOVER_ALERT_ABS`）+ 60日分位≥`position_layer.HIGH_PCT`；相对口径 = 量≥2×前20日均（`TURNOVER_ALERT_REL`）。**提示级措辞（"提示级"），不接 sell_advisor、不给清仓指令**
- 回归测试 `tests/test_alert_turnover_spike.py` 8 断言（阈值常量锁定防漂移）+ tests 全套 9/9 过
- 台账：`analysis-20261007-054457-fc7d`（OP-D1-R2，accuracy=回测已验:跨窗3/3，falsify=新窗口翻正即降级/撤下）
- CLI 端到端实证：`alert_engine.py 301520.SZ` → `🔶 换手派发嫌疑(换手40.8%≥30% 高位73≥65) 提示级`（换手值与 tushare 40.8157 同源）

**接入过程中挖出并修复的两个数据层静默空返 bug（均实证复现）**：
1. `data_hub.get_kline`：`_resolve_best_source('kline')` 盘后返回 `'tushare'`（10/06 智能路由），但 get_kline **无 tushare 消费分支** → 全分支跳过 → 静默空 DF → **alert_engine 盘后/夜间全部空跑**（05:45 实测 4 股全空）。修复：补 tushare 分支（日期降序取 head(count) 再升序，守住 iloc[-1]=最新约定），失败落 westock→mootdx→sina 兜底链，禁止空返
2. `data_hub.get_realtime_daily`：盘后只回看今/昨 2 天 → 节假日（国庆/春节）连续非交易日恒空 → 换手派发提示静默失效。修复：回看 12 天 + 缓存「最近交易日」（节假日内第 2 个 code 起免遍历）
- 两处均在 canonical `~/.hermes/scripts/data_hub.py`（`stock_workspace/data_hub.py` 为其 symlink），git 基线可回滚

---

## ⑧ 五档/封单数据口验证（2026-10-07，判据②③ 可测性裁决更新）

> 背景：原文标注判据②③「实时侧可用性未验证」。本轮逐源实测，结论**翻转**。

| 源 | 实测 | 结果 |
|---|---|---|
| mootdx StdQuotes `get_security_quotes` | 底层 raw 返回 `[]`（bestip 重连 `No route to host`）；data_hub 自注「mootdx quotes 失效（能力矩阵禁用）」 | ❌ 死源 |
| mootdx ExtQuotes | 库自身 warning「扩展市场行情接口已经失效」；且 ExtQuotes=扩展市场≠A股五档 | ❌ 死源（**data_hub 头部 `ext_quote() ✅五档 Level2` 属声明漂移**，实测不成立） |
| westock CLI（腾讯） | `quote` 命令不存在（`capable('quote')=False`，命令清单无 quote） | ❌ 无此能力 |
| tushare | 无盘口接口 | ❌ 无 |
| 东财 push2 | 首请求返回 f43~f48，追加五档字段后持续空响应（限频/反爬） | ⚠️ 未接通（属新数据能力，另立项） |
| **新浪 hq（实测 34 字段）** | `hq.sinajs.cn` 返回**买一~买五、卖一~卖五价量齐全**（f10–f29，实证：茅台 买一1445手@1258.62 … 卖五8000手@1258.75）；`sina_source.SINA_QUOTE_FIELDS` 解析映射正确，**仅被输出白名单 `REALTIME_COLS` 丢弃** | ✅ **实时可用（字段级实证，节假日也有最后快照）** |

**更新后的裁决**：
- **判据②（封单变薄+尾盘回封）**：实时封单量=涨停时的**买一量** → 新浪快照可得，**盘中可监测**（需轮询积累序列才能谈"变薄"斜率）；历史回测仍不可测（无历史盘口存储）
- **判据③（托底不抬）**：五档价量实时可得 → **实时可判**（买二~买五大单堆积 + 分时不主动上移）；历史回测仍不可测
- **共同前置（未做）**：历史盘口不存在是硬约束 → 要让②③从「思维复用」升级为「已验证判据」，必须先建**盘中快照采集器**（新浪五档，每N分钟落盘）积累历史 → 属新数据能力
- 在此之前，②③仍按「待验证」留台账（OP-D2/OP-D3 不变），禁止伪回测

**→ 已立项落地（2026-10-07 老板批准"立项"）：**

| 项 | 值 |
|---|---|
| 采集器本体 | `stock_workspace/orderbook_collector.py` |
| 调度包装 | `~/.hermes/scripts/orderbook_collector.sh`（cron 只认 scripts 目录相对路径） |
| cron | `79856f817f3d` orderbook-collector，**no_agent**，`*/5 9-15 * * 1-5`，deliver=origin |
| 采集范围 | 全市场（get_stock_list，剔北交所），实测 5224 只 / 16.8 秒（150只/批，批间0.4s） |
| 输出 | `data/orderbook/<YYYYMMDD>/<HHMMSS>.csv.gz`（每快照一文件防半写坏；33列含买卖五档价量） |
| 门禁 | ①时段 09:30-11:30/13:00-15:01+工作日 ②交易日=新浪date==today（节假日自动静默） |
| stdout 约定 | 成功/跳过=静默（防QQ刷屏）；异常=打印+`/tmp/cron_errors/errors.log`+exit 1 |
| 已验证 | `--test` 全市场 5224行0短行✓ 生产门禁静默exit0✓ 手动跑3次✓ cron list分类✓ |
| 待验证 | **开市首日生产采集** → 一次性验收 cron `6a6819155728`（2026-10-08 15:10 查快照数≥48/行数≥5000） |
| 台账 | `analysis-20261007-072318-5e26`（OB-COLLECT，falsify=首日无文件即失败） |
| 数据量预估 | ~25万行/日，gzip 10~20MB/日（磁盘 28G 空闲；>180天再加清理策略） |

验收通过后，判据②③的回测资格仍需**积累足够交易日**（封单变薄事件稀少，预计≥20交易日才有首批评测样本），届时再按 learn-from-master 闭环跑验证。
