记录一次factor_ic连扫24轮全HALT的运维日(2026-09-02)
记录一次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。