Account
exchange.GetAccount()
获取账户资产信息。
语法
python
account = exchange.GetAccount()返回值
返回一个字典,包含以下字段:
| 字段 | 类型 | 说明 | 现货 | 期货/合约 |
|---|---|---|---|---|
| Balance | float | 可用余额(计价货币,如 USDT) | ✅ | ✅ |
| FrozenBalance | float | 冻结余额(挂单占用) | ✅ | ✅ |
| Stocks | float | 可用币数量(基础货币,如 BTC) | ✅ | 0 |
| FrozenStocks | float | 冻结币数量 | ✅ | 0 |
| Equity | float | 账户权益(Balance + 未实现盈亏) | 0 | ✅ |
| UPnL | float | 未实现盈亏 | 0 | ✅ |
| Info | object | 交易所原始响应数据(完整JSON) | ✅ | ✅ |
字段说明
现货交易
- Balance: USDT等计价货币的可用余额
- FrozenBalance: 挂单占用的USDT
- Stocks: BTC等基础货币的可用数量
- FrozenStocks: 挂单占用的BTC数量
- Equity: 始终为 0
- UPnL: 始终为 0
期货/合约交易
- Balance: 可用保证金(USDT)
- FrozenBalance: 挂单占用的保证金
- Equity: 账户权益 = Balance + 未实现盈亏(包含所有持仓的浮动盈亏)
- UPnL: 未实现盈亏(所有持仓的浮动盈亏总和)
- Stocks: 通常为 0(期货不持有实际币)
- FrozenStocks: 通常为 0
Info 字段
包含交易所返回的完整原始数据(JSON对象),不同交易所格式可能不同。可用于获取更详细的账户信息。
示例
基础用法
python
account = exchange.GetAccount()
# 现货账户
Log("可用余额(USDT):", account['Balance'])
Log("冻结余额(USDT):", account['FrozenBalance'])
Log("可用币量(BTC):", account['Stocks'])
Log("冻结币量(BTC):", account['FrozenStocks'])
# 期货账户
Log("账户权益:", account['Equity'])
Log("未实现盈亏:", account['UPnL'])
Log("可用保证金:", account['Balance'])
# 原始数据
Log("交易所原始数据:", account['Info'])期货账户 - 计算总资产
python
def get_futures_total_assets():
"""获取期货账户总资产(Equity = Balance + 未实现盈亏)"""
account = exchange.GetAccount()
equity = account['Equity'] # 账户权益
balance = account['Balance'] # 可用保证金
frozen = account['FrozenBalance'] # 冻结保证金
upnl = account['UPnL'] # 未实现盈亏
Log(f"账户权益: {equity:.2f} USDT")
Log(f"可用保证金: {balance:.2f} USDT")
Log(f"冻结保证金: {frozen:.2f} USDT")
Log(f"未实现盈亏: {upnl:.2f} USDT")
# 验证公式
assert abs(equity - (balance + upnl)) < 0.01, "权益计算不匹配"
return equity
total = get_futures_total_assets()现货账户 - 计算总价值
python
def calculate_spot_total_value():
"""计算现货账户总价值(以USDT计)"""
account = exchange.GetAccount()
ticker = exchange.GetTicker()
# 计价货币总额
total_balance = account['Balance'] + account['FrozenBalance']
# 基础货币总额(转换为USDT)
total_stocks = account['Stocks'] + account['FrozenStocks']
stocks_value = total_stocks * ticker['Last']
# 总价值
total_value = total_balance + stocks_value
Log(f"USDT总额: {total_balance:.2f}")
Log(f"BTC总量: {total_stocks:.6f} (价值: {stocks_value:.2f} USDT)")
Log(f"账户总价值: {total_value:.2f} USDT")
return total_value
total = calculate_spot_total_value()检查余额是否充足
python
def check_balance(required_usdt, required_btc=0):
"""检查余额是否充足"""
account = exchange.GetAccount()
if account['Balance'] < required_usdt:
Log(f"USDT余额不足: 需要 {required_usdt}, 可用 {account['Balance']}")
return False
if account['Stocks'] < required_btc:
Log(f"BTC余额不足: 需要 {required_btc}, 可用 {account['Stocks']}")
return False
return True
# 下单前检查
if check_balance(required_usdt=1000):
exchange.Buy(50000, 0.02)
else:
Log("余额不足,无法下单")期货 - 监控盈亏和风险
python
def monitor_futures_risk():
"""监控期货账户风险"""
account = exchange.GetAccount()
positions = exchange.GetPosition()
equity = account['Equity']
upnl = account['UPnL']
margin_used = account['FrozenBalance']
# 计算盈亏率
if equity > 0:
pnl_rate = (upnl / equity) * 100
Log(f"当前盈亏率: {pnl_rate:.2f}%")
# 风险预警
if pnl_rate < -10:
Log("⚠️ 警告:浮亏超过10%", "#ff0000")
elif pnl_rate > 20:
Log("💰 盈利超过20%,考虑止盈", "#00ff00")
# 计算保证金使用率
if equity > 0:
margin_ratio = (margin_used / equity) * 100
Log(f"保证金使用率: {margin_ratio:.2f}%")
if margin_ratio > 80:
Log("⚠️ 保证金使用率过高,注意爆仓风险", "#ff0000")
# 显示持仓详情
for pos in positions:
Log(f"持仓: {pos['Type']} {pos['Amount']} @ {pos['Price']}, 盈亏: {pos['Profit']}")
monitor_futures_risk()计算资金使用率
python
def calculate_usage_ratio():
"""计算资金使用率"""
account = exchange.GetAccount()
# USDT使用率
total_usdt = account['Balance'] + account['FrozenBalance']
if total_usdt > 0:
usdt_usage = (account['FrozenBalance'] / total_usdt) * 100
Log(f"USDT使用率: {usdt_usage:.2f}%")
# BTC使用率(仅现货)
total_btc = account['Stocks'] + account['FrozenStocks']
if total_btc > 0:
btc_usage = (account['FrozenStocks'] / total_btc) * 100
Log(f"BTC使用率: {btc_usage:.2f}%")
calculate_usage_ratio()获取原始交易所数据
python
account = exchange.GetAccount()
# 查看原始数据结构
import json
Log("原始数据:", json.dumps(account['Info'], indent=2))
# 访问特定字段(不同交易所格式可能不同)
if 'totalMarginBalance' in account['Info']:
Log("币安总保证金余额:", account['Info']['totalMarginBalance'])注意事项
- 数据实时性:账户数据会随订单成交、充提币等操作实时变化
- 冻结资金:挂单时资金会被冻结,取消订单后解冻
- 网络延迟:账户数据可能有轻微延迟(通常小于1秒)
- 精度问题:余额可能包含很多小数位,显示时注意格式化
- 期货 vs 现货:
- 期货账户的
Equity字段最重要,代表真实资产 - 现货账户需要自行计算总价值(Balance + Stocks × 价格)
- 期货账户的
python
try:
account = exchange.GetAccount()
Log(f"余额: {account['Balance']:.2f}") # 格式化为2位小数
except Exception as e:
Log("获取账户失败:", str(e))相关方法
- GetPosition - 获取持仓信息(合约)
- Buy - 买入下单
- Sell - 卖出下单
- GetOrders - 获取未完成订单