跳到主要内容

账户 PnL

返回用户在日期范围内的每日与累计盈亏(PnL)统计。供账户仪表盘的每日与累计 PnL 卡片及概览指标使用。

GET /account/pnl
Authorization: Bearer <token>

请求参数

名称类型必需说明
symbolstring过滤到单个市场(如 BTC-USDT)。缺省时聚合全部市场。
start_datestring下界(含),格式 YYYY-MM-DD(UTC)。
end_datestring上界(含),格式 YYYY-MM-DD(UTC)。
daysint64回看窗口天数,在 start_dateend_date同时提供时生效。只提供两者之一时该日期会被忽略,回退到 days。默认 30

解析顺序:

  1. start_dateend_date 都已设置,使用该显式范围。
  2. 否则(包括只设置了其中一个的情况 —— 那个单独的日期会被忽略),服务端使用 UTC 下的 [today − days, today]。today 始终取 Utc::now().date_naive()

响应

{
"daily": [
{
"date": "2026-05-10",
"realized_pnl": "125.30",
"volume": "10000.00",
"trade_count": 12,
"fees": "5.00"
}
],
"cumulative": {
"total_realized_pnl": "320.50",
"total_unrealized_pnl": "-12.40",
"total_pnl": "308.10",
"total_volume": "85000.00",
"total_trades": 87,
"total_fees": "42.50",
"win_rate": "62.50",
"avg_profit_per_trade": "3.68"
},
"symbol": null
}

窗口内某天没有任何活动时,该天仍会出现在 daily 中,所有数值字段为 0trade_count0。序列在 UTC 下从 start_dateend_date 连续无缺口。

用户在窗口内完全没有成交时,daily 是一串连续的全零行,cumulative 各项均为零。

响应字段

顶层

字段类型说明
dailyDailyPnl[]每个 UTC 日一行,在 start_dateend_date 之间连续。
cumulativeCumulativePnl同一窗口上的聚合统计。
symbolstring | null回显 symbol 请求参数。

DailyPnl

字段类型说明
datestringUTC 日期,格式 YYYY-MM-DD
realized_pnlDecimal当日 realized_pnl_events.realized_pnl 之和(USDT)。
volumeDecimal当日成交名义价值,按用户为 maker 或 taker 的 trades 计算 SUM(price × amount)(USD)。
trade_countint64用户为 maker 或 taker 的 trades 行数。
feesDecimal用户在 trades 上承担的手续费部分(用户为 maker 时取 maker 费,否则取 taker 费),按日求和(USDT)。

CumulativePnl

所有字段覆盖同一窗口 [start_date, end_date](闭区间,UTC)。

字段类型说明
total_realized_pnlDecimal窗口内 realized_pnl_events.realized_pnl 之和。
total_unrealized_pnlDecimal当前所有未平仓位的浮动盈亏,在请求时刻按各 symbol 最新标记价格计算。与日期窗口无关。
total_pnlDecimaltotal_realized_pnl + total_unrealized_pnl
total_volumeDecimal窗口内 trades 上的 SUM(price × amount)
total_tradesint64窗口内用户为 maker 或 taker 的 trades 行数。
total_feesDecimal窗口内用户在 trades 上承担的手续费之和。
win_rateDecimal窗口内 count(realized_pnl_events with realized_pnl > 0) / count(realized_pnl_events) × 100。以百分数返回(如 62.50 表示 62.5%)。窗口内没有平仓时为 0
avg_profit_per_tradeDecimaltotal_realized_pnl / total_tradestotal_trades0 时为 0

错误

HTTPcode场景
400INVALID_START_DATEstart_date 无法按 YYYY-MM-DD 解析。
400INVALID_END_DATEend_date 无法按 YYYY-MM-DD 解析。
500DAILY_TRADE_STATS_FAILED聚合每日成交行时数据库出错。
500DAILY_PNL_FETCH_FAILED聚合每日已实现 PnL 时数据库出错。
500STATS_FETCH_FAILED计算累计成交统计时数据库出错。
500WIN_RATE_FETCH_FAILED计算胜率时数据库出错。

错误响应体:

{ "error": "...", "code": "..." }

注意事项

  • 所有金额均以十进制字符串返回。调用方应使用任意精度算术解析,不要用浮点数。
  • 日边界为 UTC。没有 tz 参数;需要本地时区视图的调用方应在客户端对 daily 行自行聚合。
  • total_unrealized_pnl 依赖 start_date / end_date —— 它始终反映用户当前的未平仓位与最新标记价格。