使用CCXT在币安期货对冲模式下下单报错-4061如何解决
CCXT对接币安期货对冲模式下单报-4061错误修复方案
问题现象
使用Python+CCXT开发币安期货交易机器人,单向持仓模式下所有功能运行正常,切换至Hedge(对冲)持仓模式后下单触发报错,已尝试公开排查方案未解决。
触发的报错信息:
binance {"code":-4061,"msg":"Order's position side does not match user's setting."}
原有可正常运行的交易所初始化代码:
import ccxt exchange = ccxt.binance({ 'enableRateLimit': True, 'apiKey': '...', 'secret': '...', 'hedgeMode': True, 'options': { 'defaultType': 'future', }, }) exchange.set_sandbox_mode(True) balance = exchange.fetch_balance()
触发异常的下单代码:
symbol = 'ETH/USDT' typee = 'market' side1 = 'buy' side2 = 'sell' amount = 0.1 params = { 'position_side': 'LONG' and 'SHORT' } buy_market_order = exchange.create_order(symbol, typee, side1, amount, params) sell_market_order = exchange.create_order(symbol, typee, side2, amount, params)
错误原因
position_side参数写法完全错误:Python中'LONG' and 'SHORT'是布尔逻辑运算,非空字符串的布尔值为True,该表达式最终返回结果为'SHORT',等于所有下单请求都传了position_side=SHORT,开多单时方向不匹配直接触发校验报错- 多空订单复用同一份参数:币安对冲模式强制要求每笔订单必须传入和开仓方向严格对应的持仓方向,开多对应
LONG、开空对应SHORT,不能共用参数 - 缺少模式生效校验:仅在初始化时配置
hedgeMode=True不代表账户实际已经切换到对冲模式,测试网/正式网配置独立、API权限不足等问题都会导致配置不生效
修复方案
- 初始化后主动设置并校验持仓模式,确保对冲模式确实生效:
# 主动切换到对冲模式 exchange.set_position_mode(hedged=True) # 拉取当前账户持仓模式做校验 current_mode = exchange.fetch_position_mode() # 打印结果为{'hedged': True}才说明配置生效 print(current_mode)
- 修正下单逻辑,多空订单分别传入匹配的持仓方向参数,删除错误的逻辑运算写法:
symbol = 'ETH/USDT' order_type = 'market' amount = 0.1 # 开多:side=buy 对应 position_side=LONG buy_order = exchange.create_order( symbol=symbol, type=order_type, side='buy', amount=amount, params={'position_side': 'LONG'} ) # 开空:side=sell 对应 position_side=SHORT sell_order = exchange.create_order( symbol=symbol, type=order_type, side='sell', amount=amount, params={'position_side': 'SHORT'} )
注意事项
- 对冲模式下平仓也要传对应
position_side:平多单是side='sell' + position_side='LONG',平空单是side='buy' + position_side='SHORT' - 测试网和正式网的持仓模式是独立配置的,切换环境后必须重新校验
- 单向持仓模式不需要传
position_side参数,但对冲模式下该参数为强制必传,漏传、传错都会触发-4061报错
内容的提问来源于stack exchange,提问作者Daanish PM
相关产品推荐
相关产品推荐

