现象
已批准的 Binance 衍生品订单在 push 时可能被交易所拒绝,错误码 -4061:订单的 positionSide 与账户当前持仓模式(单向 / 双向)不一致。
Push 结果正确记为拒绝(已提交 0 / 已拒绝 1)。用户只看到原始 Binance 报错,没有产品层面对「持仓模式要求」的说明。
观测于 binance-main(derivatives 子账户):BUY LLY 0.051,限价 1183,2x → 被拒。
binance {"code":-4061,"msg":"Order's position side does not match user's setting."}
疑似原因 / 子系统
- UTA CCXT 路径(
services/uta/src/domain/trading/brokers/ccxt/CcxtBroker.ts 的 placeOrder)只发送 buy/sell(平仓时带 reduceOnly),不会读取 Binance 持仓模式,也不会设置 positionSide / params.hedged。
- CCXT Binance 仅在
params.hedged === true 时写出 positionSide: LONG|SHORT;默认按单向形态下单。
- 较可能的错配:账户为 双向(Hedge),订单按 单向发出(未带
LONG/SHORT)。反过来(单向账户却带了双向的 positionSide)也会得到 -4061。
同类问题:#1022(Bitget 40774 — 同一类单向/双向缺口)。
需要做什么
先定产品立场,再按其中一条补齐缺口:
- 若 Binance 合约交易只支持单向(或只支持双向) — 说清楚,并给出可操作提示(不能只在批准后甩原始
-4061)。最好在用户 于 UTA 添加 Binance 凭证时就提示,若之后模式变更,push 前/时仍要拦截并说明。
- 否则 — 系统化支持单向与双向两种持仓模式,使已批准订单在任一账户设置下都能提交(探测模式;开/平仓映射到正确的
positionSide)。
同时考虑在审批 / push 结果 UI 里,把 -4061 翻译成更可读的产品文案。
验收标准
- 用户清楚 Binance 合约支持单向、双向,还是两者都支持。
- 若限制模式:添加 Binance 凭证时就能发现不兼容持仓模式(之后若变更,push 时仍用明确提示拦截)。
- 在已支持的模式下,衍生品下单不再因这类错配被拒。
- 不支持的模式失败时,有清晰的产品提示,而不只是交易所错误原文。
为何暂缓
在排查一次真实 push 拒绝时发现(explore)。修复需要先明确支持哪些持仓模式(与 #1022 同一决策面),再改 UTA 报文字段;当前交互线程不拥有该改动。
现象
已批准的 Binance 衍生品订单在 push 时可能被交易所拒绝,错误码
-4061:订单的positionSide与账户当前持仓模式(单向 / 双向)不一致。Push 结果正确记为拒绝(
已提交 0 / 已拒绝 1)。用户只看到原始 Binance 报错,没有产品层面对「持仓模式要求」的说明。观测于
binance-main(derivatives 子账户):BUY LLY 0.051,限价 1183,2x → 被拒。疑似原因 / 子系统
services/uta/src/domain/trading/brokers/ccxt/CcxtBroker.ts的placeOrder)只发送buy/sell(平仓时带reduceOnly),不会读取 Binance 持仓模式,也不会设置positionSide/params.hedged。params.hedged === true时写出positionSide: LONG|SHORT;默认按单向形态下单。LONG/SHORT)。反过来(单向账户却带了双向的positionSide)也会得到-4061。同类问题:#1022(Bitget
40774— 同一类单向/双向缺口)。需要做什么
先定产品立场,再按其中一条补齐缺口:
-4061)。最好在用户 于 UTA 添加 Binance 凭证时就提示,若之后模式变更,push 前/时仍要拦截并说明。positionSide)。同时考虑在审批 / push 结果 UI 里,把
-4061翻译成更可读的产品文案。验收标准
为何暂缓
在排查一次真实 push 拒绝时发现(explore)。修复需要先明确支持哪些持仓模式(与 #1022 同一决策面),再改 UTA 报文字段;当前交互线程不拥有该改动。