You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过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就是你的持仓代币数量,符号代表仓位方向
    • 负数:表示你持有**空单(卖出)**仓位,数值的绝对值就是代币数量
    • 正数:表示你持有**多单(买入)**仓位
  • 因为你的positionSideBOTH(币安双向持仓模式),这个字段会显示多空合并后的净持仓量;如果是单向持仓模式,它直接显示当前的持仓方向和数量。

提取持仓数量的代码示例

你可以这样筛选并提取有效持仓(排除没有持仓的条目):

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,提问作者심현규

火山引擎 最新活动