← 归档索引 · 2026-09-28 21:44 · 晚间统一扫描-21:30
Cronjob Response: 晚间统一扫描-21:30
(job_id: e710af0bbd73)
-------------

## 📟 晚间 21:30 统一扫描 · 2026-09-28(中秋后首个交易日)

**一句话结论**:脚本 4/4 全绿、数据齐全;但今晚抓到一条**静默数据污染(P0)**——「低位启动扫描」27 条动作里 15 条读的是**错行数据**(把 2018 年新股首日 +44% 当成"今日涨幅"),并把今天**跌停**的长飞光纤写进了候选池。根因已定位到一行代码,可复现。

---

### 一、市场(全部用 tushare 独立复核,不是抄脚本)

**我实际跑的命令**:`pro.trade_cal(20260920~20260928)` + `pro.index_daily` ×4 + `pro.daily(trade_date='20260928')`(5557 行)

| 项 | 值 |
|---|---|
| 交易日核定 | 09/28 `is_open=1`,前一交易日 09/24(09/25 中秋休市)✅ |
| 上证 | **3823.62 −1.67%** |
| 深证 | **12858.75 −3.44%** |
| 创业板 | **3139.82 −4.53%** |
| 科创50 | **1555.98 −4.06%** |
| 广度 | 涨 898 / 跌 4554(**上涨比 16.2%**),涨停 41 / **跌停 127**,中位数 **−1.85%**,成交 17167 亿 |

**连续性**:不是一根孤针,是**4 天连跌且加速**——上证 09/21 +0.97 → 09/22 +0.06 → 09/23 −0.39 → 09/24 −1.22 → 09/28 −1.67;深证 09/23 −0.64 → 09/24 −2.34 → **09/28 −3.44**。

**⚠️ 我自己交叉验出的一处口径冲突**:脚本给的「量比 0.84~0.99」看着像缩量,但**日间成交额口径是放量的**——深证 4.427e8 千元 vs 09/24 4.023e8(**+10%**)、创业板 +14.3%、科创50 +15%、上证 +2.7%。**结论按日间口径:这是放量下跌**(量比是盘中节奏指标,两者不可混用)。叠加「首 30min 占量 40~69%、尾盘仅 10~23%」,性质是**早盘集中抛售 + 尾盘无人接盘**,抛压未释放完。

**板块**:最弱 通信/光纤 −10.00%(601869/600522/600487 三只跌停)· AI/光模块 −7.82% · 黄金 −6.02%(上涨比 0%)· 半导体 −4.55%(上涨比 3.5%);最强 电力/公用 +1.69% · 银行/保险 · 行业榜 红黄酒+1.86%/汽车整车+1.22%/啤酒+0.86%。

**闸门判定(SOUL 分析闸门)**:① 深成指止跌?**否**(−3.44% 创新低)② 止跌日放量确认?**前提不成立** → **只看大盘,不打开个股**。

---

### 二、P0:静默数据污染(今晚新发现,四步根因链)

```
① low_launch_scanner.py:235  hub.get_daily(code, 75)
   ↑ 但 DataHub.get_daily 签名是 (code, start, end, source, max_rows=200)
   → 75 被当成 start(日期),行数参数根本没传对
② data_hub.py:1858  截断+排序块的守卫是  ... and not start
   → start 非空 → 整段跳过 → 不排序、不截断,原样吐给调用方
③ westock 正常时返回 200 行正序 → 恰好掩盖问题
   今晚 westock 限频 43 次 → 回退 tushare daily → 全历史 + 倒序
④ 扫描器 df.iloc[-1] = 最老一行 = 上市首日涨停 44% → 被当成"今日启动"
```

**实证(我直连跑的)**:
- `hub.get_daily('601869.SH', 75)` → **1988 行、降序**(head `20260928 −9.9954` / tail `20180720 +43.991`);对照未被限频的 `300377.SZ` → 200 行、升序 → **同一接口两种顺序**
- 今天 601869.SH 收盘 394.22,**−9.9954%(贴跌停)**

**三项后果**:
1. 27 条动作行中 **15 条 |涨跌幅| ≥ 11%**(主板物理不可能),其中 **11 条显示 +43.99~44.02%**(=新股首日涨停上限)
2. **候选池被写脏**:auto 池今晚只新增 1 只——`601869.SH 长飞光纤「启动候选」pos 11.0%`,而它今天跌停 → 明天它会以"启动候选"身份参与后续流程
3. **板块共振结论反向**:快照里写着「确认主线半导体(104 只低位洗盘+同涨≥2%)」,而半导体当天 **−4.55%、上涨比 3.5%**。这条错误结论比 1、2 更危险

