# Получить торговую статистику аккаунта трейдера

`GET /accounts/{accountId}/stats`

Агрегирует по закрытым позициям аккаунта: доля выигрышей, средняя прибыль и убыток, соотношение риска и вознаграждения, максимальная просадка и среднее время удержания.

- Отвечает пустым телом, пока у аккаунта ещё нет закрытых позиций.
- Охватывает каждую фазу, через которую прошёл аккаунт, а не только текущую.

<a id="authorization"></a>

## Авторизация

bearer: http · bearer (обязательно). Персональный API-ключ с префиксом `usk_`.

<a id="parameters"></a>

## Параметры

- path: accountId (string · uuid; обязательно). Идентификатор торгового аккаунта. Должен принадлежать вызывающей стороне.

Тип: string · uuid

format: uuid

<a id="example-curl"></a>

## Пример · cURL

```bash
curl --request GET 'https://api.upscale.trade/accounts/{accountId}/stats' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer YOUR_API_KEY'
```

<a id="example-javascript"></a>

## Пример · JavaScript

```javascript
const response = await fetch("https://api.upscale.trade/accounts/{accountId}/stats", {
  method: "GET",
  headers: {
    "Accept": "application/json",
    "Authorization": "Bearer YOUR_API_KEY"
  },
});
console.log(response.status, await response.text());
```

<a id="example-python"></a>

## Пример · Python

```python
import requests

response = requests.request(
    "GET",
    "https://api.upscale.trade/accounts/{accountId}/stats",
    headers={"Accept":"application/json","Authorization":"Bearer YOUR_API_KEY"},
    timeout=30,
)
print(response.status_code, response.text)
```

<a id="response-200-accounttradingstatsresponse"></a>

## Ответ 200 · AccountTradingStatsResponse

**200** application/json — Ответ

Body.riskRewardRatio must be array Body.maxDrawdownPercent must be array Body.avgLeverageProfitablePosition must be array

Схема: AccountTradingStatsResponse

Тип: object

Обязательные поля: sumPnl, sumFee, sumFunding, profit, positionsCount, profitablePositionsCount, unprofitablePositionsCount, winratePercent, minProfit, minLoss, maxProfit, maxLoss, avgProfit, avgLoss, riskRewardRatio, maxDrawdownPercent, avgLongPositionHoldTime, avgShortPositionHoldTime, avgPositionHoldTime, medianPositionHoldTime, maxProfitablePositionHoldTime, maxUnprofitablePositionHoldTime, medianProfitablePositionHoldTime, medianUnprofitablePositionHoldTime, avgLeverageProfitablePosition, avgLeverageUnprofitablePosition, topMarket, topMarketPercent

Типы обязательных полей: sumPnl (string · int32; обязательно), sumFee (string · int32; обязательно), sumFunding (string · int32; обязательно), profit (string · int32; обязательно), positionsCount (number; обязательно), profitablePositionsCount (number; обязательно), unprofitablePositionsCount (number; обязательно), winratePercent (number; обязательно), minProfit (string · int32 · nullable; обязательно), minLoss (string · int32 · nullable; обязательно), maxProfit (string · int32 · nullable; обязательно), maxLoss (string · int32 · nullable; обязательно), avgProfit (string · int32 · nullable; обязательно), avgLoss (string · int32 · nullable; обязательно), riskRewardRatio (number[]; обязательно), maxDrawdownPercent (number[]; обязательно), avgLongPositionHoldTime (number[]; обязательно), avgShortPositionHoldTime (number[]; обязательно), avgPositionHoldTime (number[]; обязательно), medianPositionHoldTime (number[]; обязательно), maxProfitablePositionHoldTime (number[]; обязательно), maxUnprofitablePositionHoldTime (number[]; обязательно), medianProfitablePositionHoldTime (number[]; обязательно), medianUnprofitablePositionHoldTime (number[]; обязательно), avgLeverageProfitablePosition (number[]; обязательно), avgLeverageUnprofitablePosition (number[]; обязательно), topMarket (string[]; обязательно), topMarketPercent (number[]; обязательно)

- sumPnl (string · int32; обязательно)

sumPnl пример: 1000000000

sumPnl.Тип: string · int32

sumPnl.Реализованный PnL, суммированный по всем закрытым позициям, fp9 в сыром виде, до комиссий и финансирования.

sumPnl.format: int32

sumPnl.pattern: ^(?:-?[1-9][0-9]*|0)$

- sumFee (string · int32; обязательно)

sumFee пример: 1000000000

sumFee.Тип: string · int32

