Binance API Python下单OTOCO订单:仅需挂单限价单的参数配置及卖单疑问
我来帮你梳理下Binance OTOCO订单的这些问题,结合你的代码和报错来拆解:
1. 为什么必须传pendingAbove/pendingBelow参数?
首先要明确:OTOCO(One-Triggers-OCO)订单的设计本质就是「当working单成交后,自动触发一组OCO挂单」,所以Binance的接口强制要求你必须提供至少一组挂单参数(pendingAboveType|pendingBelowType二选一,或者都传),不能只传working单的参数。
你之前遇到的-1102报错,就是因为接口检测到两组挂单参数都缺失,不符合OTOCO的规则。
如果你确实只需要一个方向的挂单(比如只做止盈,不想设置止损),不用填pendingBelowPrice=0(极端低价可能会有潜在风险),更规范的做法是给不需要的那组挂单设置一个绝对不会触发的合理值:
比如对于BTCUSDT的BUY working单,你可以把pendingBelow的价格设为远低于当前市场价的数值(比如1 USDT),类型设为LIMIT,这样既满足接口的必填要求,又不会意外触发。
修改后的参考参数(只保留止盈的pendingAbove,pendingBelow设为无效值):
params = { "symbol": "BTCUSDT", "isIsolated": "FALSE", "sideEffectType": "MARGIN_BUY", "workingType": "LIMIT", "workingSide": "BUY", "workingPrice": 80000, "workingQuantity": 0.0002, "workingTimeInForce": "GTC", "pendingSide": "SELL", "pendingQuantity": 0.0002, # 保留需要的止盈挂单参数 "pendingAboveType": "LIMIT_MAKER", "pendingAbovePrice": 110000, # 填充无效的止损挂单参数,满足接口规则 "pendingBelowType": "LIMIT", "pendingBelowPrice": 1, # 远低于BTC合理价格,不会触发 "pendingBelowTimeInForce": "GTC", 'timestamp': int(time.time() * 1000), }
2. SELL订单的参数是否需要反向设置?
是的,要根据SELL working单的交易逻辑反向调整挂单方向:
OTOCO的pendingAbove是价格高于workingPrice时触发,pendingBelow是价格低于workingPrice时触发,结合空单的交易逻辑:
- 当你做SELL working单(做空,先卖出开仓):
- 止损需求:价格涨破某个点位时,触发买入平仓 → 对应
pendingAbove参数组 - 止盈需求:价格跌破某个点位时,触发买入平仓 → 对应
pendingBelow参数组
- 止损需求:价格涨破某个点位时,触发买入平仓 → 对应
举个SELL OTOCO的参数示例(只设置止盈):
params = { "symbol": "BTCUSDT", "isIsolated": "FALSE", "sideEffectType": "MARGIN_SELL", "workingType": "LIMIT", "workingSide": "SELL", "workingPrice": 70000, # 比如在70000价位做空 "workingQuantity": 0.0002, "workingTimeInForce": "GTC", "pendingSide": "BUY", "pendingQuantity": 0.0002, # 空单止盈:价格跌到65000时触发买入平仓 "pendingBelowType": "LIMIT_MAKER", "pendingBelowPrice": 65000, # 填充无效的止损参数 "pendingAboveType": "LIMIT", "pendingAbovePrice": 100000, # 远高于当前价格,不会触发 'timestamp': int(time.time() * 1000), }
额外提醒
如果你只是想单独挂一个限价单,不需要触发后续挂单,那OTOCO接口其实不是最适合的选择——直接用普通的margin/order接口下限价单就可以,没必要用OTOCO的复杂联动逻辑。只有当你需要「订单成交后自动触发止盈止损挂单」的链式逻辑时,才需要用到OTOCO。
备注:内容来源于stack exchange,提问作者user2635886

