← 归档索引 · 2026-09-27 23:45 · 节点转折+ftshare扫描-21:45
Cronjob Response: 节点转折+ftshare扫描-21:45
(job_id: a5703c635470)
-------------

## 🌙 节点转折+ftshare 晚间扫描 — 本次运行 = 20260924 数据(非新交易日)

**先说时间口径(防混淆)**:本次执行记录 `2026-09-27 22:42` 启动(周日补跑),`trade_cal` 显示 **9/25(五)–9/27(日) 全部休市**(is_open=0),最近交易日仍是 **9/24(四)**。所以下面所有数据都是 9/24 的,不是"今晚"的行情。脚本本身没有"无新交易日"判断,补跑会把旧数据当新晚间扫描派发。

**数据完整度:1/2 段可用,且可用那段的核心家数失真到翻转档位。**

---

### 一、[1/2] 节点转折:仍空段,但根因和前两天报的不是同一个

| 层 | 今晚实测 | 来源 |
|---|---|---|
| 现象 | `[1/2]` 连续第 4 个交易日零输出 | cron 输出 a5703c635470 |
| 根因A(未修) | `data_hub.get_pool()` → `bingjia_system` → `~/.stock_pools.db`:443 条 **全 status='exited',active=0** → 扫了 0 只 | sqlite 实查 |
| 根因B(**新查出**) | `evening_2145_scan.sh` 给节点扫描 `timeout 120`,而单只票耗时 **27.6s / 27.7s / 39.7s**(实测 3 只:daily 9–11s + moneyflow 4–9s + 5 模块 8–20s)→ 120s 只够 3–4 只,**必然被静默 kill** | 逐只计时 |
| 为什么静默 | 外层 `timeout 120 ... 2>/dev/null`:超时无输出、无报错、脚本内 `timeout 240` 永远轮不到、缓存 `/tmp/node_turning_signal.txt` 写不到 → 晨报次日 `cat` 无文件,当成"无信号" | 脚本+缓存实查 |
| 双真源分裂仍在 | `pool/pools.json` 健康(auto 196 + invest 19 = **209 只**,mtime 9/27 23:21),`.stock_pools.db` 全死。节点扫描恰好接在死的那边 | 两源实读 |

**判断**:节点转折信号缺失 = 池源死 + 时间预算不足 两个独立故障叠加,**不能解读为"市场无节点转折信号"**。跑通一次试算:直接喂 pools.json 前 3 只(耗时 95s)即产出 `300373.SZ 杂毛2分 | stampede`、`688396.SH 杂毛2分 | stampede`、`920392.BJ 无` —— 说明模块本身是活的,是供给断了。

---

### 二、[2/2] ftshare:跌停虚高 36 倍,**情绪档位连续第 2 个交易日翻转**

今晚报出:涨停 70 | 跌停 547 | 炸板 10 | 炸板率 12.5% | 情绪七度 **温和** | 建议 **正常参与,标准仓**

**跌停 547 → 真跌停 15 家**
- 判别规则(我已验证):`last_limit_down_time=='15:00:00'` 且 `limit_down_seal_value` 为空/0 = 占位假行。
  - 占位行 **528/547(96.5%)→ 核价真跌停/触及 = 1,假 = 527**
  - 非占位行 **19 行 → 19 真**(100% 命中,正例控制通过)
- 真跌停 15 家明细含 2 只北交所 −30%(920025、920229)、*ST岭南 −4.49%,与 tushare `limit_list_d` D池 13 只一致(差 2 只是仅触及未收封)。
- **漂移在扩大(漂移存活天数 ≥ 9 天)**:9/15 报 34→真30(1.1×)→ 9/21 16→真2 → 9/22 109→真4 → 9/23 392→真15(26×)→ **9/24 547→真15(36×)**。跌幅越广,占位行越多,是系统性放大。

**涨停 70 → 真涨停 53(我自算 close==涨停价)/ 52(tushare U池)**
- `first_limit_up_time=='15:00:00'` 共 17 行;非占位行核价 **43/43 全真**(早盘板 37/37 真、非占位尾盘板 6/6 真)。
- 反向自证:up 池 80 行里 **17 行 status=limit_up 但全天未触及涨停价**(涨幅仅 +0.6%~+2.3%)—— 占位行确认为假。
- 真·早盘板 = 37,真·尾盘板 = 6(报出 23 里 17 是占位)。

