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

3.1 KiB

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, 张数=当前持仓)

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 → 汇报失败原因, 不反复重试。