Files
Hermes-Skills/okx-auto-position/references/v4.5.5-pepe-full-cycle-and-close-path-bug.md
T

4.9 KiB

v4.5.5 (2026-07-08) 实战记录: PEPE 完整周期验证 + close 路径独立 bug

完整事件链

时间: 2026-07-08 下午-晚上

Phase 1: 信号来了执行失败

  1. 熬鹰 1000PEPE 多单信号连发 10+ 条 (新开仓 + 加仓, 公告价格 0.00288 USDT/1000PEPE, 公告保证金 $300k+)
  2. process_signal 推 QQ 成功, 但 advisor SSL 报错, execute 实际未下单
  3. 用户多次追问"跟单了吗,已经过了2小时了" → "我靠,你为什么不重试,这么久了,还不赶紧推。"
  4. agent 重跑 process_signal → advisor 报 1000PEPE-USDT-SWAP 不存在 (51001)

Phase 2: 诊断合约错配

  1. raw REST 查 /api/v5/public/instruments?instType=SWAP → 真实合约是 PEPE-USDT-SWAP
  2. 关键发现: ctVal=10,000,000 PEPE/张, OKX 单位 = 1 PEPE
  3. X 聚合社区显示 0.00288 USDT/1000PEPE, OKX 显示 0.00000288 USDT/PEPE → 数学一致,只是展示格式不同

Phase 3: 修复 parse_signal

  1. process_signal.py parse_signal() 加归一化:
sym = sym.replace('USDT', '').strip()
if sym == '1000PEPE':
    sym = 'PEPE'
fields['symbol'] = sym
  1. 重跑 → advisor 算出 14.8 张 PEPE long @7x, execute 成功
  2. 验证: USDT 从 $81 降到 $21 (冻结 $60+), 持仓确认 14.8 张 @ avgPx 0.000002881 (= 1000PEPE 单价 0.002881, 与信号 0.002888 误差 < 0.5%)

Phase 4: 平仓触发 bug

  1. 熬鹰 6+ 条连续减仓信号 (PEPE 价格下跌) → process_signal dedup 跳过
  2. 熬鹰平仓信号来 → process_signal 返回 ✅ 平仓处理: error
  3. bug 发现: close_position_raw 用了 1000PEPE-USDT-SWAP 仍然查不到合约

Phase 5: 修复 close 路径

  1. close_position_raw 加归一化:
inst_id = f"{symbol_usdt}-USDT-SWAP"
if symbol_usdt == '1000PEPE':
    inst_id = 'PEPE-USDT-SWAP'
  1. 重跑 close_position_raw('1000PEPE', 'long') → PEPE long 14.8 张全平成功
  2. order_id: 3745678821289287680
  3. 锁亏: -$14.50

Phase 6: 推送 + commit

  1. 推送 QQ 报告平仓结果
  2. commit: v4.5.5: 1000PEPE→PEPE 归一化 (开仓+close路径都修)
  3. git push → 502 Bad Gateway (git.hi6k.com 不稳定, 待重试)

核心教训

教训 1: 任何 1000xxx 包装币种必须两路都修

  • parse_signal 处理开仓/加仓信号 → 归一化
  • close_position_raw 处理平仓信号 → 也要归一化
  • 修一处就够会导致"开了平不掉" 或 "信号推了但持仓没记录"

教训 2: 修复后必须端到端测试

修复 1000xxx 包装币种的代码后,验证流程:

  1. 开仓信号 → execute 成功 → USDT 冻结 + 持仓增加
  2. 平仓信号 → execute 成功 → USDT 解冻 + 持仓清零
  3. 推送 QQ 验证数据一致性

教训 3: 价格单位换算容易出错

来源 显示 实际
X 聚合 0.00288 USDT/1000PEPE = 0.00000288 USDT/PEPE
OKX 0.00000288 USDT/PEPE = 0.00288 USDT/1000PEPE

验证公式: OKX价格 × 1000 ≈ X聚合价格 (误差 < 1% = 滑点)

教训 4: 用户对延迟极不耐烦

用户原话:

  • "跟单了吗,已经过了2小时了"
  • "我靠,你为什么不重试,这么久了,还不赶紧推。"

强制规则:

  • 用户问"跟单了吗" / "执行了吗" → 立即重跑 process_signal, 不反问
  • 用户说"重试" / "赶紧推" / "还不跟" → 立即重跑 + execute + raw REST 反查
  • 重试完成 → 简短报"已跟 X 张 @ Yx, USDT Z",不展开

教训 5: git push 失败不要 panic

git.hi6k.com 经常 502:

  • 本地 commit 就位即可,数据没丢
  • sleep 30-60s 重试,通常恢复
  • 不需要回滚或重做 commit

已知 1000x 包装币种 (扩展)

信号格式 OKX 合约 验证状态
1000PEPE PEPE-USDT-SWAP v4.5.5 完整周期验证
1000SHIB SHIB-USDT-SWAP ⚠️ 待测
1000FLOKI FLOKI-USDT-SWAP ⚠️ 待测
1000LUNC LUNC-USDT-SWAP ⚠️ 待测
1000XEC XEC-USDT-SWAP ⚠️ 待测
1000BONK BONK-USDT-SWAP ⚠️ 待测
1000SATS SATS-USDT-SWAP ⚠️ 待测

新币种到来时: 先查 OKX public/instruments 确认合约名, 再决定是否需要归一化。

给下次 session 的 action

  • 本地 commit v4.5.5 已就位 → 重试 git push (sleep 30)
  • 在 process_signal.py 加 if sym.startswith('1000') and sym[4:] in ('PEPE','SHIB','FLOKI','LUNC','XEC','BONK','SATS'): sym = sym[4:] (通用模式, 不只写 1000PEPE)
  • 在 close_position_raw 加同样通用归一化
  • 给所有 advisor 错误加 fallback: 用 raw REST /api/v5/public/instruments 自动找替代合约
  • 后续遇到 1000SHIB/1000FLOKI 等直接走归一化, 不需要再排查

关联

  • v4.5.37: 第7次违规 + 1000PEPE execute 漏处理
  • v4.5.38: symbol normalization 1000PEPE → PEPE (parse_signal 修复)
  • spcx-silent-fail-repro.md: 类似的小币种 execute 失败 (SPCX / MU 也出现过)
  • v4.5.18: execute 反查硬约束 (USDT 冻结 + 持仓张数验证)