a
This commit is contained in:
parent
e1c6cc2681
commit
150eea7a28
|
|
@ -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,
|
||||
# 保证金占用(名义/杠杆汇总)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user