sumFee.Торговые комиссии, уплаченные по всем закрытым позициям, fp9 в сыром виде.

sumFee.format: int32

sumFee.pattern: ^(?:-?[1-9][0-9]*|0)$

- sumFunding (string · int32; обязательно)

sumFunding пример: 1000000000

sumFunding.Тип: string · int32

sumFunding.Финансирование, рассчитанное по всем закрытым позициям, fp9 в сыром виде. Положительное, когда аккаунт получил больше, чем заплатил.

sumFunding.format: int32

sumFunding.pattern: ^(?:-?[1-9][0-9]*|0)$

- profit (string · int32; обязательно)

profit пример: 1000000000

profit.Тип: string · int32

profit.Чистый результат закрытых позиций, fp9 в необработанном виде: pnl минус комиссии плюс финансирование. Именно по этому разбивается процент выигрышей.

profit.format: int32

profit.pattern: ^(?:-?[1-9][0-9]*|0)$

- positionsCount (number; обязательно)

positionsCount пример: 0

positionsCount.Тип: number

positionsCount.Количество закрытых позиций, на основе которых построена статистика.

- profitablePositionsCount (number; обязательно)

profitablePositionsCount пример: 0

profitablePositionsCount.Тип: number

profitablePositionsCount.Закрытые позиции, завершившиеся на уровне безубыточности или выше.

- unprofitablePositionsCount (number; обязательно)

unprofitablePositionsCount пример: 0

unprofitablePositionsCount.Тип: number

unprofitablePositionsCount.Закрытые позиции, которые завершились ниже точки безубыточности.

- winratePercent (number; обязательно)

winratePercent пример: 62.5

winratePercent.Тип: number

winratePercent.Доля закрытых позиций, которые завершились на уровне точки безубыточности или выше, в процентах с двумя десятичными знаками.

- minProfit (string · int32 · nullable; обязательно)

minProfit пример: 1000000000

minProfit.Тип: string · int32 · nullable

minProfit.Наименьшая прибыль среди прибыльных позиций, fp9 в исходном виде. Null, когда таковых нет.

minProfit.format: int32

minProfit.pattern: ^(?:-?[1-9][0-9]*|0)$

- minLoss (string · int32 · nullable; обязательно)

minLoss пример: 1000000000

minLoss.Тип: string · int32 · nullable

minLoss.Наименьший убыток среди убыточных позиций, fp9 в исходном виде (отрицательный, ближайший к нулю). Null, когда таковых нет.

minLoss.format: int32

minLoss.pattern: ^(?:-?[1-9][0-9]*|0)$

- maxProfit (string · int32 · nullable; обязательно)

maxProfit пример: 1000000000

maxProfit.Тип: string · int32 · nullable

maxProfit.Наибольшая прибыль, fp9 в исходном виде. Null, когда ни одна позиция не завершилась с прибылью.

maxProfit.format: int32

maxProfit.pattern: ^(?:-?[1-9][0-9]*|0)$

- maxLoss (string · int32 · nullable; обязательно)

maxLoss пример: 1000000000

maxLoss.Тип: string · int32 · nullable

maxLoss.Наибольший убыток, fp9 в исходном виде (самое отрицательное значение). Null, когда ни одна позиция не завершилась с убытком.

maxLoss.format: int32

maxLoss.pattern: ^(?:-?[1-9][0-9]*|0)$

- avgProfit (string · int32 · nullable; обязательно)

avgProfit пример: 1000000000

avgProfit.Тип: string · int32 · nullable

avgProfit.Средняя прибыль по прибыльным позициям, fp9 в исходном виде. Null, когда таковых нет.

avgProfit.format: int32

avgProfit.pattern: ^(?:-?[1-9][0-9]*|0)$

- avgLoss (string · int32 · nullable; обязательно)

avgLoss пример: 1000000000

avgLoss.Тип: string · int32 · nullable

avgLoss.Средний убыток по убыточным позициям, fp9 в сыром виде (отрицательный). Null, если таковых нет.

avgLoss.format: int32

avgLoss.pattern: ^(?:-?[1-9][0-9]*|0)$

- riskRewardRatio (number[]; обязательно)

riskRewardRatio.Тип: number[]

riskRewardRatio.Средний выигрыш к абсолютному среднему убытку. Null, пока не существует убыточной позиции, на которую можно разделить.

riskRewardRatio.[]Тип: number

- maxDrawdownPercent (number[]; обязательно)

maxDrawdownPercent.Тип: number[]

maxDrawdownPercent.Самая глубокая просадка капитала счёта по всем его фазам, в процентах с двумя знаками после запятой.

