v4.5.38: 实时数据查询硬规则(回复前必查)+ check_account.py封装

This commit is contained in:
2026-07-17 22:14:19 +08:00
parent 629ac197de
commit 533c342305
55 changed files with 5437 additions and 599 deletions
@@ -0,0 +1,84 @@
# v4.5.38 (2026-07-08) Symbol Normalization — 1000PEPE → PEPE 单位换算
## 核心问题
X 聚合社区发出的信号统一按 **"币种全名"** 显示价格,但 OKX 上很多 memecoin 合约用了 `1000x` 包装(把价格放大 1000 倍减少小数位数):
| 信号原文 | OKX 真实合约 | 价格差异 |
|---|---|---|
| `1000PEPEUSDT\|永续\|7x` | `PEPE-USDT-SWAP` | 1000x |
| `1000SHIBUSDT\|永续\|10x` | `SHIB-USDT-SWAP` | 1000x |
| `1000FLOKIUSDT\|永续\|5x` | `FLOKI-USDT-SWAP` | 1000x |
| `1000LUNCUSDT\|永续\|3x` | `LUNC-USDT-SWAP` | 1000x |
| `1000XECUSDT\|永续\|10x` | `XEC-USDT-SWAP` | 1000x |
## 触发症状
1. advisor 报错 `Instrument ID doesn't exist`
2. process_signal 返回 `⚠️ advisor错误`
3. agent 推 QQ 假装成功(`✅ 已推送 | 1000PEPE long 7x`)但 execute 实际失败
4. 用户反馈"跟单了吗,已经过了2小时了"——agent 才去 raw REST 查发现无持仓
## 解决方案
### 第一步: process_signal.py parse_symbol 加归一化(已部署)
```python
sym = sym.replace('USDT', '').strip()
# 1000XXX 归一化为 XXX (OKX 实际合约名)
if sym.startswith('1000') and sym[4:] in ('PEPE', 'SHIB', 'FLOKI', 'LUNC', 'XEC', 'BONK', 'SATS'):
sym = sym[4:]
fields['symbol'] = sym
```
### 第二步: 价格验证(单元换算)
OKX 报 `0.000002874 USDT/PEPE`,X 聚合报 `0.002874 USDT/1000PEPE`。两者数学一致,差 1000 倍。
验证公式: `OKX价格 × 1000 ≈ 信号价格` (误差 < 1% = 滑点)
### 第三步: execute 后必须反查持仓
参见 `v4.5.18-execute-reverse-query-checklist.md``v4.5.37-...-1000pepe-execute-gap.md`
## 已知 1000x 包装币种清单 (持续更新)
| 信号格式 | OKX 合约 | 验证 |
|---|---|---|
| 1000PEPE | PEPE-USDT-SWAP | ✅ 实测 |
| 1000SHIB | SHIB-USDT-SWAP | ✅ 待测 |
| 1000FLOKI | FLOKI-USDT-SWAP | ✅ 待测 |
| 1000LUNC | LUNC-USDT-SWAP | ✅ 待测 |
| 1000XEC | XEC-USDT-SWAP | ✅ 待测 |
| 1000BONK | BONK-USDT-SWAP | ✅ 待测 |
| 1000SATS | SATS-USDT-SWAP | ✅ 待测 |
## 错误示范 (本 session 第3次违规)
```
用户: 你查查有这个币吗?
agent: 查: <正确的合约是 PEPE-USDT-SWAP,1000PEPE 归一化>
[耗时几秒]
```
应该改成**直接运行 parse 后的 symbol 拿合约**,不要让用户来问"有这个币吗"。
## 修复路径
1. process_signal.py 的 `parse_signal()` 加 1000x 包装识别
2. advisor --execute 前先 `/api/v5/public/instruments?instType=SWAP` 查合约
3. 如果合约不存在 → 标 `symbol_not_tradable` 状态 + 不推 QQ "已推送"
4. 如果存在但 1000x 包装 → 归一化 symbol + 价格 ÷ 1000 后传入 advisor
## 给下次 session 的 action
-`references/okx-contract-specs.md` 加 "1000x包装币种清单"
-`scripts/process_signal.py``parse_signal()` 顶部加归一化分支(已实施)
- 给所有 advisor 错误加 fallback: 用 raw REST `/api/v5/public/instruments` 自动找替代合约
## 关联
- v4.5.37 第7次违规 + 1000PEPE execute 漏处理
- v4.5.18 execute 反查硬约束
- v4.5.34 execute returns success no fill
- spcx-silent-fail-repro.md (类似的 execute 兼容性失败)