← 归档索引 · 2026-10-09 23:25 · 信号纵向跟踪+反馈闭环-23:15(原23:30并入·2合1)
# Cron Job: 信号纵向跟踪-每日23:15
**Job ID:** c85cc7fd1251
**Run Time:** 2026-10-09 23:25:37
**Schedule:** 15 23 * * 1-5
**Prompt Characters:** 7752
## Prompt
[IMPORTANT: The user has invoked the "script-output-integrity" skill, indicating they want you to follow its instructions. The full skill content is loaded below.]
---
name: script-output-integrity
description: 消费预跑脚本注入的数据时加载。先判数据真假再分析,识别假成功/降级/空段并标注完整度。
version: 1.0.0
author: Hermes Agent
license: MIT
category: fugui
tags: [data-integrity, silent-failure, consumer-side, cron]
metadata:
hermes:
tags: [data-integrity, silent-failure, consumer-side, cron]
related_skills: [silent-failure-defense, pan-gan-signals]
---
# 消费脚本输出 —— 先判真假,再分析
> 面向**读**注入数据的人(分析 cron),不是**写**脚本的人。
> 建造侧(怎么写不产生假成功)看 `silent-failure-defense`。
## When to Use
```
□ prompt / 上下文里出现「预跑脚本输出」「Script Output」「以下数据由预跑脚本采集」
□ 要用脚本采集的数据做判断、写报告
□ 某段数据看起来"有内容"但可疑(一行字样、空段、括号里的说明)
```
## 铁律:数据段先过完整性,再进入分析
**禁止把「缺失/降级」当作「正常数据」分析。** 缺失要标注,不要脑补。
### 识别清单(按严重度)
| 形态 | 真实含义 | 动作 |
|---|---|---|
| `xxx.sh: timeout` | **该段根本没跑**(不是"超时所以没数据")。典型是 `timeout N cd` 类缺陷 | 该段判为【零数据】,禁用其做主力判断 |
| `failed to run command '...'` | 内建命令被 timeout 包住 → 整段从未执行 | 同上 |
| `Traceback` / `ModuleNotFoundError` | 该段完全不可用 | 同上 |
| `❌<名> 失败(rc=N)` | 该段采集失败(已诚实上报) | 标注缺失,相关结论降级 |
| `(xxx不可用)` / `[超时]` / `数据采集失败` | 降级标记,段落内容为空 | 标注缺失 |
| `[SILENT]` | 无内容(合法语义:无异常/无新增) | 不要当数据,也不要当错误 |
| 空段 / 只有标题 | 采集为空 | 标注缺失 |
| 接口**无报错返回空 DataFrame** | 路由瞬时降级(非"今天无数据") | 重试一次再定性;仍空 → 判缺失 |
> 实测(2026-09-28 12:05):`data_hub.get_realtime_quotes(8 codes)` 一次返回 0 行**且不抛异常**,同一批码 30 秒后重跑全部正常 → 是瞬时静默降级。
> 判据:**空/无异常 ≠ 无数据;先重试,再定性**。消费侧把"空"当"没有"会导致整段结论凭空消失。
### 必须做的三件事
```
1. 报告开头标注完整度:「数据完整度: N/M 段可用」,缺失段逐条列名
2. 缺失段对应的结论 → 标注「基于间接推理 / 置信度降级」,不得伪装成实测
3. 禁止:用缺失段当论据;用"数据暂缺"当结论;脑补缺失段的内容
```
### 反面案例(实测,2026-09-11)
```
## Script Output
【午间扫描 | 2026-09-11 12:00】
midday_scan.sh: timeout ← 整块市场数据就是这一行假的
【心法扫描 | 2026-09-11 12:00】
════ Phase 0: 板块主力方向 ════
```
该报告被连续数周当成正常午间分析发出,AI 拿着这行假消息当市场数据做判断。
**根因:消费侧没有"先判真假"这一步。**
### 一句话判据
**看到数据段,先问「这段是真的吗」,再问「这段说明什么」。**
顺序反了,后面全废。
The user has provided the following instruction alongside the skill invocation: [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. [SILENT] is a literal ASCII control token — never translate or rephrase it, whatever language the rest of your answer uses. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more. FAILURE: If a delegated child fails and this cron run must be recorded as failed, put [CRON_FAILURE] on the first line by itself, then explain the child failure on following lines. RECURSION: This is a run of an EXISTING scheduled job — execute the task now. NEVER create or update a cron job because of recurring or future-schedule language in the task prompt below; treat phrasing like "each Monday" or "every day at 9" as context for this run, not as a request to schedule another job.]
## Output from job 'bc9b3ca8cc33'
The following is the most recent output from a preceding cron job. Use it as context for your analysis.
```
# 富贵独立复盘 · 判断层 2026-10-09
**① 大盘**:定性=**下跌态中的缩量反抽,非反转**。上证+0.05%、深成指12641收平,但5日-7.4%、空方循环=是、闸门关闭(12621<昨12892)。涨跌比59.3%(↑3294)与指数背离=中小盘超跌修复、权重躺平;量能0.90x缩量,反弹无量确认。较昨日:破位收敛,未止跌。
**② 主线**:资金从AI硬件撤向**软件/网安(+6.28%,300369+12.6%)**和黄金有色(+3.08%)。注意背离:心法榜光纤光缆98/光模块96,但收盘价-4.2%/-5.5%——心法与价格背离+三漏斗缺数据,按轮动对待,不认主线。新萌芽候选=软件/网安。
**③ 持仓与信号**:空方循环风控✅验证生效;"不接AI飞刀"执行中。光通信内部现承接分化:长飞留存+3.82%🟢 vs 中际旭创+1.81%🟡。资金流数据缺失🔴,主力方向判断降级。
**④ 明日观察**:
1. AI止跌否——中际旭创不破今日-13.46%且缩量→承接确认;续跌→调整未完
2. 软件/网安持续性——300369平开不回吐>+6%→候选转正;高开低走→补跌全面转弱
3. 闸门重开条件——深成指放量站上12892;跌破12621→今日定性作废
```
## Output from job 'e710af0bbd73'
The following is the most recent output from a preceding cron job. Use it as context for your analysis.
```
## ✅ 第二轮 ad-hoc 验证 · 临时脚本已建/已跑/已清
**没有 canonical test/lint/build 命令**(仓库无测试套件),所以按要求新建 `tempfile` 临时脚本做行为级验证,跑完已 `rm`。scratch 只剩别的会话 15:16 的 `hermes-verify-t02-ledger-*.py`(非本次,未动)。
### 跑了三轮(都是 `VERIFY_RC=0` 才算数)
| 轮 | 脚本 | 结果 | 覆盖 |
|---|---|---|---|
| A | `hermes-verify-19w9uws4.py` | **22/22** | 7文件全量:门禁口径(含 `empty/error→rc=1` 反向断言)、链CLI rc=0无Traceback、基准两场景、MX零价+对照、量比/量陷阱 |
| B | `hermes-verify-yi1n_ux1.py` | **9/9** | 只盯 `market_super_scan.py`(见下:它被外部改写过)+ 端到端 CLI 对齐 tushare 真值 |
| C | `hermes-verify-r_7__7uc.py` | **11/11** | 修完外审①后的回归:`3e 单行仅今日行 → 10.04`(修前落 open 兜底 11.01)、`3f 空表不崩`、E1–E5 端到端 |
另:8个改动文件 `py_compile` 全 OK;第1轮唯一 FAIL 是**我断言写错**(漏了 `or SCRIPTS in __file__`),改断言后重跑 22/22,不是代码问题。
### 过程中发现两件必须报的事
1. **`market_super_scan.py` 在 21:55:21 被外部进程改写**(不是我):基准逻辑从"取 `<今日` 最大日期收盘"升级为"**今日 `pre_close` 优先**"。我按新代码补测(9/9 过)后才入库;并按审查意见修了它的①——`len(df) < 2` 会把"只有今日行"的合法 `pre_close` 基准扔掉(3e 实测 11.01 → 修后 10.04),同时在注释里写明分支②在**除权日**与官方 pct_chg 分母有出入的已知限度。
2. **同仓有并发写者**:我拆误吞提交时做的 `git reset --soft HEAD~1` 之后,别人用**与内容不符的 commit message**("盘前四维裁决池空17天")把只含 `market_super_scan.py` 的提交落成 `0f3705d`,我原 `96098f4` 被挤出分支;对方的 `doctrine_scan_pool.py` 仍保持未提交(我没替他提交)。**结果**:我的7个文件全部处于已提交状态、内容=已验证版本;**风险**:那条 commit message 声明了它没提交的文件(声明≠事实),留给该进程 owner 处理,我没再改写历史。
**commit**:`f958666` · `675c3bd` · `0f3705d`(含 market_super_scan 最终版)
**诚实边界**:以上是**针对改动行为的 ad-hoc 验证,不是套件绿灯**;整条 `evening_2130_scan.sh` 仍未端到端重跑(避免今晚报告重复上传 IMA),四段均按生产同口径(同 venv、同命令行)各自验证。真实生效点=周一 10/12 的 15:05 与 21:30。
```
## Script Output
The following data was collected by a pre-run script. Use it as context for your analysis.
```
=== 信号纵向跟踪 ===
验证/回填: 95条
更新164条
信号总数: 108 | 已完整验证(T+20齐): 13 | 跟踪中(未到T+20): 95
类型 数量 T+5命中 T+5均值
----------------------------------------
breakout 9 1/9=11% -5.2%
launch 38 8/10=80% +5.7%
pre_launch 61 21/35=60% +5.1%
最近信号:
2026-10-08 恒烁股份(688416.SH) T5=- -
2026-10-08 德明利(001309.SZ) T5=- -
2026-10-08 东芯股份(688110.SH) T5=- -
2026-10-08 北京君正(300223.SZ) T5=- -
2026-10-08 普冉股份(688766.SH) T5=- -
2026-10-08 兆易创新(603986.SH) T5=- -
2026-10-08 赢时胜(300377.SZ) T5=- -
2026-10-08 新易盛(300502.SZ) T5=- -
信号纵向跟踪报告
============================================================
总计: 196只 | 命中(T+5>2%): 42只 命中率21% | 平均T+5=-1.8%
来源 数量 命中率 平均T+5 平均T+20
--------------------------------------------------
dragon_preselect 98 24% -0.9% —(无T+20)
low_launch 75 15% -3.7% —(无T+20)
pre_launch 19 32% +1.1% +7.3%
launch 3 33% -0.7% +0.3%
breakout 1 0% -4.0% -11.7%
板块 数量 命中率 平均T+5
----------------------------------------
半导体 41 39% -0.3%
未知 23 30% +0.6%
生物制药 16 12% -4.9%
汽车配件 13 8% -2.8%
火力发电 12 8% -4.8%
元器件 10 20% -4.7%
电器仪表 10 30% +1.0%
塑料 9 33% +0.1%
玻璃 7 29% +2.2%
IT设备 7 14% -3.3%
=== 参数反馈 ===
{
"pre_launch": {
"hit_rate": 31.6,
"count": 19,
"avg_t5": 1.09
},
"launch": {
"hit_rate": 33.3,
"count": 3,
"avg_t5": -0.7
},
"breakout": {
"hit_rate": 0.0,
"count": 1,
"avg_t5": -4.04
},
"dragon_preselect": {
"hit_rate": 24.5,
"count": 98,
"avg_t5": -0.9
},
"low_launch": {
"hit_rate": 14.7,
"count": 75,
"avg_t5": -3.74
}
}
```
信号纵向跟踪:1) signal_feedback.db 渐进验证(缺T+20的行持续回填,未到T+20不提前落标);2) 更新 signal_track.json 所有信号的 T+1/T+3/T+5/T+10/T+20 快照;3) 输出 signal_feedback.db 类型命中率报告(阈值统一2%);4) 有已完成信号时输出各来源/板块命中率与参数反馈(low_launch/dragon_preselect 来源,数据齐了自然出现,无数据不硬凑)。
**Response Characters:** 3117
## Response
**数据完整度: 5/5 段可用**(无 timeout/降级/空段/Traceback;stderr 0 字节;数据时间戳 signal_track.json=10-09 23:16:29、signal_feedback.db=23:15:57,均为今晚任务实时产物)
# 信号纵向跟踪 · 2026-10-09(含独立复算)
## ① 先判真假 — 我逐位重算了,不是转述
| 段 | 脚本输出 | 我的独立复算 | 结果 |
|---|---|---|---|
| DB 类型命中率 | breakout 1/9=11% -5.2% · launch 8/10=80% +5.7% · pre_launch 21/35=60% +5.1% | 1/9=11.1%/-5.17% · 8/10=80%/+5.74% · 21/35=60%/+5.10% | ✅ 全对 |
| DB 计数 | 108总 / 13已验证 / 95跟踪 | 108=61+38+9;price_t20非空13;108-13=95 | ✅ 全对 |
| track 总体 | 196只 · 21% · -1.8% | done=196 · 42/196=21.4% · -1.81% | ✅ |
| 来源表(5行) | 98/24%、75/15%、19/32%、3/33%、1/0% | 24.5%、14.7%、31.6%、33.3%、0%(n逐一对上) | ✅ 逐位吻合 |
| 板块 TOP10 | 半导体41/39%、生物制药16/12%… | 全部逐位吻合 | ✅ |
| hit字段口径 | 阈值统一2% | 重算 mismatch = **0/196** | ✅ |
**未独立验证的 1 项**:「更新164条」无落盘明细可比对(「验证/回填95条」=108-13,可对上)→ 标注为待验,不当论据。
## ② 报告里最大的误读风险:这是两套账,不能相加也不能互证
- `signal_log` = **108 条**(launch/pre_launch/breakout,最新信号 **10-08**)
- `signal_track.json` = **420 条 / 196 done**(low_launch/dragon_preselect,最新 **10-09**)
- **同名信号两账口径冲突**:pre_launch 在 DB = 60%(n=35, +5.10%),在 track = 31.6%(n=19, +1.09%),**差 28pp** → 禁止跨账引用,先对齐池/窗口/阈值。
## ③ 数据层新发现(本轮新查,不在原输出里)
1. 🔴 **72 条信号落在非交易日**:09-27(周日)9条、10-04(周日)24、10-05 19、10-06 20。日历证据:上证日线 **09-30 → 10-08 中间无 bar**(10-01~10-07 闭市),09-25 也缺 bar。
2. 🔴 **基线后移**:10-04/05/06 三批共 63 条的 `entry_price` 与 10-08 批**完全相同**(603986=334.40=10-08收盘,而 09-30 收盘是 353.90;688416=66.97;10 个共有代码快照 **10/10 一致**)→ 拿"信号日之后"的收盘价当入场价。603986 例:按 09-30 基线到 10-09 实为 **-7.75%**,记录的 t1 只有 -2.37%。
- **影响边界(重要)**:这 63 条全部 pending,**今晚 196 done 的统计未被污染**(done 日期区间 08-21~09-23,0 条落在非交易日)。风险在 10-14~10-16 到期入池后。
- 根因线索:`[TRADING-DAY-GATE]` 只插在 signal_track_update.sh / signal_feedback_daily.sh 两个 wrapper(10-06 插入),**record 路径(low_launch_scanner → signal_track.record_signal,"内部自动补 entry_price")没有门**。
3. ⚠️ **重复入账**:196 条 done 只对应 **122 只票**(74 条=38% 是同票重复;300223 出现 7 次、300308 5 次);pending 224 条对应 117 只(107 条重复)→ 样本非独立,**有效 N≈122 而非 196**,置信区间比表面宽。
4. ⚠️ 09-27 批 9 条的 **T+5 今日应到期未回填**(交易日 09-28/29/30/10-08/10-09),其余 pending 的 T+5 确实未到期 → 明晚看是否补齐。
5. ⚠️ 300223 在 json 里同时叫「北京君正」(6)、「君正股份」(6)、空名(1) → 按名称/板块 join 会漏;DB 侧叫北京君正。sector「未知」23/196=12%。
6. ℹ️ 时序(非故障):本任务 23:15 跑,入库脚本 signal_feedback_daily.sh **23:30** 才写当日信号 → 「最近信号 2026-10-08」是顺序性滞后,不是入库失败。
## ④ 可用结论(带 95% Wilson CI)
- **整体 21.4%(CI 16.3~27.7%),均值 -1.8%** → 当前选池在 T+5>2% 阈值下跑输,**不具可交易性**;与今日复盘「下跌态/闸门关闭/不接飞刀」一致。
- **low_launch 14.7%(CI 8.4~24.4)+ dragon_preselect 24.5%(CI 17.0~33.9)= 173/196=88% 样本,CI 上界仍远低于 50%** → 这两个来源该降权/停用,而不是继续堆样本。
- **breakout 11.1%(CI 2.0~43.5)n=9** → 定性=样本不足+方向为负,先停用。
- **pre_launch 60%(CI 43.6~74.4)n=35** 是 DB 账里唯一接近可用的,但与 track 账 31.6% 冲突 → **对齐口径前不采信**。
- 板块:生物制药 12%、火力发电 8%、汽车配件 8% → 直接过滤;半导体 39%(CI 25.7~54.3)相对最好但跨 50% 线。
**操作约束**:本轮只出跟踪报告,不改代码、不动信号配置;闸门重开前不因这些命中率新增仓位。
## ⑤ 证伪(判断错了会怎样)
- 10-14 前 09-27 批 T+5 仍不补 → 我"回填滞后"判断错(更可能是 offset 定义不同)
- 63 条假日信号入池后命中率与干净样本无显著差异 → 基线污染不成立,我高估了
- 23:30 后 signal_log 仍无 10-09 行 → 是入库链路故障,不是时序
- 两账 pre_launch 口径对齐后 CI 仍重叠 → 冲突来自样本窗而非方法本身
## ⑥ 建议动作(待老板点头再动)
① 给 record 路径补 `is_trading_day` 门,并把 10-04/05/06 的 63 条打标或按 10-08 重记 ② 对齐两账 pre_launch 口径 ③ 命中率按 code 去重后重算(聚类稳健)。