Files
Hermes-Skills/okx-auto-position/references/v4.5.66-2026-08-26-drop-low-rating-and-proxy-modes.md
T

158 lines
7.0 KiB
Markdown

# v4.5.66 (2026-08-26 末段) 去掉"性价比低"判断 + proxy 必要性确认 + TRUMP 调杠杆恢复 USDC 空闲
**会话**: 8 月 26 日熬鹰资本 TRUMP/MSTR 全周期(同 v4.5.65 同一 session 的后半段)
## 一、去掉"性价比低"判断 — 用户偏好反转
**用户原话**: "把性价比去掉,不要了。" (针对 SKHYNIX 新开仓信号报"性价比低"被跳过)
**修复** (`scripts/process_signal.py::process_signal()` open/add/reduce execute 前):
```python
# 旧 (v4.5.21~v4.5.62): "性价比低" 静默跳过 + 推 skipped_low_rating
# 新 (v4.5.66): 去掉这个判断, contracts > 0 就 execute
contracts = rec.get('contracts', 0)
auto_execute = contracts > 0 # 性价比低也不再跳过 (用户要求 2026-08-26)
```
**新行为**:
- advisor 报 `0.065 张` `性价比低` → **不再跳过**, execute 真实下单 (实测 0.098 张)
- advisor 报 `0.01 张` `性价比低` → 不再跳过, 但 `set_leverage` 失败时还是跳过 (cross margin 0.01 张保证金 < 1 USDT)
- 用户原话: "把性价比去掉,不要了" → 这是用户对 advisor 报"低"的明确反弹
**与 v4.5.21~v4.5.62 的关系**:
- v4.5.21 加的"性价比低"判断是 v4.5.37 之前"小币种 silent execute"的兜底
- 现在小币种 silent execute 已通过 `silent_order` 标识 (v4.5.65) → 不再需要"性价比低"做兜底
- 用户的实际偏好:**跟单就要跟, advisor 怎么说无所谓**
**部署清单**:
- [x] `process_signal.py` 去掉 `is_low_rating` 判断
- [ ] `okx_position_advisor.py` 去掉"性价比低"字段生成 (待清理, 不阻塞)
- [ ] `format_execution_result` 检查"性价比低"残留引用
## 二、proxy 必要性 — 公开 API 可直连, 私有 API 必须 proxy
**用户原话**: "这个需要走代理吗?不用吧" (针对 OKX raw REST 调用)
**会话内验证**:
```bash
# 公开 API (行情/时间) - 可以直连, 不需要 proxy
curl -sS https://www.okx.com/api/v5/public/time
# → {"code":"0","data":[{"ts":"1787987273250"}],"msg":""}
# 私有 API (下单/查持仓/查余额) - 必须走 proxy 127.0.0.1:7890
# 原因: OKX 账户的 API key 绑定到特定 IP, 国内/非绑定 IP 直连会拒绝
```
**硬规则 (v4.5.66 新增)**:
- **公开 API** (`/api/v5/public/*`, `/api/v5/market/*`): 直连 OKX, **不需要 proxy**
- **私有 API** (`/api/v5/account/*`, `/api/v5/trade/*`, `/api/v5/position/*`): **必须走 proxy 127.0.0.1:7890** (clash/mihomo)
- 跨工具统一: `check_account.py` / `manual_order.py` / `process_signal.py` / `signal_tracker.py` 的 `_okx_raw_request` 全部走 proxy
**proxy 抽风模式**:
- `_okx_raw_request` 返回 `None` (SSL EOF / connection reset)
- vs 返回 `dict` 但 `code != '0'`
- 前者是**proxy 不通** (整体重试 30s), 后者是**业务报错** (不必重试)
**部署清单**:
- [ ] `check_account.py` 加 `if positions == [] and availBal == 0: warning = "ssl_maybe_failed"`, 自动 30s 后 retry
- [ ] `manual_order.py` 私有 API 调用必须 `proxies={'http':'http://127.0.0.1:7890','https':'http://127.0.0.1:7890'}`
- [ ] `process_signal.py` 主流程区分"proxy 抽风" vs "业务报错", 给用户不同提示
## 三、TRUMP 1x → 2x 调杠杆恢复 USDC 空闲 实战
**会话内事件时间线**:
1. 熬鹰 TRUMP long 1x 新开仓 → advisor 报 137 张 → **execute 实际 586 张@1x** (幽灵 execute, 跟 v4.5.62 HYPE 同源)
2. USDT 可用从 $156 → **$2.13** (几乎全占, 9成9仓位)
3. 熬鹰 TRUMP 调杠杆 1→2x 信号 → v4.5.64 修复后**自动跟** → TRUMP 586张@2x
4. USDT 可用从 $2.13 → **$81.25** (杠杆升, 保证金降, 空闲恢复)
**关键洞察**:
- 1x 全仓: 名义价值 = USDT 占用 (≈ 杠杆 1x)
- 2x 全仓: 名义价值 = 2 × USDT 占用 (杠杆升, **USDT 占用减半**)
- 调杠杆本身**不加仓**, 只调整"实际占用保证金", 所以 USDT 空闲恢复
- **用户**的"只留 X 成余额"指令, 调杠杆是隐式生效的另一条路径
**实战模板** (从 1x 调到 2x 释放 USDC):
```python
# 检查现有 1x 持仓
python3 check_account.py TRUMP-USDT-SWAP
# → 586 张@1x, USDT 占用 $155.82
# 调杠杆 (自动跟 OR 手动)
python3 process_signal.py "调杠杆 1→2x 信号"
# → TRUMP 586张@2x, USDT 占用 $79.14, USDT 可用 $81.25
```
**SOP**: 用户仓位接近满 (USDT 可用 < 10%) → 先查 advisor 是否在调杠杆信号, **优先跟调杠杆** 而不是手动平仓
## 四、MSTR manual_order 4.01张@5x + 手动加锁 实战细节
**会话内事件**:
- 熬鹰 MSTR 1x 新开仓 → advisor 报"性价比低" → (本 session 后段已去掉判断)
- 用户主动要跟单, 手动 raw REST 下单 1 张 → 0.01 张 → 加 3 张 → 共 **4.01 张@5x**
- 用户说 "用 8 成来开" → "不是,是只留 2 成的余额" → "那只留 3 层呢"
- 我第一反应理解错, **留余额 vs 占仓位** 是两件事
**用户行为模式 (v4.5.66 强化)**:
- "X 成来开" = **占 X 成仓位** (留 1-X 成余额)
- "留 X 成余额" = 留 X 成余额, 占用 1-X 成仓位
- 用户说"留 2 成余额" = 我应该占用 **80% 仓位**
- 用户说"只留 3 层" = 留 3 成余额 = 占 7 成仓位
- **永远要 clarify**: 用户说 "X" 是 "留" 还是 "占"
**manual_order 模板** (`/tmp/lock_<X>.py` 已沉淀到 v4.5.63):
```python
cat > /tmp/lock_mstr.py << 'PYEOF'
import sys
sys.path.insert(0, '/home/openclaw/.hermes/skills/trading/okx-auto-position/scripts')
from signal_tracker import acquire_lock
ok, msg = acquire_lock("MSTR", "熬鹰资本", "short", reason="手动加锁", auto=False)
print(f"ok={ok}, msg={msg}")
PYEOF
python3 /tmp/lock_mstr.py
```
**关键陷阱 (v4.5.63 已记)**:
- `acquire_lock` 的 symbol 必须**无后缀** ("MSTR" 不是 "MSTR-USDT-SWAP")
- 验证: `sqlite3 ~/.hermes/trading/signal_history.db "SELECT * FROM position_locks;"` 应只见无后缀 symbol
## 五、本次 session 净状态 (与 v4.5.65 续)
**持仓变化**:
- TRUMP long 586张@1x → 调 2x → **586张@2x** (v4.5.64 自动跟)
- SKHYNIX long 0.098张@1x (去掉"性价比低"后 execute 成功)
- MSTR short 4.01张@5x (手动加仓)
**USDT 变化**:
- TRUMP 调杠杆前: $157.95 (可用 $2.13)
- TRUMP 调杠杆后: $160.39 (可用 $81.25)
- 累计净增: +$0.88 (TRUMP 调杠杆盈利)
**锁表新增**:
- MSTR | 熬鹰资本 | short
- TRUMP | 熬鹰资本 | long
- SKHYNIX | 熬鹰资本 | long
## 部署清单 (下次 session 第一件事)
- [x] 去掉"性价比低"判断, 跟所有熬鹰信号
- [ ] `okx_position_advisor.py` 清理"性价比低"字段 (可选)
- [ ] `_okx_raw_request` 加 proxy 抽风检测 (`None` 自动 retry)
- [ ] `manual_order.py` 检查 body=body keyword arg (v4.5.65 已记)
- [ ] "X 成来开" / "留 X 成余额" clarify 模板入 reference
- [ ] 调杠杆后 USDT 空闲恢复机制 (SOP) 入 reference
## 关联版本
```
v4.5.21 加"性价比低"判断 (兜底)
↓
v4.5.37 ~ v4.5.62 沿用 + silent_order 标识
↓
v4.5.65 silent_order 完整化, "性价比低"还有兜底作用
↓
v4.5.66 去掉"性价比低"判断, 跟所有熬鹰信号 (用户偏好反转)
```
每次踩坑都在 OKX 跟单这条线上, 跟其他 skill 不重叠。