**★ 可操作结论(这条才是重点)**
```
报出口径 sentiment_level(70, 547)  → 温和 / "正常参与,标准仓"
真实口径 sentiment_level(53, 15)   → 悲观 / "轻仓试错"
tushare 口径 sentiment_level(52,13) → 悲观 / "轻仓试错"
```
- 炸板率修正 10/(53+10)=**15.9%**(报出 12.5%),仍 <40 不触发额外降级,但**档位本身已翻**。
- 旁证(独立源 data_hub 日线,9/24):**上证 −1.22% / 深成 −2.34% / 创业板 −2.68%**,全市场 **4306/5557 家下跌**、跌>5% 258 家、跌>9% 35 家。这种广度下报"温和/标准仓"反常识,**"悲观/轻仓试错"才吻合**。
- 9/23 那份报告也翻过档(当天侥幸/今天维持不住);**连续 2 个交易日**同一 bug 产出反向操作建议。
- 炸板段另有历史反例:9/21 ft报炸板 **264** vs tushare Z=**25**(当天该字段也不可用)。

**证伪条件**:① 给出 528 只占位行中 ≥80% 当日 close 或 low = 跌停价的任一独立行情源证据(我抽样 528 只有 1 真)→ 我的"占位=假"结论推翻;② ftshare 官方确认 `15:00:00` 是收盘确认标记而非缺时间数据占位 → 同上;③ 若 tushare `daily` 9/24 数据本身错,则真值 15 家待重核(当前两源互证一致)。

---

### 三、池风险段:报"0 命中"结论碰巧对,但**方法错到会永久致盲**

池共 208 只(同日 pools.json 209,9/23 报 243、9/22 报 298 → 池在持续收缩),命中 0 条。两处必须改:

1. **解禁永远查不到(静默致盲)**:`stock-unlock` 接口必须传 **6 位无后缀代码**。实测 `001222` total=6(含 **2026-09-28 解禁**)、`001222.SZ` **total=0**。而 `ft_risk_scan.py` 用 `to_ft_symbol()` 加了 `.SH/.SZ` → 池内解禁**恒为 0**。
   - 正例控制:`tushare share_float` 9/27–10/4 有记录、池内未来 30 天确有 3 只(300323.SZ / 603667.SH / 920156.BJ,不在 7 天窗内)→ **今天 0 命中结论成立**,但方法明天就会漏报。
2. **商誉段覆盖不完**:接口按**报告期**过滤,`date=20260924` 是非报告期;实测 `total=5399 / pageSize=200 / pages=27`,客户端**不分页只取第 1 页**。等于拿 200 条样本判全池"无高商誉"。
3. **归档是假的**:`evening_2145_scan.sh` 末行 `echo "" | upload_stdin_to_ima.sh` 传的是**空串**;实测 rc=0(脚本内 `SIZE>50 才上传` → 静默跳过)。**本次两段数据一条都没进 IMA。**

---

### 四、待修清单(本 cron 只读,未动代码)

| 级别 | 项 | 证据 |
|---|---|---|
| **P0-a** | 节点扫描时间预算:`evening_2145_scan.sh` 的 `timeout 120` 对 15 只×30–45s 必然超时;且 `2>/dev/null` 吞掉超时 → 要么 `--limit 3`、要么 timeout 提到 900+、要么启用回归为独立 cron(9/12 起 18:30 那个被 disabled) | 单只 27.6/27.7/39.7s |
| **P0-b** | `get_pool()` 真源分裂:`.stock_pools.db` 全 exited(active=0) vs `pools.json` 209 只健康。统一真源;空池时**显式**打印"池=0只,未扫描",禁静默空行 | 两源实查 |
| **P0-c** | `ft_limit_sentiment.py` 加占位行过滤:`时间==15:00:00 且 seal 为空/0` → 剔除或单列"N只待确认"(跌停侧 528/547、涨停侧 17/70 已污染到翻转档位);同一规则用于涨停侧 | 核价 43/43 真 vs 占位 1/528 真 |
| **P1** | `ft_risk_scan` 解禁代码去后缀;商誉改报告期日期(如 20251231)+全分页,或解禁直接换 `tushare share_float`(本仓已有 token 通路) | `001222` vs `001222.SZ` |
| **P1** | 归档改传真实内容(当前传空串 = 假归档,rc=0 骗过门禁) | `upload_stdin_to_ima.sh` SIZE>50 分支 |
| **P2** | 合并 cron 加交易日守卫:数据日期 ≠ 上一交易日时明确打印 `No new trade date, skip`,别把 9/24 数据当周末新扫描派发 | trade_cal 9/25–27 全休市 |

**一句话**:这两段今天都不该按原样消费 —— 节点段是"0 只被扫描"的假空白,ftshare 段的**操作建议方向是反的**(报标准仓,真实应轻仓试错)。

To stop or manage this job, send me a new message (e.g. "stop reminder 节点转折+ftshare扫描-21:45").