# Obtener estadísticas de trading de la cuenta del trader

`GET /accounts/{accountId}/stats`

Agregados sobre las posiciones cerradas de la cuenta: tasa de aciertos, beneficio y pérdida promedio, ratio riesgo-beneficio, drawdown máximo y tiempos de tenencia promedio.

- Responde con un cuerpo vacío mientras la cuenta aún no tiene posiciones cerradas.
- Cubre cada fase por la que ha pasado la cuenta, no solo la actual.

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

## Autorización

bearer: http · bearer (obligatorio). Clave de API personal, con el prefijo `usk_`.

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

## Parámetros

- path: accountId (string · uuid; obligatorio). Identificador de la cuenta del trader. Debe pertenecer al solicitante.

Tipo: string · uuid

format: uuid

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

## Ejemplo · 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>

## Ejemplo · 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>

## Ejemplo · 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>

## Respuesta 200 · AccountTradingStatsResponse

**200** application/json — Respuesta

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

Esquema: AccountTradingStatsResponse

Tipo: object

Campos obligatorios: 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

Tipos de campos obligatorios: sumPnl (string · int32; obligatorio), sumFee (string · int32; obligatorio), sumFunding (string · int32; obligatorio), profit (string · int32; obligatorio), positionsCount (number; obligatorio), profitablePositionsCount (number; obligatorio), unprofitablePositionsCount (number; obligatorio), winratePercent (number; obligatorio), minProfit (string · int32 · nullable; obligatorio), minLoss (string · int32 · nullable; obligatorio), maxProfit (string · int32 · nullable; obligatorio), maxLoss (string · int32 · nullable; obligatorio), avgProfit (string · int32 · nullable; obligatorio), avgLoss (string · int32 · nullable; obligatorio), riskRewardRatio (number[]; obligatorio), maxDrawdownPercent (number[]; obligatorio), avgLongPositionHoldTime (number[]; obligatorio), avgShortPositionHoldTime (number[]; obligatorio), avgPositionHoldTime (number[]; obligatorio), medianPositionHoldTime (number[]; obligatorio), maxProfitablePositionHoldTime (number[]; obligatorio), maxUnprofitablePositionHoldTime (number[]; obligatorio), medianProfitablePositionHoldTime (number[]; obligatorio), medianUnprofitablePositionHoldTime (number[]; obligatorio), avgLeverageProfitablePosition (number[]; obligatorio), avgLeverageUnprofitablePosition (number[]; obligatorio), topMarket (string[]; obligatorio), topMarketPercent (number[]; obligatorio)

- sumPnl (string · int32; obligatorio)

sumPnl ejemplo: 1000000000

sumPnl.Tipo: string · int32

sumPnl.pnl realizado sumado sobre cada posición cerrada, fp9 en bruto, antes de comisiones y financiación.

sumPnl.format: int32

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

- sumFee (string · int32; obligatorio)

sumFee ejemplo: 1000000000

sumFee.Tipo: string · int32

sumFee.Comisiones de trading pagadas sobre cada posición cerrada, fp9 en bruto.

sumFee.format: int32

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

- sumFunding (string · int32; obligatorio)

sumFunding ejemplo: 1000000000

sumFunding.Tipo: string · int32

sumFunding.Financiación liquidada sobre cada posición cerrada, fp9 en bruto. Positiva cuando la cuenta recibió más de lo que pagó.

sumFunding.format: int32

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

- profit (string · int32; obligatorio)

profit ejemplo: 1000000000

profit.Tipo: string · int32

profit.Resultado neto de las posiciones cerradas, fp9 en bruto: pnl menos comisiones más financiación. Esto es según lo que se divide la tasa de aciertos.

profit.format: int32

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

- positionsCount (number; obligatorio)

positionsCount ejemplo: 0

positionsCount.Tipo: number

positionsCount.Número de posiciones cerradas a partir de las cuales se construyen las estadísticas.

- profitablePositionsCount (number; obligatorio)

