Files
Hermes-Skills/okx-auto-position/references/proxy-ssl-retry-and-59108-2026-09-13.md
T

50 lines
3.1 KiB
Markdown

# Proxy SSL EOF 平仓兜底 + cross 降杠杆 59108 (2026-09-13 实战总结)
## 1. 平仓时 `_okx_raw_request 返回 None` = proxy (clash 127.0.0.1:7890) SSL 抽风
现象: process_signal 处理 close 信号报 `❌ 平仓失败: _okx_raw_request 返回 None (proxy 抽风?)`
处理顺序:
1. `sleep 15~30` 后重跑同一信号 (先 `DELETE FROM processed` 清 msg_hash)
2. 仍失败 → 手动 raw REST 市价 reduceOnly 平仓 (模板见下)
3. 用户在 OKX app 手动平是最后兜底 (app 不走 proxy, 最快)
### 手动平仓模板 (按方向选 side, 张数=当前持仓)
```python
import json,time,hmac,hashlib,base64,requests
def okx_post(path, body, t=15):
creds=open('/home/openclaw/.bashrc').read()
k=s=pw=None
for l in creds.splitlines():
if l.startswith('export OKX_API_KEY='): k=l.split('=',1)[1].strip().strip('"')
elif l.startswith('export OKX_SECRET='): s=l.split('=',1)[1].strip().strip('"')
elif l.startswith('export OKX_PASSPHRASE='): pw=l.split('=',1)[1].strip().strip('"')
ts=time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime())
body_str=json.dumps(body)
pre=ts+'POST'+path+body_str
sig=base64.b64encode(hmac.new(s.encode(),pre.encode(),hashlib.sha256).digest()).decode()
h={'OK-ACCESS-KEY':k,'OK-ACCESS-SIGN':sig,'OK-ACCESS-TIMESTAMP':ts,'OK-ACCESS-PASSPHRASE':pw,'Content-Type':'application/json'}
proxies={'http':'http://127.0.0.1:7890','https':'http://127.0.0.1:7890'}
return requests.post('https://www.okx.com'+path,headers=h,data=body_str,timeout=t,proxies=proxies).json()
# long 平仓 → side=sell; short 平仓 → side=buy; sz=当前张数
body={"instId":"ETH-USDT-SWAP","tdMode":"cross","side":"buy","posSide":"net","ordType":"market","sz":"8.48","reduceOnly":True}
print(okx_post('/api/v5/trade/order', body))
```
平仓后必须 `release_lock(symbol, trader, auto=True)` 释放 position_locks。
## 2. cross 全仓模式降杠杆必报 59108
`{"code":"59108","msg":"Your account leverage is too low and has insufficient margins."}`
原因: 目标杠杆所需保证金 > 当前可用余额。降杠杆(如10x→2x)会提高保证金要求, 持仓时余额不够就拒。
结论: **降杠杆信号在持仓状态下无法直接执行**, 只有两条路:
- 先减仓释放保证金, 再 set-leverage
- 跳过降杠杆, 保持原杠杆等平仓信号 (实战默认做法, 已向用户说明)
加杠杆(如3x→10x)不受影响, 直接成功。
## 3. advisor execute 张数 ≠ 建议张数 (已知 bug, 方向总是对)
advisor JSON 报 contracts=X (如 0.065/78/0.85), 实际成交 ~3X (0.098/236/2.58)。方向与杠杆正确, 张数偏大。
实战处理: execute 后必须 check_account.py 实查真实张数再汇报, 不引用 advisor 数字。
## 4. 调杠杆信号直通 set-leverage (v4.5.94)
classify_signal: 文本含 `修改了杠杆/调整了杠杆` → `adjust_leverage` → 白名单闸通过 → 跳过 advisor 直接 `adjust_leverage_raw(symbol, 目标倍数)`。
目标倍数取信号 `【杠杆】` 字段 (即 "3→5" 里的 5), 不是当前值。
加杠杆直接成功; 降杠杆撞 59108 → 汇报失败原因, 不反复重试。