**修法(最小改动,未动手——前端只读值班)**:
```python
# 7 处调用改成关键字传参(spot-check 后可批量替)
low_launch_scanner.py:235   hub.get_daily(code, 75)   → hub.get_daily(code, max_rows=75)
verify_low_launch.py:61 / pan_gan_check.py:54 / sector_upgrade_watch.py:67 /
backtest_bottom_r1v2.py:59 / backtest_bottom_structure.py:59,61 / bottom_structure_check.py:196   同病

# data_hub.py:1858 加防御(一处改,全类受益)
if not df.empty and max_rows > 0 and len(df) > max_rows:   # 去掉 and not start
    df = df.sort_values(date_col).reset_index(drop=True).iloc[-max_rows:]
# 且调用方传数字型 start 时应 raise(宁报错不静默读错行)
```
**验证方式**:`hub.get_daily('601869.SH', max_rows=75)` 必须返回 75 行升序、末行 `20260928`;反向自证——故意让 tushare 兜底(`source='tushare'`)时仍升序。

---

### 三、P1:同一次运行内自相矛盾(引用时要小心)

- **HMM 两个答案**:HMM(335日) 输出「🐂 牛市 · 概率 100% · 可顺势加仓」,而同快照里 market_debate 引用 HMM 得到「🦀 震荡市」,并给出 **🐻 BEAR 3:1**(现价 3823.62 跌破 MA20 3920 / MA60 3910)。我复跑 `hmm_regime()` 确认:`prob=1.0`,四个状态均收益 `[−1.617, −1.305, +0.062, −1.713]`——**在四个状态里三个为负的情况下报"牛市 100%"**,今晚这条**不可消费**;以 debate 的震荡+BEAR 为准(与价格行为一致)。
- **心法扫描 Phase0 用的是 09/24 数据**(版块主力方向标注「20260924 定稿」),Phase1/2 的价格是今日 → 引用时必须分开标日期。
- 今日 wrapper rc=1 共 **6 条**(未逐个排查,如实报数):git_autocommit 03:05 / ima_backflow 05:00 / migration_audit 08:27 / drift_guard 08:30 / close_scan 15:06 / industry_strength 15:55。

---

### 四、已修复确认(旧账闭环)

9/21–9/23 连续三天报的 `evening_master_scan.sh` 末行 `[ "${FAILED:-0}" = 1 ] && exit 1` **恒 rc=1 假失败** → 已补 `exit 0`(脚本尾部 9/27 注释,我读了源码确认)。今晚 **4/4 全绿、cron `last_status=ok`**,假失败信号消失,真失败不再被掩护。

---

### 五、明日验证条件(闸门重开判据,缺一不看板块)

1. 深成指**不再创新低**(收在 12858.75 上方)
2. 止跌日**成交较前一日放大**(日间口径,不是量比)
3. 创业板开盘 30 分钟是否止跌(> −1%);量比若进一步萎缩到 <0.7 = 抛压衰竭信号

### 六、机会轨(条件触发才动,不是现在)

- **今日有主力痕迹的抗跌方向**:汽车配件(心法 8.4 分、主力单日 +9.5 亿、5 日 +1.3%、位置 29%)、林业(8.1 分)、出版业(7.8 分)、电力/公用(+1.69%)、行业榜红黄酒/汽车整车
- **潜伏新进**:AI眼镜、培育钻石(仅潜伏分维度,非推荐)
- **明确不碰**:通信/光纤(三只跌停 + 尾盘无量 = 流动性塌陷,不是恐慌出清)· AI/光模块 · 黄金(上涨比 0%,未见止跌)· 半导体(共振结论已被证明来自错行数据,重算前不作为依据)

---

✅ 已定位 P0 根因并实证(1988 行倒序 + 跌停股入池) ✅ 修法给出、波及的 7 个脚本已列全 ✅ 未改代码(前端只读值班),说「转后端」我就批量修 + 双向自证(升序/行数断言 + 反例复现)

To stop or manage this job, send me a new message (e.g. "stop reminder 晚间统一扫描-21:30").