# 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 重测: ```bash echo "[熬鹰币安实盘] [币种]: ZAMAUSDT 永续 | 全仓 | 2x [方向]: 做多 🟩 [原仓位]: 3273787 3276027 ZAMA ..." | python3 process_signal.py # 输出: ⏭️ 重复信号,跳过 # 期望: ⏭️ 减仓幅度过小 (0.05% < 1%), 跳过 ``` → 真实过滤逻辑**没有触发**(卡在 dedup 层)。 ### fix: 测试前手动清 dedup ```bash sqlite3 ~/.hermes/trading/signal_dedup.db "DELETE FROM processed WHERE 1=1;" ``` **或更精确** (只清特定 symbol): ```bash 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 卖单: ```python body = {"instId":"SKHYNIX-USDT-SWAP","tdMode":"cross","side":"sell","posSide":"net","ordType":"market","sz":"0.01"} ``` 执行成功,但实际上**真平了 0.01 张 SKHYNIX long** (从 1.703 → 1.693 张),产生了几美元亏损。 ### 为什么这是错的 1. **真账户测试** ≠ 测试代理路径。要测路径,用 dry-run mode / mock, 不该动真钱。 2. **"测 0.01 张" 看起来无害**,但 OKX 0.01 张是真实成交, 在 ZEC (1 张 = 0.01 ZEC) 上 0.01 张 = 1 个币 = $5+ 亏损。 3. **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 避免重蹈 1. 测试新装逻辑: `sqlite3 signal_dedup.db "DELETE FROM processed"` 先清 2. 测试新装逻辑: 不用真实账户测, 写 dry-run flag 或 mock 3. 测试路径: 用公开端点 (`/api/v5/public/time`) 或 `/api/v5/market/ticker` 验代理 4. 真的需要测下单,加 `--dry-run` flag 让 process_signal 打印但不下单 详见 commit `v4.5.112` (本次续 session)。