profitablePositionsCount ejemplo: 0

profitablePositionsCount.Tipo: number

profitablePositionsCount.Posiciones cerradas que terminaron en el punto de equilibrio o por encima de él.

- unprofitablePositionsCount (number; obligatorio)

unprofitablePositionsCount ejemplo: 0

unprofitablePositionsCount.Tipo: number

unprofitablePositionsCount.Posiciones cerradas que terminaron por debajo del punto de equilibrio.

- winratePercent (number; obligatorio)

winratePercent ejemplo: 62.5

winratePercent.Tipo: number

winratePercent.Proporción de posiciones cerradas que terminaron en el punto de equilibrio o por encima de él, en porcentaje con dos decimales.

- minProfit (string · int32 · nullable; obligatorio)

minProfit ejemplo: 1000000000

minProfit.Tipo: string · int32 · nullable

minProfit.Ganancia más pequeña entre las posiciones rentables, fp9 en bruto. Nulo cuando no hay ninguna.

minProfit.format: int32

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

- minLoss (string · int32 · nullable; obligatorio)

minLoss ejemplo: 1000000000

minLoss.Tipo: string · int32 · nullable

minLoss.Pérdida más pequeña entre las posiciones perdedoras, fp9 en bruto (negativa, la más cercana a cero). Nulo cuando no hay ninguna.

minLoss.format: int32

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

- maxProfit (string · int32 · nullable; obligatorio)

maxProfit ejemplo: 1000000000

maxProfit.Tipo: string · int32 · nullable

maxProfit.Ganancia más grande, fp9 en bruto. Nulo cuando ninguna posición terminó en ganancia.

maxProfit.format: int32

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

- maxLoss (string · int32 · nullable; obligatorio)

maxLoss ejemplo: 1000000000

maxLoss.Tipo: string · int32 · nullable

maxLoss.Pérdida más grande, fp9 en bruto (el valor más negativo). Nulo cuando ninguna posición terminó en pérdida.

maxLoss.format: int32

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

- avgProfit (string · int32 · nullable; obligatorio)

avgProfit ejemplo: 1000000000

avgProfit.Tipo: string · int32 · nullable

avgProfit.Ganancia promedio entre las posiciones rentables, fp9 en bruto. Nulo cuando no hay ninguna.

avgProfit.format: int32

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

- avgLoss (string · int32 · nullable; obligatorio)

avgLoss ejemplo: 1000000000

avgLoss.Tipo: string · int32 · nullable

avgLoss.Pérdida promedio entre las posiciones perdedoras, fp9 en bruto (negativa). Nulo cuando no hay ninguna.

avgLoss.format: int32

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

- riskRewardRatio (number[]; obligatorio)

riskRewardRatio.Tipo: number[]

riskRewardRatio.Ganancia promedio sobre la pérdida promedio absoluta. Nulo mientras no exista ninguna posición perdedora por la que dividir.

riskRewardRatio.[]Tipo: number

- maxDrawdownPercent (number[]; obligatorio)

maxDrawdownPercent.Tipo: number[]

maxDrawdownPercent.La mayor caída del capital de la cuenta en todas sus fases, en porcentaje con dos decimales.

maxDrawdownPercent.[]Tipo: number

- avgLongPositionHoldTime (number[]; obligatorio)

avgLongPositionHoldTime ejemplo: [
  0
]

avgLongPositionHoldTime.Tipo: number[]

avgLongPositionHoldTime.Tiempo promedio de mantenimiento de las posiciones largas, en segundos.

avgLongPositionHoldTime.[]Tipo: number

- avgShortPositionHoldTime (number[]; obligatorio)

avgShortPositionHoldTime ejemplo: [
  0
]

avgShortPositionHoldTime.Tipo: number[]

avgShortPositionHoldTime.Tiempo promedio de mantenimiento de las posiciones cortas, en segundos.

avgShortPositionHoldTime.[]Tipo: number

- avgPositionHoldTime (number[]; obligatorio)

