账户统计
以单个对象返回用户的全生命周期交易聚合数据。用于替代账户仪表盘 useAccountStats hook 目前依赖的 Subsquid accountStats 查询。
GET /account/stats
Authorization: Bearer <token>
请求参数
| 名称 | 类型 | 必需 | 说明 |
|---|---|---|---|
symbol | string | 否 | 过滤到单个市场。缺省时聚合全部市场。 |
没有日期参数;本端点严格为开户至今(lifetime-to-date)口径。
响应
{
"address": "0xabc...",
"symbol": null,
"closed_count": 87,
"wins": 54,
"losses": 33,
"realized_pnl": "1320.50",
"realized_fees": "215.30",
"volume": "152300.00",
"trade_count": 412,
"net_capital": "1080.00",
"max_capital": null
}
用户从未交易过时,所有数值字段为 0、max_capital 为 null。HTTP 响应为携带这一空数据体的 200 —— 不是 404。
响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
address | string | 来自 bearer token 的钱包地址,已转为小写。 |
symbol | string | null | 回显 symbol 请求参数。 |
closed_count | int64 | 该用户的 realized_pnl_events 行数。 |
wins | int64 | realized_pnl > 0 的 realized_pnl_events 行数。 |
losses | int64 | realized_pnl ≤ 0 的 realized_pnl_events 行数。 |
realized_pnl | Decimal | 全部历史上 realized_pnl_events.realized_pnl 之和(USDT)。 |
realized_fees | Decimal | 全部历史上用户在 trades 上承担的手续费之和(用户为 maker 时取 maker 费,否则取 taker 费)(USDT)。 |
volume | Decimal | 用户为 maker 或 taker 的 trades 上 price × amount 之和(USD)。 |
trade_count | int64 | 上述 trades 行数。 |
net_capital | Decimal | 用户当前未平仓位的 size_in_usd 之和(USD)。反映请求时刻的状态,不是历史聚合值。 |
max_capital | Decimal | null | 用户历史上持有过的峰值抵押。v1:恒为 null。见 v1 简化。 |
v1 简化
- v1 中
max_capital为null。计算真实的历史峰值需要一张我们尚未引入的collateral_snapshots表。客户端应隐藏该行或渲染为—,而不是把null当作0。快照表就绪后,该字段会在不改变响应结构的前提下被填充。
其他结构变化(增加 unrealized_pnl、last_trade_at 等)会走常规的增量式演进;本文档中已有的字段与类型是稳定的。
错误
| HTTP | code | 场景 |
|---|---|---|
| 500 | ACCOUNT_STATS_FAILED | 任一组成查询在数据库聚合时出错。 |
错误响应体:
{ "error": "...", "code": "..." }
注意事项
- 所有金额均以十进制字符串返回。
- 本端点面向账户概览头部及类似的常驻组件。各组成查询通过
tokio::try_join!并发执行。 - 生命周期总量直接从
trades与realized_pnl_events计算。v1 不使用物化汇总表;查询依赖已就位的(user_address)索引。