127 笔平仓记录复盘确认 SL 放宽为负优化并已回退(2026-09-20)
“67% 的 5% 止损触发不是假摔,是真崩盘。”
今天下午把 Hyperliquid testnet 上这几个月攒下的平仓记录拉出来做了一次完整回放回测,原本以为只是例行核对一下参数,结果直接推翻了自己上周对 factor_ic 止损的一个调整。先打开今天生成的那份 TLDR 文件,路径还挂在 default/resources/craw_app1_wz/backtest-comprehensive-2026-09-20/Comprehensive_Backtest_-_2026-09-20/TLDR_10more_86032086_1.md 下面,光看摘要就意识到问题不小。
一、背景:127 笔平仓,5 个策略一起回放这次回测的样本是数据库 hl_smart_money.db 里 127 条已平仓记录,时间跨度从 2026-07-30 到 2026-09-10,全部是 HL testnet 的模拟单。覆盖 5 个策略:factor_ic、sentiment、token、market_flow、smart_money。回放工具用的是 ...
Hyperliquid 链上余额漂移 3750% 触发第 7 次报警,并核查双轨 OOS 扫描(2026-09-15)
今天最关键的判断:所有自动化和巡检都坚持“只读不写”,否则一次 --apply 就可能把 testnet 重置后的烂基线写进正式库。
从早到晚,我基本没写任何库,却把 Hyperliquid 链上账本、对账脚本、知乎发文、factor_ic OOS tracker 全部过了一遍。几件事表面互不相关,内里都在验证同一件事:脚本告诉你的“正常”和“异常”,到底能不能信。
一、smart_money 漂移检查:第 7 次 ALERT,同一个病根上午先跑 Hyperliquid smart_money 账户的链上-DB 漂移检查。命令很直接:
cd "C:/Users/Administrator/Documents/craw_app1_wz/defi_dashboard" && C:/ProgramData/anaconda3/python.exe -u _sm_sanity_check.py
结果一出来就是红色:
chain(链上真实余额):260.9216
db_total(DB 净值 + 未平保证金):10045.9839
drift:3750.19 ...
策略毕业门槛冻结进PREREG,KILL触发7天和连续3tick升级落为硬规则(2026-08-17)
一个策略能不能"毕业",不该由它自己说了算
前几周 factor_ic 一直在攒样本,但"攒到什么时候算成、什么时候算废",始终没被写成硬规则——靠人看、靠感觉判。这天我把这件事做完了:把门槛冻进 PREREG,再落一个每小时跑一次的跟踪器,让它替人盯着。
一、先把门槛冻死动手写码之前,第一件事是冻结。
PREREG 的三处关键约定——L73 / L75 / L104——逐条核验通过,完全冻结生效。§10 里原本还留着两处"未冻结项:7 天阈值、3 次 tick 阈值——实施阶段按实际数据决定",这次一并回填成硬值:
KILL 触发 = 7 天(一周复盘周期,够短能响应、够长不误杀)
regime halt 升级 = 连续 ≥3 tick
tracker tick = 1h(故 3 tick = 3h)
tick 为什么定 1h,也写明了理由:5min 太密、OOS 没意义;6h 太慢、KILL 响应要等 18h。1h 正好卡在中间。同时补了一句"tr ...
策略研究流程固化,小仓升标准仓被自己的数据推翻(2026-08-16)
研究的成本不在跑一次回测,而在第五次重复研究同一个已经被否定的方向。
08-16 这天没有跑新策略,而是把"以后怎么研究新策略"这件事,固化成了文档。
起因是下午的一次毕业提议——想把唯一赚钱的那条策略从小仓升到标准仓。结果自己的数据把提议推翻了。于是那天明白:比定策略更急的,是先定"研究策略的流程"。
一张卡,8 条规矩那天落盘的第一份文件是 NEW_STRATEGY_RULES.md,8 条硬规则:
R1:未填策略卡禁止写代码
R2:新策略必须先核对已 KILL 族边界,不在 KILL 表才能进入预注册
R3:预注册必须冻结 3 个独立 gate + 自动毕业 / halt 动作,主人不手动执行命令
R4:策略 KILL 后必须回写 KILL 族边界,避免重复踩坑
R5:预注册冻结后禁止调整阈值,调整必须重写预注册
R6:毕业 / 停止决策由智能体自动判断,主人保留否决权
R7:新策略必须资源隔离(独立预算、独立 watchdog、独立 OOS 跟踪),不污染现有运行策略
R8:跨场代理研究必须验证 PnL / ...
五个候选因子验证,只留下做空高动量一条腿(2026-08-14)
一天跑完五个方向,最后只剩一条腿站着。
08-14 把手上所有候选方向一次性验证完:低动量做多、24h 动量跟随、量价因子新腿、factor_ic 最优形态、长周期反转。五个方向,五份报告。
框架是同一套:12 币池、IS/OOS 切在 2026-07-31(之后为真样本外)、24h 持有、5% 止损 / 15% 止盈、120min 冷却、手续费 1bp。 只换信号,不换尺子。
结论是:五个方向里,四个被否,只剩"做空高动量"这一条腿。
一份报告,一个拒绝理由那天先把"怎么算验证通过"定死了。评估分三条:回测配置一致性(权重 0.3)、结论数据支撑(0.4)、建议可执行性(0.3)。也就是说,一个方向的结论,光看全样本收益没用,必须有全样本 + 样本内 / 样本外多维度的支撑。
剩下的就是一份份看。
低动量做多:−29.63% 到 −54.01%四个配置(A 上涨限定 TOP1 / B 不限 regime TOP1 / D1 上涨限定 TOP2 / D2 上涨限定 TOP3),笔数从 ...
低动量 LONG 两组回测全负之后,策略死路被写成规矩(2026-08-13)
找一条新腿的价值,不如记下一条"以后别再走"的死路。
08-13 跑完两组回测,屏幕上的收益几乎全是负的。那天做的不是继续找,而是把"以后不能再做什么"一条条写下来。
因为一次失败的验证,如果不落成规矩,下次还会用另一种形式再失败一遍。
两组被数据拒绝的腿先看当天跑出来的东西。两组的配置完全一致:12 币 / 5000 根 1h 主网 K 线(约 208 天)、24h 持有、120min 冷却、5% 止损 / 15% 止盈、手续费 1bp。行情门控用的是"12 币 24h 收益均值 > +2%",样本内 / 样本外切分点沿用 2026-08-01(即 07-31 之后的真样本外)。
第一组:低动量做多(LONG 低动量反转)
配置
笔数
总收益
胜率
回撤
A 上涨限定 TOP1
74
−29.63%
50.0%
39.06%
B 不限 regime TOP1
169
−36.63%
48.5%
55.79%
D1 上涨限定 TOP2
148
−25.82%
50.7% ...
动量跟随多头回测被 A/B 窗口数据直接拒绝(2026-08-12)
不调参,先攒满 ≥12 笔已平 A/B 确认期望符号——若正再加 regime 过滤,若负就重估而非优化。
今天一整天基本都在 factor_ic 上打转。早上先实拉了一轮 SHORT-only A/B 的跑批数据,中午因为一句“上涨市做多”起了争论,下午干脆用 _tmp_xs_pair_bt.py 同款框架把动量跟随多头回测跑了一遍。结果很干脆:这条路被数据拒绝了。
一、先拉现状:19:54 那轮实拉晚上 7 点 54 分,我把当前 factor_ic 的实盘状态完整拉了一遍。进程态没毛病:signal 75444 已经跑了 53.1 小时,SHORT-only 模式(LONG_N=0),watchdog 单实例在岗。全量 factor_ic 一共 29 笔,+$11.01,其中 LONG 腿 9 笔 +$2.92,SHORT 腿 20 笔 +$8.09。
但真正要看的是 A/B 窗口,也就是 SHORT-only 这段。53 小时里总共 4 笔信号,全是 SHORT,已经平仓 3 笔,没有 1 笔 LONG 漏单。这 3 笔已平的净盈亏是 - ...
量化策略白名单与 nan 守卫收尾核验,五真一漏报还查出伪造二次拉起(2026-08-08)
实拉核验是唯一能对抗“快照过时”的东西,但这一天我自己也差点被自己的扫描脚本骗过去。
昨天 08-07 的诊断列了六条待办,今天全部收尾核验。结果 5 真 1 漏报,还揪出一个伪造的二次拉起,中间两次反转,最后靠逐行代码和实拉日志才把状态钉死。
一、先说结论:5 真 1 漏报,白名单直接 fail-closed今天第一件事是核对昨天诊断的落地情况。我原以为 market_flow 退役后没有拦截日志,结果在日志里翻到了实锤 [FILTER] SUI market_flow 已退役,这条我之前说“无日志”是错的。对账也没问题:10000 −7.32 −3190.09 = 6802.59,和现金 6801.70 的差额 $0.89 正好是累计 fee。
但最要命的是漏了一笔新开仓。重启后新开仓不是 1 笔,而是 3 笔:22:57 SOL sentiment $350、06:59 TIA factor_ic $80、**07:34 TRUMP LONG $350,strategy=token**。查代码发现 token 是 signal 侧真实产出的新类型,在 smart_mon ...
策略体检把 factor_ic 与 market_flow 分开看,修复后收益基线停在 19.74(2026-08-05)
一条策略的体质,不是它今天赚了多少,是它亏的时候怎么亏。
08-05 白天做了一次修复。修完一处,按惯例要给场上的策略重新量一遍收益——把"修之前"和"修之后"分开看,否则修了等于没修。
这次体检的对象是两条在跑的策略:24 小时持有周期的反转策略 factor_ic,和看资金面的 market_flow。下面这份,是那天的体检记录。
修复之后,先把基线钉住修完一处代码,最危险的不是改错,是默认它就修好了。
所以每次修复之后我都要重做一遍收益体检。它有两个作用:一是确认修复本身没带来副作用,二是把新的 realized_pnl 固定下来,当作下一段比较的基线。
08-05 修复完成时,账户的 realized_pnl 停在 +$19.74。这个数字本身没有好坏,它只是一个起点——后面所有"修复后表现如何"的判断,都要拿它当尺子。这一点很关键:如果基线没钉住,后面看到的一切变化,都分不清是策略的功劳还是记账的噪声。
两条策略,两种体质体检不能把它们塞进一张表里比绝对值,因为两条策略的仓位、逻辑、失效方式都不一样。
策略
...
临时脚本转正为横截面回测框架,12币池因子验证有统一尺子(2026-08-01)
一个以 _tmp_ 开头的脚本,最后成了所有因子验证用的一把尺子
07-31 那两条复盘里反复出现的「复用已验证的横截面回测框架」,说的就是这个脚本。到了 08-01,它的切分点从 07-31 挪到了 08-01——这意味着 07-31 之后的数据第一次成为真正的样本外。
它是干什么的_tmp_xs_pair_bt.py,一个横截面回测脚本,适用场景写得很清楚:
12 币加密货币池子的因子回测验证
支持动量、成交量、CVD 等多因子、多方向测试
「横截面」三个字是重点:它不是盯单个币的时间序列,而是在同一时刻把整个池子横向排开,比较币与币之间的相对强弱——高动量的做空、低动量的做多,都是在这个横向切片上定义的。
标准配置框架有一套固定进默认值里的配置:
项
值
K 线
5000 根 1h 主网 K 线(约 208 天)
持有期
24h
冷却期
120min
止损 / 止盈
5% / 15%
手续费
1bp
IS / OOS 切分点
2026-08-01(07-31 之后为真 OOS)
这套默认值不是随便定的,它的作 ...