如何通过CCXT获取币安合约持仓代币数量以完成平仓操作
问题:如何通过CCXT获取币安合约的持仓代币数量?
我想通过CCXT获取币安合约中持有的代币数量(用于平仓操作),于是使用了以下代码调用接口:
import ccxt binance = ccxt.binance(config={ 'apiKey': '...', 'secret': '...', 'enableRateLimit': True, 'options': { 'defaultType': 'future', } }) print(binance.fetch_balance()['info']['positions'])
执行后得到的响应结果(截取单条持仓):
{'symbol': 'ZILUSDT', 'initialMargin': '418.22854400', 'maintMargin': '41.82285440', 'unrealizedProfit': '87.68853824', 'positionInitialMargin': '418.22854400', 'openOrderInitialMargin': '0', 'leverage': '10', 'isolated': False, 'entryPrice': '0.0612375840409', 'maxNotional': '100000', 'positionSide': 'BOTH', 'positionAmt': '-69728', 'notional': '-4182.28544000', 'isolatedWallet': '0', 'updateTime': '1642505268697', 'bidNotional': '0', 'askNotional': '0'}
我以为返回结果里没有显示持仓代币数量,请问该如何正确获取?
回答
嘿,其实你要找的持仓数量已经在返回的结果里了!就是那个positionAmt字段:
字段说明
positionAmt的值-69728就是你的持仓代币数量,符号代表仓位方向:- 负数:表示你持有**空单(卖出)**仓位,数值的绝对值就是代币数量
- 正数:表示你持有**多单(买入)**仓位
- 因为你的
positionSide是BOTH(币安双向持仓模式),这个字段会显示多空合并后的净持仓量;如果是单向持仓模式,它直接显示当前的持仓方向和数量。
提取持仓数量的代码示例
你可以这样筛选并提取有效持仓(排除没有持仓的条目):
import ccxt binance = ccxt.binance(config={ 'apiKey': '...', 'secret': '...', 'enableRateLimit': True, 'options': { 'defaultType': 'future', } }) balance = binance.fetch_balance() positions = balance['info']['positions'] # 遍历所有持仓,筛选出有实际持仓的条目 for position in positions: position_amount = float(position['positionAmt']) # 只有持仓量不为0的才是有效持仓 if position_amount != 0: symbol = position['symbol'] # 绝对值是持仓的代币数量,符号代表方向 holding_quantity = abs(position_amount) position_direction = "空单" if position_amount < 0 else "多单" print(f"币种 {symbol}:{position_direction} 持仓数量 {holding_quantity}")
平仓提示
如果你要做平仓操作,需要注意:
- 空单平仓需要做买入操作,数量是
holding_quantity - 多单平仓需要做卖出操作,数量是
holding_quantity - 也可以直接使用CCXT的
create_order方法,指定对应的方向和数量来平仓。
内容的提问来源于stack exchange,提问作者심현규




