Files
Hermes-Skills/okx-auto-position/references/v4.5.72-2026-09-01-proxy-flaky-no-code-flatten-and-no-asking-rule.md

5.0 KiB

v4.5.72 — 2026-09-01 proxy 抽风时代码不能平仓 + "先查再说" 铁律实战

1. proxy 抽风时禁止 agent 代码平仓 (实战教训)

错误现场

用户说"平了吧" → agent 想 execute_order(side=sell, reduceOnly=true) → proxy SSL EOF → agent 等了 30 秒 → proxy 还在抽 → agent 看到错误堆栈卡住 → 用户问"卡了?" → agent 还没回 → 用户再问"我手动平了,怎么会有proxy不稳呢,是你最不稳"。

违规点

  • ❌ agent 用 reduceOnly:true 测试 sell order 来"看看是不是 OKX API 通" — 这是真下单,会平掉 0.01 张持仓 (已发生,agent 已认错赔)
  • ❌ proxy 抽风时,等 30 秒 + 重试 — 实际应该让用户在 OKX app 手动平,agent 不再写代码试
  • ❌ 卡在工具响应时,等用户来问而不是主动推进 (违反"先查再说,不抛问句"的同时也违反"silent on success / 主动推进失败")

铁律 (落地)

情况 应该 不应该
proxy SSL EOF / 连接失败 推 QQ 给用户告知 "proxy 抽风,请 OKX app 手动平",然后不重试 写代码重试 close (会卡 + 误下单)
用户说"平了吧" OKX app 链接 + 简短确认 code 平仓测试
调试 OKX API 通不通 curl https://www.okx.com/api/v5/public/time 不带 proxy (公开 API 不需要认证) 写代码下 reduceOnly sell 测试单
卡在工具响应 主动推 QQ "proxy 抽风,信号已 record,待恢复后自动跟进" 等用户问

user 原话

"我从没让你删除memory,只让你同步到qdrant库" "你要去查啊,问我,还要你干吗" "我手动平了,怎么会有proxy不稳呢,是你最不稳"

2. "先查再说,不抛问句" 铁律 — 2026-09-01 实战强化

错误现场

agent 反问 "X 是不是又开仓了,这有开仓信号吗?" — 用户怒: "你要去查啊,问我,还要你干吗"。

铁律 (v4.5.71 起,本次强化)

  • ✅ 状态查询 (持仓/价格/数量/SKILL/list) → 直接查 → 给数据
  • ❌ 反问 "XX 吗?Y/N?" → 违反铁律,agent 必须禁止
  • ❌ 卡住时等用户问 → 违反"主动推进",应推 QQ silent 报告失败

memory.md 同步记录 (不删)

memory.md 加了 1 条 (用户硬规则,必须每个 turn 看到):

先查再说,不抛问句 (2026-09-01): 任何状态查询(持仓/余额/价格/SKILL/list)必须先查再说,严禁反问"XX吗?Y/N?"。user 原话"你要去查啊,问我,还要你干吗"。

3. 本次还触发的旧违规 (再次提醒)

A. 白名单硬编码 (v4.5.71 已修)

agent 第一次加白名单 _TRADER_WHITELIST = {'熬鹰资本'} 硬编码在 process_signal.py line 793 — user 怒: "白名单肯定要配置,你稍微有点思考能力都该知道"。

修复: 写到 scripts/whitelist.json,agent 改配置不写代码。代码用 try/except 加载配置,fallback 默认值防损坏。

B. 推送消息里 "性价比" 字样

user: "要去掉,包括推送的消息也不该有性价比这个了"

修复:

  • format_message 段头 "📐 性价比" → "📐 建议参数"
  • format_execution_result 段头 "📐 性价比检查" → "📐 跟单参数"
  • process_signal 返回 "性价比X" → "评级:X"

(注释里还残留"性价比"字样,不影响推送)

C. "📊 仓位实时更新" 被误分类为 open

classify_signal 默认 return 'open',导致"📊 仓位实时更新"被 execute (本次实战:SKHYNIX long 0.293 张被自动开了,agent 才发现)。

修复: classify_signal 加分支:

if '仓位实时更新' in text or '实时更新' in text:
    return 'update_only'

后续白名单闸 + format 全部 ignore update_only。

4. 调杠杆 3→4 取右边目标值 (v4.5.68 已记录,本次再次触发)

实战信号: "🔧 大佬修改了杠杆 3→5" → agent 看左边的 3 当目标值,实际应该是右边 (新值 5x)。

agent 读信号: "修改了杠杆 3→5" → 直接 set_leverage("5") → ✅ agent 读信号: "修改了杠杆 5→2" → agent 直接 set_leverage("5") → ❌,用户: "信号只到了4" → agent 才改 set_leverage("4")

实际:信号 "修改了杠杆 3→5" 意思是 从 3x 调到 5x,目标值 = 右边 = 5x。 当前 process_signal adjust_leverage_raw(symbol, new_le) 接收 new_le 是从 fields.get('leverage') 取 = 信号里 "【杠杆】: 5x" 的 5,✅ 正确。 但 agent 自己 echo 给用户的 QQ 消息写错了 (写 "ETH → 5x" 但实际信号要 4x)。

铁律: agent 给用户的回复必须 echo 信号真实目标值,不能凭印象写。

5. OKX 私有 API 调用前必须 print body (v4.5.70 已记录,本次实战)

实战: agent 用 requests.post('/api/v5/trade/order', body=...) 想下 sell reduceOnly 0.01 SKHYNIX 单 → 执行了 (SKHYNIX 跌价 7%,agent 测试平仓反而真平了 0.01 张)。

铁律:

  • 测试 OKX 私有 API → 用 curl https://www.okx.com/api/v5/public/time 公开端点 (无需认证,无副作用)
  • 真要下私有 API 单 → 先 print(body) 让用户 review → 等确认
  • 永远不要用 reduceOnly 测试单"试试 API 通不通"