avgPositionHoldTime ejemplo: [
  0
]

avgPositionHoldTime.Tipo: number[]

avgPositionHoldTime.Tiempo promedio de tenencia en todas las posiciones cerradas, en segundos.

avgPositionHoldTime.[]Tipo: number

- medianPositionHoldTime (number[]; obligatorio)

medianPositionHoldTime ejemplo: [
  0
]

medianPositionHoldTime.Tipo: number[]

medianPositionHoldTime.Mediana del tiempo de tenencia en todas las posiciones cerradas, en segundos.

medianPositionHoldTime.[]Tipo: number

- maxProfitablePositionHoldTime (number[]; obligatorio)

maxProfitablePositionHoldTime ejemplo: [
  0
]

maxProfitablePositionHoldTime.Tipo: number[]

maxProfitablePositionHoldTime.Tiempo máximo que se mantuvo una posición rentable, en segundos.

maxProfitablePositionHoldTime.[]Tipo: number

- maxUnprofitablePositionHoldTime (number[]; obligatorio)

maxUnprofitablePositionHoldTime ejemplo: [
  0
]

maxUnprofitablePositionHoldTime.Tipo: number[]

maxUnprofitablePositionHoldTime.Tiempo máximo que se mantuvo una posición perdedora, en segundos.

maxUnprofitablePositionHoldTime.[]Tipo: number

- medianProfitablePositionHoldTime (number[]; obligatorio)

medianProfitablePositionHoldTime ejemplo: [
  0
]

medianProfitablePositionHoldTime.Tipo: number[]

medianProfitablePositionHoldTime.Mediana del tiempo de tenencia de las posiciones rentables, en segundos.

medianProfitablePositionHoldTime.[]Tipo: number

- medianUnprofitablePositionHoldTime (number[]; obligatorio)

medianUnprofitablePositionHoldTime ejemplo: [
  0
]

medianUnprofitablePositionHoldTime.Tipo: number[]

medianUnprofitablePositionHoldTime.Mediana del tiempo de mantenimiento de las posiciones perdedoras, en segundos.

medianUnprofitablePositionHoldTime.[]Tipo: number

- avgLeverageProfitablePosition (number[]; obligatorio)

avgLeverageProfitablePosition.Tipo: number[]

avgLeverageProfitablePosition.Apalancamiento promedio de las posiciones rentables — nocional sobre margen, como un múltiplo simple.

avgLeverageProfitablePosition.[]Tipo: number

- avgLeverageUnprofitablePosition (number[]; obligatorio)

avgLeverageUnprofitablePosition.Tipo: number[]

avgLeverageUnprofitablePosition.Apalancamiento promedio de las posiciones perdedoras — nocional sobre margen, como un múltiplo simple.

avgLeverageUnprofitablePosition.[]Tipo: number

- topMarket (string[]; obligatorio)

topMarket.Tipo: string[]

topMarket.Ticker del activo base del mercado más negociado, por número de posiciones cerradas. Nulo cuando no se ha cerrado nada.

topMarket.[]Tipo: string

- topMarketPercent (number[]; obligatorio)

topMarketPercent.Tipo: number[]

topMarketPercent.Proporción de posiciones cerradas que estaban en `topMarket`, en porcentaje con dos decimales.

topMarketPercent.[]Tipo: number

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

## Respuesta 401

**401**  — No autorizado

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

## Respuesta 403

**403**  — La cuenta pertenece a otro usuario (`account_access_denied`), o la solicitud se autentica con una clave de API mientras `api_trading` está deshabilitado en la cuenta (`api_trading_not_enabled`).

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

## Respuesta 404

**404**  — No hay ninguna cuenta con este identificador.

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

## Respuesta 429

**429**  — Se superó el límite de velocidad de la clave de API (`api_key_rate_limit_exceeded`). `Retry-After` indica cuándo volver; el cuerpo incluye el bucket (`read` / `write`), la ventana que se activó, su límite y `retryAt`.