记录一次factor_ic连扫24轮全HALT的运维日(2026-09-02)

连续24次扫描结果一字不差,这已经不是在验证信号,是在验证脚本有没有被我改坏。

9月2日这天是从凌晨一路干到快中午的杂活日:云盘书库清掉18本README类文件,factor_ic OOS tracker从第15轮扫到第24轮全是同一条HALT,HL模拟盘对账确认没有ghost仓位,smart_money漂移检查只有0.16%,顺手还发了一篇知乎热榜文。

一、先把云盘书库里的“README”清出去

改四个文件,删十八本“书”

白天最先处理的是云盘同步链路里的书库污染。之前同步时把云盘根目录下的 LICENSE、README、sitemap 这类文件全当书入库了。这次在 config.py 里新增了 CLUTTER_KEYWORDS,包含 license/copyright/readme/sitemap/usage/notice 等关键词,再加一个 is_clutter_name(name) 判断函数;lib/downloader.py 下载过滤时加 not is_clutter_name(...),lib/ebook_scanner.py 扫描时也跳过,防止重新入库;lib/db.py 补了 delete_book(bid) 用来删记录。

清理结果很直接:

  • 删除 DB 里 18 条杂项记录
  • 删除磁盘未入库的杂项副本 6 个
  • 书库剩 6 本真实书:3 PDF、1 EPUB、2 TXT
  • 两本 TXT 是《沉默的大多数》和《高效能人士的七个习惯》

磁盘整体还算干净,剩 11 个真实文件。《人像摄影手册》有 1~4 号多份副本,是云盘重复下载、未入库,属于正常现象,先保留不动。离线单测 is_clutter_name 用 5 个杂项文件名全判 True,没问题。

二、factor_ic OOS tracker:从第15轮扫到第24轮

命令还是那条,决策还是那个 HALT

凌晨 00:57 开始跑第一轮,执行的是:

C:/ProgramData/anaconda3/python.exe factor_ic_oos_tracker.py once

Bash 必须带 dangerouslyDisableSandbox:true,因为 regime 要联网取主网 K 线。之后差不多每隔一小时跑一轮,10:30 跑完第 23 轮后又追加了一个 continue,10:31 到第 24 轮。

这几轮下来的中文 Summary 数值完全一致:

Gate 指标 实测 阈值 判定
Gate1 样本数 n 31 ≥20 ✅ 通过
Gate2 binomial p(win 14/31) 0.7201 <0.05 ❌ 不显著
Gate3 年化 Sharpe -2.732 ≥1.0(×√504) ⚠️ 负值
Gate4 maxDD 320.9% ≤30% ❌ 远超
regime 回落率(n=27) 37.0% ≥50% 🔴 HALT

关键是 side effects 为零。 从第22轮开始我额外核对了源码 mtime:factor_ic_oos_tracker.py 和 smart_money_trader.py 都没动过,新增写入只有 factor_ic_oos.db、factor_ic_oos_alerts.md、halt_log.md 三个文件。也就是说,这个 tracker 确实只在自己的一亩三分地里写日志,没碰生产策略文件、没重启进程、没触发毕业或阻断。

三、HL 模拟盘对账与 smart_money 漂移检查

ghost 仓位为 0,但代理变量坑了我一次

对账巡检是 dry-run,没有加 --apply。结果如下:

  • Ghost 仓位:0 — hl_smart_money.db 里 2 个 OPEN 在链上都存在,方向反检查也过了
  • Orphan:2 个,只在 hl_testnet.db,BTC(szi=+0.00101, uPnL=−$2.08)、ETH(szi=+0.0337, uPnL=+$1.29),链上有但 DB 无,按设计只告警不修
  • OPEN 数量:hl_smart_money.db=2,比上次 22:17 的 3 少了 1,说明有一仓平了;hl_testnet.db=0
  • 账户等式:这个脚本本身只做 ghost/orphan diff,不打印权益守恒;历史逐笔重建残差≈0,但本次没独立重算

执行时有个坑:我一开始按说明把 HTTPS_PROXY、HTTP_PROXY 等 6 个代理变量清空,结果还是 502。后来发现 requests 会读 Windows 系统代理,额外加上 NO_PROXY="*" 才通。下次定时巡检必须带上这个变量。

smart_money 的链上-DB 漂移检查也顺利:_sm_sanity_check.py 退出码 0,链上余额 903.0530,DB 合计约 904.4529,漂移 0.16%,远低于 5% 阈值,没有 testnet reset 脱钩,不用重置基线。

四、顺手发了一篇知乎热榜文

系统 Python 少了个 greenlet,换成 venv 才发出去

上午还发了一篇知乎文章,选题是热榜 #1 的“外籍个人股息红利取消免税”。标题《外籍个人股息红利取消免税:这不是“赶外资”,而是税制公平的临门一脚》,正文约 1181 字符,封面用即梦 AI 生成的财经主题图,链接 https://zhuanlan.zhihu.com/p/2078377766844620950。

发布脚本一开始用系统 Python 跑 publish-py.py 报缺 greenlet,切到项目 venv 再执行就成功了。这种小环境问题已经不新鲜了,但每次都得耽误两分钟。

五、遗留:HALT 还要挂多久?

factor_ic 现在稳定挂在 on_halt 上,第 15 到 24 轮全部同一组数值,没有漂移。但它只是被挂起,没有进入 apply、没有触发毕业或阻断。下一步该决定的是:要么允许 factor_ic_oos_apply.py --confirm 去走后续流程,要么干脆把这个信号源从调度里摘掉,别让它每小时空跑一轮。

另外两件小事也记一下:云盘同步下次还会不会再扫进来新的 LICENSE 类文件,需要观察黑名单是否覆盖全;HL 对账巡检的定时任务要加上 NO_PROXY="*",否则还会 502。