maxDrawdownPercent.[]Тип: number

- avgLongPositionHoldTime (number[]; обязательно)

avgLongPositionHoldTime пример: [
  0
]

avgLongPositionHoldTime.Тип: number[]

avgLongPositionHoldTime.Среднее время удержания длинных позиций, в секундах.

avgLongPositionHoldTime.[]Тип: number

- avgShortPositionHoldTime (number[]; обязательно)

avgShortPositionHoldTime пример: [
  0
]

avgShortPositionHoldTime.Тип: number[]

avgShortPositionHoldTime.Среднее время удержания коротких позиций, в секундах.

avgShortPositionHoldTime.[]Тип: number

- avgPositionHoldTime (number[]; обязательно)

avgPositionHoldTime пример: [
  0
]

avgPositionHoldTime.Тип: number[]

avgPositionHoldTime.Среднее время удержания по всем закрытым позициям, в секундах.

avgPositionHoldTime.[]Тип: number

- medianPositionHoldTime (number[]; обязательно)

medianPositionHoldTime пример: [
  0
]

medianPositionHoldTime.Тип: number[]

medianPositionHoldTime.Медианное время удержания по всем закрытым позициям, в секундах.

medianPositionHoldTime.[]Тип: number

- maxProfitablePositionHoldTime (number[]; обязательно)

maxProfitablePositionHoldTime пример: [
  0
]

maxProfitablePositionHoldTime.Тип: number[]

maxProfitablePositionHoldTime.Самое длительное время удержания прибыльной позиции, в секундах.

maxProfitablePositionHoldTime.[]Тип: number

- maxUnprofitablePositionHoldTime (number[]; обязательно)

maxUnprofitablePositionHoldTime пример: [
  0
]

maxUnprofitablePositionHoldTime.Тип: number[]

maxUnprofitablePositionHoldTime.Самое длительное время удержания убыточной позиции, в секундах.

maxUnprofitablePositionHoldTime.[]Тип: number

- medianProfitablePositionHoldTime (number[]; обязательно)

medianProfitablePositionHoldTime пример: [
  0
]

medianProfitablePositionHoldTime.Тип: number[]

medianProfitablePositionHoldTime.Медианное время удержания прибыльных позиций, в секундах.

medianProfitablePositionHoldTime.[]Тип: number

- medianUnprofitablePositionHoldTime (number[]; обязательно)

medianUnprofitablePositionHoldTime пример: [
  0
]

medianUnprofitablePositionHoldTime.Тип: number[]

medianUnprofitablePositionHoldTime.Медианное время удержания убыточных позиций, в секундах.

medianUnprofitablePositionHoldTime.[]Тип: number

- avgLeverageProfitablePosition (number[]; обязательно)

avgLeverageProfitablePosition.Тип: number[]

avgLeverageProfitablePosition.Среднее кредитное плечо прибыльных позиций — отношение номинальной стоимости к марже, в виде простого множителя.

avgLeverageProfitablePosition.[]Тип: number

- avgLeverageUnprofitablePosition (number[]; обязательно)

avgLeverageUnprofitablePosition.Тип: number[]

avgLeverageUnprofitablePosition.Среднее кредитное плечо убыточных позиций — отношение номинальной стоимости к марже, в виде простого множителя.

avgLeverageUnprofitablePosition.[]Тип: number

- topMarket (string[]; обязательно)

topMarket.Тип: string[]

topMarket.Тикер базового актива самого торгуемого рынка по количеству закрытых позиций. Null, когда ничего не было закрыто.

topMarket.[]Тип: string

- topMarketPercent (number[]; обязательно)

topMarketPercent.Тип: number[]

topMarketPercent.Доля закрытых позиций, которые были на `topMarket`, в процентах с двумя десятичными знаками.

topMarketPercent.[]Тип: number

<a id="response-401"></a>

## Ответ 401

**401**  — Неавторизовано

<a id="response-403"></a>

## Ответ 403

**403**  — Аккаунт принадлежит другому пользователю (`account_access_denied`), или запрос аутентифицирован с помощью API-ключа, тогда как `api_trading` отключён на аккаунте (`api_trading_not_enabled`).

<a id="response-404"></a>

## Ответ 404

**404**  — Нет аккаунта с этим идентификатором.

<a id="response-429"></a>

## Ответ 429

**429**  — Превышен лимит частоты запросов API-ключа (`api_key_rate_limit_exceeded`). `Retry-After` указывает, когда вернуться; тело содержит бакет (`read` / `write`), окно, которое сработало, его лимит и `retryAt`.