记录一次 Hyperliquid 链上-DB 漂移告警与 A2 扫描(2026-10-07)
记录一次 Hyperliquid 链上-DB 漂移告警与 A2 扫描(2026-10-07)
链上余额 7.2042,库里躺着 13203.71,漂移 183178.86%,这不是阈值超了,是基线已经飞出去两个数量级。
今天原本只想做几个只读检查,结果第一条命令就直接把红色告警拍在脸上。后面又跑了一次 A2 OOS tracker,还顺手确认了一篇知乎文章的发布回执。
一、20:05,_sm_sanity_check.py 直接甩出 ALERT
当时我在 C:/Users/Administrator/Documents/craw_app1_wz/defi_dashboard 里跑一条 sanity check,命令是 C:/ProgramData/anaconda3/python.exe -u _sm_sanity_check.py,Bash 调用必须带 dangerouslyDisableSandbox:true,因为脚本要访问 HL testnet 外网。
脚本 stdout 打印了 ALERT,退出码 1。关键数字如下:
| 指标 | 数值 |
|---|---|
| 链上余额 chain | 7.2042 |
| DB 总值 (cur+open_margin=80.14) | 13203.7100 |
| 漂移 drift | 183178.86%(阈值 5.0%) |
| 退出码 | 1 |
| DB 更新时间 | 2026-10-03T05:20:39(约 4 天前) |
判定很明确:疑似 testnet reset 再次脱钩。 链上真实余额只有 7.20,DB 名义基线却是 13203,差了约 1833 倍,而且 DB 已经 4 天没刷新,三重信号都指向 sm_account 基线严重失联。
这条检查没有改任何文件或数据库,只是报告。建议是执行 wb_runs/archive/_reset_sm_account.py --apply 重置基线,但需要确认后才动。
二、对账巡检的指令还没出结果,记录被一条知乎回执截胡
紧接着我接到一个对账巡检任务:在同一个目录跑 hl_reconcile.py,默认 dry-run,绝不要加 --apply。启动前还要清空系统代理变量 HTTPS_PROXY="" HTTP_PROXY="" http_proxy="" https_proxy="" ALL_PROXY="" all_proxy="",避免 502。
但这条指令后面的 stdout 我在日志里没翻到,只看到了一条内容发布的成功回执。我猜是当时的回复顺序被别的任务插队了。
那条回执是:
- 标题:演员王星4天被转卖3次:妙瓦底最缺的不是钱,是"活人"的定价权
- 链接:https://zhuanlan.zhihu.com/p/2091259696195823483
- 发布时间:2026-10-07 20:13,湖南
- 正文长度:1772 字符 / 1805 字 Draft.js / 77 段
- 封面:cover-20261007.jpg(即梦AI缓存命中)
因为对账巡检没有留下有效输出,所以我今天无法确认有没有 ghost 或 orphan 仓位,这条只能挂起。
三、20:19,A2 OOS tracker 单次扫描:15 个样本,NO_ACTION
晚一点跑了 factor_ic_oos_tracker_a2.py once,同样是在那个目录,用 anaconda python。这个脚本只读 hl_smart_money.db 的 side='LONG' CLOSED 腿,和 factor_monitor 主网 K 线,写到 factor_ic_oos.db 的 oos_ticks 表 arm='LONG',与 A1 tracker 并行不串扰。
stdout:
1 | [20:19:03] A2 Gate1-4 计算完成 (arm=LONG): n=15 p=0.6072 sharpe=-9.650 maxdd=650.8% |
各 Gate 判定:
| Gate | 实测 | 阈值 | 判定 |
|---|---|---|---|
| Gate1 样本数 | 15 | ≥30 | ❌ |
| Gate2 binomial p | 0.6072 | <0.05 | ❌ |
| Gate3 年化 Sharpe | -9.650 | ≥1.0 | ❌ |
| Gate4 maxDD | 写库 6.5078(stdout 打印 650.8% 是 ×100 的格式化 bug) | ≤30% | ✅ |
| regime 上升率 | 63.2%(n=19) | ≥50% | ✅ OK |
决策路径:regime=OK → Gate1 不达标(15<30)→ NO_ACTION。所以没有写 pending_log,也没有触发 HALT。
这里特别要记一下:Gate4 的 stdout 打印 650.8%,但写库值是 6.5078,脚本里有个 ×100 的格式化 bug,真实 maxDD 只有 6.51%,所以 Gate4 其实是过的。要是只看 stdout 很容易误判成爆表。
四、今天最疼的一课:链上 7.2 和库里 13203 是两个平行宇宙
回看第一条 ALERT,drift 183178.86% 意味着 DB 基线比链上高出了 1831 倍多。正常情况下 drift 超过 5% 就该报警,这次直接是阈值的 3 万多倍。原因不复杂:testnet 重置后链上归零过一次,但 sm_account 的 DB 基线还停留在 10 月 3 日那笔 13203 的总值,4 天没有刷新,所以等式完全撕裂。
好在今天的 sanity check 是只读的,没有因为“结论明显”就顺手去写库。只读检查的价值就在这:你可以在不动任何状态的前提下,用退出码和 stdout 把问题钉死,然后停下来等人拍板。
五、遗留
_reset_sm_account.py --apply还没执行,需要确认后重置 sm_account 基线,然后重跑 sanity check。- 对账巡检
hl_reconcile.py没有留下结果,需要重新跑一次 dry-run,确认 ghost / orphan / 账户等式。 - A2 的样本数从 19 → 17 → 15 在往下掉,下轮如果还是 15 以下,Gate1 会继续卡,需要观察是不是 LONG 腿最近没怎么平仓。