记录一次核对 7 项优化与回测器的日子(2026-07-23)
记录一次核对 7 项优化与回测器的日子(2026-07-23)
签名对了不代表逻辑在执行——特别是当配置名和判断名只差一个字母,grep 也会骗你。
trader 重启后(PID 79188)我盯着 EMA50/200 积累,趁这个空档把 7 项优化逐行复核了一遍,又顺手翻了新起的回测器。过程里我先误判了一个开关失效,收回报错后才敢确认 7 项全部真激活;回测器那边倒是能跑,但结论比想象中更拧巴。
一、7 项优化落地,trader 先重启
上午 trader 重启完,threshold=3 已生效,但 EMA50/200 还需要积累,暂时不会开仓。趁着这个空档,我把 7 项改动都过了一遍:
- SHORT 移动止盈新增
lowest_price跟踪,空单盈利回吐不再无保护; COMBO_THRESHOLD从 1 改成 3,单弱信号不再开仓;- 趋势过滤要求 price > EMA50 且 EMA50 > EMA200 才做多;
- ATR 波动过滤,ATR% > 5% 直接跳过;
- 同侧上限 2 个,不再 3x 加密 beta;
- 动态仓位,score=3 给 60%,score=5 给 100%;
- 单日回撤 >5% 熔断暂停开仓。
每一项都对应到具体代码位置,签名看着都在,但“签名在”和“真执行”之间还有距离,所以我让助手逐行读,不只看 grep 结果。
二、一次误判:TREND_FILTER_ENABLED 差点被 grep 漏掉
助手第一轮核对时,读 1207 行发现 RISK.get("TREND_FILTER_ENABLED"),可配置段里一眼只看到 52/69/77/78/80 行有 MAX_SAME_SIDE、COMBO_THRESHOLD、ATR_FILTER_ENABLED 这些,没看到 TREND_FILTER_ENABLED,于是吓了一跳:.get() 返回 None,趋势过滤的代码虽然写了却永远不执行,那第 3 项岂不是白改?
我正准备标记成隐患,结果再核实一遍,TREND_FILTER_ENABLED 其实在 73 行定义着,只是上一句 grep 漏看了。这个误判必须收回。趋势过滤是激活的,代码位置是 _check_trend_filter 997-1026,调用在 1207,一切正常。
我把它记下来,不只是因为误判本身,而是提醒自己:配置段和判断段差一个字母,靠 grep 看签名最容易翻车。 这一轮的结论不是“都对”,是“都得逐行读”。
三、熔断的“daily”其实是自重启锚定
第 7 项熔断我本来以为就是单日回撤控制,但核对 961 行时发现,UPDATE ... SET current_usdc=?, initial_usdc=? 这行会在每次 run_loop 启动时把 initial_usdc 重新锚定成当时的余额。所以它用的 (current_usdc - initial_usdc)/initial 算的是“自上次重启以来”的回撤,不是真的按天重置。
功能上这不是错,甚至比每日重置更贴合实盘重启逻辑,但命名里带着 “DAILY” 就有点误导。我在表里注了一句:“#7 是会话级回撤熔断,非真·每日重置。”
四、SHORT 移动止盈的对称性
第 1 项是当天最核心的 bug 修复。修之前空单移动止盈没有保护,修之后需要确认 SHORT 是不是真用 lowest_price 来算 peak。助手最后读 682-687 行,确认 SHORT 用 (entry-lowest)/entry 算峰值,用 (current_price-lowest)/lowest 算低点反弹,触发条件与 LONG 对称。新增的 lowest_price 列在 117 行,跟踪逻辑在 1133-1141 行。
这一项没有问题。
五、新回测器:主干能跑,但有 2 个 bug 和一个保真度缺口
下午我被要求分析 C:\Users\Administrator\Documents\craw_app1_wz 的项目架构,并生成修复 README.md。我先没动代码,只读核对了新建的回测器 strategy_engine/backtest_hl.py(648 行)。
做对的部分不少:数据获取走 Hyperliquid testnet,失败回退 Binance;信号复用 live 的 _score_symbol 和 _price_history,没有抄一份;模拟时间用 _check_close 独立实现,通过 K 线 ts 算 held_hours,避开了 datetime 不能 monkeypatch 的坑;SHORT 移动止盈也已对齐 live 修复后的逻辑;参数扫描每组 restore_risk() 恢复 RISK,没有参数泄漏;反转阈值也改成了 threshold+2。
但结论不全是好消息:回测器有 2 个真实 bug,还有一个比 bug 更重要的保真度缺口,直接影响你据此做的参数决策。 具体是哪些,我还没展开成清单,得接着读。
六、遗留
- #7 熔断命名要不要改成
SESSION_DRAWDOWN_LIMIT之类,还没定。 - 回测器那 2 个 bug 的详情、保真度缺口的具体表现,需要单独产出。
- README.md 的生成和修复还没开始,只做完只读核对。
- 等 EMA50/200 积累完,观察 trader 按新参数开仓后的实际行为。