5.0 KiB
5.0 KiB
v4.5.41 (2026-07-08) XAU advisor execute 静默失败 + 用户"快跟单啊"硬动作规则
实测事件
熬鹰连续推 8 条 XAU 多头信号 (166→291→479→527→634 张 @10x → 熬鹰后改为 @20x)。
process_signal.py推送了 QQ ✅okx_position_advisor.py --symbol XAU --execute --json返回完整 JSON 包含auto_execute: true- 但实际未下单: raw REST
/api/v5/account/positions查询无 XAU 持仓; USDT 余额不变 - 用户连发 "快跟单啊" / "我靠,这么久了还不赶紧推"
- 最终手动 raw REST POST
/api/v5/trade/order下单成功 (order_id: 3748482336059482112)
根因 (与 SPCX/1000PEPE/MU 同模式)
okx_position_advisor.py 的 execute 路径依赖 ccxt.exchange.create_market_buy_order() →
该方法对 XAU/SPCX/1000PEPE/MU 等"新币种 + 小流动性 + 高单价"组合会隐性失败:
- 不抛异常
- 返回的 order 对象无
id字段或被 advisor 静默忽略 - advisor 输出 JSON 含
auto_execute: true但实际无 fill
已知失效币种清单 (2026-07-08):
- SPCX (USDT-SWAP)
- 1000PEPE / PEPE (包装币归一化后)
- MU (USDT-SWAP)
- XAU (USDT-SWAP, 实测新增)
修复路径
1. 主流程硬动作规则 (本次用户强烈反馈)
用户原话:
- "我靠,你为什么不重试,这么久了,还不赶紧推"
- "快跟单啊"
规则: 收到信号 → 30 秒内必须出现"可见动作"(跑脚本或 manual raw REST)。
如果 advisor execute 静默失败,不允许等待用户指示或问"要不要手动",
必须立即自己手动 raw REST POST /api/v5/trade/order 重试 (用 signal 里的方向/张数/leverage)。
失败后再 fallback 到手动,失败后再 push 错误到 QQ。禁止: 静默等待 / 反问用户。
2. execute 反查检查 (写代码层)
在 process_signal.py 主流程的 execute 后,加 1-3 秒延迟后用 raw REST 查 /api/v5/account/positions:
- 如果 signal 里币种无持仓但 advisor 返回 success → 立即推 QQ "execute 失败,需手动"
- 如果有持仓 → 推成功 (现状)
- 已知失效币种清单 (SPCX/1000PEPE/MU/XAU) → 直接走 manual raw REST 路径,不走 ccxt
3. manual raw REST execute 模板
import requests, time, hmac, hashlib, base64, json
def okx_post(p, body, t=15):
creds = open('/home/openclaw/.bashrc').read()
k=s=pw=None
for line in creds.split('\n'):
if line.startswith('export OKX_API_KEY='): k=...
if line.startswith('export OKX_SECRET='): s=...
if line.startswith('export OKX_PASSPHRASE='): pw=...
body_str = json.dumps(body)
ts = time.strftime('%Y-%m-%dT%H:%M:%S.000Z', time.gmtime())
msg = ts + 'POST' + p + body_str
sig = base64.b64encode(hmac.new(s.encode(), msg.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'}
px = {'http':'http://127.0.0.1:7890','https':'http://127.0.0.1:7890'}
return requests.post(f'https://www.okx.com{p}', data=body_str, headers=h, proxies=px, timeout=t).json()
# XAU long 15 张示例
body = {
'instId': 'XAU-USDT-SWAP', 'tdMode': 'cross', 'side': 'buy',
'posSide': 'net', 'ordType': 'market', 'sz': '15'
}
print(okx_post('/api/v5/trade/order', body))
4. 失败币种 bypass 清单 (写 process_signal.py)
SILENT_FAIL_SYMBOLS = {'SPCX', '1000PEPE', 'PEPE', 'MU', 'XAU'}
def execute_with_fallback(symbol, side, leverage, contracts):
if symbol in SILENT_FAIL_SYMBOLS:
return manual_raw_rest_order(symbol, side, leverage, contracts)
else:
return ccxt_advisor_execute(symbol, side, leverage)
与已有 reference 关系
references/v4.5.39-xau-silent-execute-and-raw-rest-workaround.md— 早期 XAU 教训references/spcx-silent-fail-repro.md— SPCX 静默失败复现references/v4.5.34-2026-07-08-execute-returns-success-no-fill.md— execute 返回 success 但无 fillreferences/v4.5.27-2026-07-08-silent-execute-failure.md— silent execute 通用规则
本文件聚焦: XAU 新增到失效清单 + 用户对延迟极不耐烦的硬动作规则。
实战结果
| 步骤 | 状态 |
|---|---|
| process_signal.py 推送 QQ | ✅ |
| okx_position_advisor --execute | ✅ 返回 JSON (auto_execute=true) |
| 实际下单 | ❌ 静默失败 (无 XAU 持仓) |
| 用户催促 | "快跟单啊" |
| manual raw REST POST | ✅ 下单 15 张成功, order_id: 3748482336059482112 |
| 反查 raw REST 持仓 | ✅ XAU long 15 张 @ 4016.6, 占用 $20.08 保证金 |
用户偏好 (已入 memory, 此处重复以便快速召回)
- "对延迟极度敏感": 30s 内必须有动作
- "失败后期待自动重试, 不等我问怎么办"
- 禁止反问, 禁止静默等待, 禁止"等用户拍板"
关联代码文件
scripts/process_signal.py— 主流程, 需加 manual fallback 分支scripts/okx_position_advisor.py— ccxt 路径, XAU/SPCX/PEPE/MU 失效scripts/sanitize_reply.py— 已存在但未部署到 process_signal.py