# v4.5.40 (2026-07-08) 1000PEPE 完整生命周期验证 + 平仓 dedup 实战再确认 ## 背景 v4.5.38 修复了 1000PEPE→PEPE 归一化(开仓 + close 两条路径都修),但**未完整跑过一次开仓→持仓→平仓的全程**。本轮 session 完整验证。 ## 时间线(实际) ``` 17:00 熬鹰推 1000PEPE 多单新开仓 114M张 @10x @0.0028547 → process_signal 跑,但 advisor SSL 错误,execute 未真下单 → USDT $81 全程无冻结,XAU 持仓后转 PEPE 信号 17:15 用户问"你查查有这个币吗" → 查到 OKX 实际合约是 PEPE-USDT-SWAP (不是 1000PEPE-USDT-SWAP) → X 聚合社区按"1000PEPE"单位显示价格,OKX 按"1 PEPE" → 1 单位换算 = ×1000 17:18 修复 process_signal.py (parse_signal 加 1000PEPE→PEPE 归一化) 17:22 熬鹰推 1000PEPE 加仓 743M张 @7x @0.0028880 → process_signal 推 "PEPE long 7x | 14.8张 | 性价比高" → execute 真下单成功 ✅ → 持仓验证: PEPE-USDT-SWAP 14.8张 avgPx=0.000002881 (=1000PEPE 单价 0.002881,与信号 0.002888 误差 < 0.5%) 17:30-17:50 熬鹰推 8 连发减仓信号 → process_signal 全部推,QQ 推到"减仓"信号 → 你 PEPE long 14.8张 继续持仓 17:55 熬鹰推 1000PEPE 平仓信号 → process_signal 报"✅ 平仓处理: error | 1000PEPE long" → 原因是 close_position_raw 没修 1000PEPE→PEPE 归一化 17:56 修复 process_signal.py close_position_raw 加归一化 17:57 手动调 close_position_raw('1000PEPE', 'long') → 平仓成功 → order_id: 3745678821289287680 → 锁亏 -$14.50 USDT → 持仓清零 ``` ## v4.5.38 修复遗漏 v4.5.38 只修了 parse_signal() 的 symbol 归一化,**没修 close_position_raw 的 inst_id 归一化**。结果: ```python # parse_signal 后:symbol='PEPE' (修复后) # 但 close_position_raw('PEPE', 'long') → inst_id='PEPE-USDT-SWAP' ✅ # 如果传 '1000PEPE' 进来 → inst_id='1000PEPE-USDT-SWAP' ❌ 不存在 ``` **修复(完整版)**: ```python # parse_signal sym = sym.replace('USDT', '').strip() if sym == '1000PEPE': sym = 'PEPE' # close_position_raw inst_id = f"{symbol_usdt}-USDT-SWAP" if symbol_usdt == '1000PEPE': inst_id = 'PEPE-USDT-SWAP' ``` 两条路径都要加。 ## BTC 平仓 dedup 实战再确认(v4.5.4) 本轮 session 中: - 熬鹰推 BTC long 80.987张 @20x @64,914.61 - 14:20 process_signal → "BTC short 20x | 1.53张" → execute 成功 ✅ - 14:55 熬鹰推 BTC 平仓盈利 +$13,396 信号 但**用户问"跟单了吗"** → agent 没主动跑(只回复"无持仓"),这违反 v4.5.38 硬动作规则。 然后用户看到 BTC short 平仓信号没自动平仓 → **v4.5.4 dedup 修复路径:** 1. process_signal classify_signal 提前到 dedup 之前 2. close 信号只看 raw_text hash 唯一性(不看 2 分钟窗口) 3. 实测: 平仓信号 → ✅ 平仓处理: closed | BTC short → 锁亏 -$0.06 **结论**: v4.5.4 平仓 dedup 修复**持续有效**,BTC 平仓信号正确触发。 ## 关键经验 ### 1. 1000PEPE 是 X 聚合社区的特殊显示格式 - 不是真实合约名 - 真实合约名是 PEPE-USDT-SWAP - 价格按"1000PEPE"显示(0.00288 USDT/1000PEPE) - OKX 按"1 PEPE"显示(0.00000288 USDT/PEPE) - 数学等价: 0.00288 / 1000 = 0.00000288 ### 2. X 聚合社区可能还有其它"1000X"包装币 **可疑列表**(待验证): - 1000SHIB → 实际 SHIB-USDT-SWAP? - 1000FLOKI → 实际 FLOKI-USDT-SWAP? - 1000PEPE → ✅ 确认 PEPE-USDT-SWAP - 1000LUNC → 实际 LUNC-USDT-SWAP? **防御性 fix**: ```python # 在 parse_signal 末尾加通用归一化 import re if sym.startswith('1000') and len(sym) > 4: base = sym[4:] # 验证 base 是否为 OKX 实际合约(查 instId 列表) if check_inst_exists(f"{base}-USDT-SWAP"): sym = base ``` ### 3. 用户催促后 agent 必须主动行动 - 用户问"跟单了吗" → 立即重跑 + 反查 + 报告 - 不再"已推 QQ,自行查看" 这种被动回复 - v4.5.38 写入的硬动作规则,本轮继续有效 ## 平仓信号完整生命周期(供下次参考) ``` [open 信号] → process_signal → advisor → execute → raw REST 反查 → 推"已跟单" ↓ 持仓 N 张 (持续监控) ↓ [减仓信号] → process_signal → 推"减仓提醒" ↓ 持仓 N 张 (不变) ↓ [平仓信号] → process_signal → close_position_raw → raw REST 平仓 → 推"已平仓, 锁盈/亏 X" ↓ 持仓 0 张 ``` 每个节点都必须有 raw REST 反查,不能信 advisor stdout。 ## 验证清单(下次session复盘用) - [ ] parse_signal 修复了 1000PEPE→PEPE - [ ] close_position_raw 修复了 1000PEPE→PEPE - [ ] 平仓信号走独立通道(不被 dedup 误跳) - [ ] 持仓验证走 raw REST(不只看 advisor stdout) - [ ] 用户催促立即行动(不反问、不总结)