You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用python-binance获取锁定资产价格?锁定余额显示异常求助

问题描述

以下代码本应返回账户余额列表:

from binance.client import Client

client = Client(api_key, api_secret)
account_balances = client.get_account()["balances"]
wallet_coins = [balance for balance in balances if float(balance['free']) > 0 or float(balance['locked']) > 0]

for coin in wallet_coins:
   asset = coin['asset']
   free_balance = coin['free']
   locked_balance = coin['locked']
   print(f"Asset: {asset}, Free: {free_balance}, Locked: {locked_balance}")

预期结果:所有余额数据准确显示。
实际结果:所有锁定资产的余额显示为0(但币安网页端显示正常):

Asset: LDATOM, Free: 0.12485302, Locked: 0.00000000
Asset: LDSOL, Free: 0.14696155, Locked: 0.00000000
Asset: LDAPT, Free: 0.34394733, Locked: 0.00000000
Asset: LDSUI, Free: 0.63988096, Locked: 0.00000000

求助如何通过python-binance正确获取锁定资产的余额及解决显示异常问题。


解决方案

1. 先修正变量名错误

代码里存在明显的变量名不一致问题:已经定义了account_balances存储账户余额,但列表推导式里误用了未定义的balances,先修正这一点:

wallet_coins = [balance for balance in account_balances if float(balance['free']) > 0 or float(balance['locked']) > 0]

2. 区分普通资产与锁仓类资产

你看到的LD开头的资产是币安的锁仓质押类资产(比如Launchpad锁仓、Staking锁仓),这类资产的余额不在get_account()返回的balances字段中,需要调用专门的接口获取:

获取Staking质押锁仓资产

使用get_staking_product_position()接口获取质押类锁仓资产:

staking_positions = client.get_staking_product_position()
for pos in staking_positions:
    asset = pos['asset']
    locked_amount = pos['amount']
    print(f"质押锁仓资产: {asset}, 锁定金额: {locked_amount}")

获取Launchpad锁仓资产

如果是Launchpad活动的锁仓资产,需要结合get_launchpad_projects()和get_launchpad_user_capital()接口:

# 获取当前Launchpad项目列表
projects = client.get_launchpad_projects()
for project in projects:
    project_id = project['projectId']
    # 获取当前用户该项目的锁仓信息
    user_capital = client.get_launchpad_user_capital(project_id=project_id)
    for capital in user_capital:
        asset = capital['asset']
        locked_amount = capital['lockedAmount']
        print(f"Launchpad锁仓资产: {asset}, 锁定金额: {locked_amount}")

3. 统一获取所有类型资产(含锁仓)

如果需要一次性汇总普通资产、质押锁仓、Launchpad锁仓的所有数据,可以组合多个接口的结果:

# 获取普通账户余额
account_balances = client.get_account()["balances"]
normal_assets = [
    {"类型": "普通资产", "币种": b["asset"], "可用余额": b["free"], "锁定余额": b["locked"]}
    for b in account_balances if float(b["free"]) + float(b["locked"]) > 0
]

# 获取Staking质押锁仓资产
staking_assets = [
    {"类型": "质押锁仓", "币种": p["asset"], "锁定余额": p["amount"]}
    for p in client.get_staking_product_position() if float(p["amount"]) > 0
]

# 获取Launchpad锁仓资产
launchpad_assets = []
for project in client.get_launchpad_projects():
    user_capital = client.get_launchpad_user_capital(project_id=project["projectId"])
    for capital in user_capital:
        if float(capital["lockedAmount"]) > 0:
            launchpad_assets.append({
                "类型": "Launchpad锁仓", 
                "币种": capital["asset"], 
                "锁定余额": capital["lockedAmount"]
            })

# 合并所有资产数据
all_assets = normal_assets + staking_assets + launchpad_assets

# 打印所有资产信息
for asset in all_assets:
    if asset["类型"] == "普通资产":
        print(f"{asset['类型']}: {asset['币种']}, 可用: {asset['可用余额']}, 锁定: {asset['锁定余额']}")
    else:
        print(f"{asset['类型']}: {asset['币种']}, 锁定金额: {asset['锁定余额']}")

4. 锁仓资产的价格获取

锁仓资产(如LDATOM)的价格可以通过其对应基础资产的交易对获取,比如LDATOM对应ATOM,可以查询ATOMUSDT的价格:

def get_asset_price(asset):
    # 去除LD前缀,获取基础币种
    base_asset = asset.replace("LD", "")
    symbol = f"{base_asset}USDT"
    try:
        ticker = client.get_symbol_ticker(symbol=symbol)
        return ticker['price']
    except:
        # 若USDT交易对不存在,可根据需求扩展其他交易对逻辑
        return None

# 示例:获取LDATOM的价格
ldatom_price = get_asset_price("LDATOM")
print(f"LDATOM 当前价格: {ldatom_price} USDT")

内容的提问来源于stack exchange,提问作者Stefan Papp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 02:22:43