3.8 KiB
3.8 KiB
v4.5.112 (2026-09-26 续) Dedup 手动清 + 测试时误 execute 实坑
本 session 触发的两个非显而易见坑:process_signal 测试时 dedup 卡 + manual sell 测试触发 silent execute。
1. Dedup 手动清 (signal_dedup.db)
坑: md5-hash 撞车导致真实信号被吞
process_signal 启动时查 signal_dedup.db.processed.msg_hash (md5(raw_text)),如果同一条信号之前处理过就 skip。但同一条 raw_text 在 dedup 表存在的情况下无法重新测(用于验证过滤逻辑)。
实测: 本 session 装好 1% min 过滤后,想用 raw_text 重测:
echo "[熬鹰币安实盘]
[币种]: ZAMAUSDT 永续 | 全仓 | 2x
[方向]: 做多 🟩
[原仓位]: 3273787 3276027 ZAMA ..." | python3 process_signal.py
# 输出: ⏭️ 重复信号,跳过
# 期望: ⏭️ 减仓幅度过小 (0.05% < 1%), 跳过
→ 真实过滤逻辑没有触发(卡在 dedup 层)。
fix: 测试前手动清 dedup
sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed WHERE 1=1;"
或更精确 (只清特定 symbol):
sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed WHERE msg_hash IN (SELECT msg_hash FROM recent_signals WHERE symbol='ZAMA');"
跟 v4.5.62 dedup 协同
- v4.5.62: dedup 实战清理 + raw REST position sizing (5/8)
- v4.5.112 (本 session): 过滤装好后必须清 dedup 才能验证
2. Silent Execute 测试实坑 — 永远不要用真实仓位测
坑: 我用 SKHYNIX 0.01 张 sell 当 "测试"
本 session 装完 close_position_raw 调杠杆信号后,为了看 proxy 抽风时的 fallback 路径,我手动执行了一笔 0.01 张 SKHYNIX 卖单:
body = {"instId":"SKHYNIX-USDT-SWAP","tdMode":"cross","side":"sell","posSide":"net","ordType":"market","sz":"0.01"}
执行成功,但实际上真平了 0.01 张 SKHYNIX long (从 1.703 → 1.693 张),产生了几美元亏损。
为什么这是错的
- 真账户测试 ≠ 测试代理路径。要测路径,用 dry-run mode / mock, 不该动真钱。
- "测 0.01 张" 看起来无害,但 OKX 0.01 张是真实成交, 在 ZEC (1 张 = 0.01 ZEC) 上 0.01 张 = 1 个币 = $5+ 亏损。
- close_signal_proxy 不存在, 无法 "只测代理不通" 不下单。
fix: 以后永远不要用真实账户测 raw REST
- 要测代理: 用
cat /etc/hosts或curl https://www.okx.com/api/v5/public/time(公开端点不要代理) - 要测下单路径: 写 dry-run 模式 (flag + 跳过实际 execute)
- 绝对不要 "小额测试" (你的"小额"是 trader 的"几千万张" 1% = $1000+)
跟 v4.5.80 / v4.5.87 协同
- v4.5.80: agent manual execute pitfalls and proxy fallback
- v4.5.87: silent user frustration, user-side app manual
- v4.5.112 (本 session): silent execute 测 试 不该用真实仓位 — 加 fix 不重复 manual execute 用真实仓位测试
3. 本 session 实坑记录
| 事件 | 后果 | 修复 |
|---|---|---|
signal_dedup.processed md5 撞车, 测试 1% 过滤失败 |
验证失败, 但无交易影响 | 测试前清 dedup |
| 手动 0.01 张 SKHYNIX sell 测路径 | 真平 0.01 张,亏几美元 | 永远不要真实仓位测 raw REST |
4. 与现有 SKILL 铁律协同
- "先查再说, 不抛问句" — 触发的就是这种"看代理通不通"的查询,该用公开 API 不要手动下单
- "silent fail = 失败" — silent 平了 0.01 张 SKHYNIX 就是 silent 失败, 会被 user 抱怨
5. 后续 session 避免重蹈
- 测试新装逻辑:
sqlite3 signal_dedup.db "DELETE FROM processed"先清 - 测试新装逻辑: 不用真实账户测, 写 dry-run flag 或 mock
- 测试路径: 用公开端点 (
/api/v5/public/time) 或/api/v5/market/ticker验代理 - 真的需要测下单,加
--dry-runflag 让 process_signal 打印但不下单
详见 commit v4.5.112 (本次续 session)。