This commit is contained in:
薇薇安 2026-01-23 20:29:59 +08:00
parent e1c6cc2681
commit 150eea7a28
2 changed files with 52 additions and 6 deletions

View File

@ -524,9 +524,32 @@ async def get_realtime_account_data(account_id: int = 1):
logger.warning(f" ⚠ 断开连接时出错: {e}")
# 构建返回结果
# 注意:币安合约账户的余额字段(根据官方文档):
# - walletBalance: 钱包余额(不包括未实现盈亏,只反映已实现的盈亏、转账、手续费等)
# - marginBalance: 保证金余额(钱包余额 + 未实现盈亏),这是账户的总权益,用户看到的"总余额"
# - availableBalance: 可用余额(可用于开仓的余额)
# 这里使用 marginBalance 作为 total_balance因为这才是用户看到的"总余额"(包括未实现盈亏)
wallet_balance = balance.get('walletBalance') if balance and 'walletBalance' in balance else balance.get('total', 0) if balance else 0
available_balance = balance.get('availableBalance') if balance and 'availableBalance' in balance else balance.get('available', 0) if balance else 0
margin_balance = balance.get('marginBalance') if balance and 'marginBalance' in balance else balance.get('margin', 0) if balance else 0
unrealized_profit = balance.get('unrealizedProfit', 0) if balance else 0
# 如果没有 marginBalance尝试从 total 字段获取(向后兼容)
if margin_balance == 0 and balance and 'total' in balance:
margin_balance = balance.get('total', 0)
logger.info(f"构建返回结果:")
logger.info(f" - wallet_balance (钱包余额,不包括未实现盈亏): {wallet_balance}")
logger.info(f" - margin_balance (保证金余额,总权益,包括未实现盈亏): {margin_balance}")
logger.info(f" - available_balance (可用余额): {available_balance}")
logger.info(f" - unrealized_profit (未实现盈亏): {unrealized_profit}")
result = {
"total_balance": balance.get('total', 0) if balance else 0,
"available_balance": balance.get('available', 0) if balance else 0,
"total_balance": margin_balance, # 使用保证金余额作为总余额(包括未实现盈亏),这是用户看到的"总余额"
"available_balance": available_balance,
"margin_balance": margin_balance, # 添加保证金余额字段
"wallet_balance": wallet_balance, # 添加钱包余额字段(不包括未实现盈亏)
"unrealized_profit": unrealized_profit, # 添加未实现盈亏字段
# 名义仓位(按标记价汇总)
"total_position_value": total_position_value,
# 保证金占用(名义/杠杆汇总)

View File

@ -543,7 +543,7 @@ class BinanceClient:
获取U本位合约账户余额
Returns:
账户余额字典 {'available': 可用余额, 'total': 总余额}
账户余额字典 {'available': 可用余额, 'total': 总余额, 'margin': 保证金余额}
"""
try:
account = await self.client.futures_account()
@ -551,12 +551,35 @@ class BinanceClient:
usdt_asset = next((a for a in assets if a['asset'] == 'USDT'), None)
if usdt_asset:
# 币安合约账户字段说明(根据官方文档):
# - walletBalance: 钱包余额(不包括未实现盈亏,只反映已实现的盈亏、转账、手续费等)
# - marginBalance: 保证金余额(钱包余额 + 未实现盈亏),这是账户的总权益,用户看到的"总余额"
# - availableBalance: 可用余额(可用于开仓的余额 = 钱包余额 - 初始保证金 + 未实现盈亏)
wallet_balance = float(usdt_asset.get('walletBalance', 0))
available_balance = float(usdt_asset.get('availableBalance', 0))
margin_balance = float(usdt_asset.get('marginBalance', 0))
unrealized_profit = float(usdt_asset.get('unrealizedProfit', 0))
# 记录所有字段以便调试
logger.info(f"币安合约账户余额详情 (USDT):")
logger.info(f" - walletBalance (钱包余额,不包括未实现盈亏): {wallet_balance}")
logger.info(f" - marginBalance (保证金余额,总权益,包括未实现盈亏): {margin_balance}")
logger.info(f" - availableBalance (可用余额): {available_balance}")
logger.info(f" - unrealizedProfit (未实现盈亏): {unrealized_profit}")
logger.info(f" - 验证: marginBalance ({margin_balance}) = walletBalance ({wallet_balance}) + unrealizedProfit ({unrealized_profit}) = {wallet_balance + unrealized_profit}")
return {
'ok': True,
'available': float(usdt_asset['availableBalance']),
'total': float(usdt_asset['walletBalance']),
'margin': float(usdt_asset['marginBalance'])
'available': available_balance,
'total': margin_balance, # 使用保证金余额作为总余额(包括未实现盈亏),这是用户看到的"总余额"
'margin': margin_balance,
# 添加原始字段以便调试
'walletBalance': wallet_balance,
'availableBalance': available_balance,
'marginBalance': margin_balance,
'unrealizedProfit': unrealized_profit
}
logger.warning("币安账户中没有找到 USDT 资产")
return {'ok': True, 'available': 0.0, 'total': 0.0, 'margin': 0.0}
except BinanceAPIException as e:
error_code = e.code if hasattr(e, 'code') else None