> ## Documentation Index
> Fetch the complete documentation index at: https://docs.solanatracker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Cómo se calcula el PnL de wallets Solana

> Entiende la cobertura, los modos de cálculo, las monedas, la paginación y las identidades de PnL V2.

PnL V2 calcula rendimientos a partir de trades indexados en Solana. Para comparar wallets, mantén el mismo modo de cálculo, moneda y periodo.

<Info>
  **URL base:** `https://data.solanatracker.io`\
  **Auth:** Pasa tu clave de API en la cabecera `x-api-key`.\
  **Valores:** Todos los importes monetarios son USD. Los timestamps son milisegundos Unix salvo que se indique lo contrario.
</Info>

<a id="essentials" />

## Esenciales

### Qué incluye PnL V2

* **Cobertura de tokens.** Cada token SPL es soportado **excepto las stablecoins y SOL**.
* **Endpoints de wallet.** Usa los endpoints de wallet para cualquier wallet, incluso si no está en un leaderboard.
* **Etiquetas de identidad.** Las wallets pueden incluir un objeto `identity` con etiquetas como KOL, bot, exchange, pool, developer o plataforma de trading.

### Qué excluye PnL V2

Las stablecoins y SOL se excluyen intencionalmente de las posiciones de PnL porque son activos de cotización. Un activo de cotización es el token usado para fijar el precio de una operación, no la posición que se mide.

Las wallets de arbitraje se excluyen por defecto con `excludeArbitrage=true`. El PnL de arbitraje puede ser ruidoso porque esas wallets a menudo operan por diferencias minúsculas entre pools. Pasa `excludeArbitrage=false` para incluirlas.

El leaderboard de top traders cubre las **top 500k wallets** por periodo. Si una wallet está fuera de ese conjunto rankeado, consúltala directamente con los endpoints de wallet.

### Etiquetas de identidad

Cada wallet puede llevar un `identity` estructurado. Hoy se soportan:

* **Bots y MEV** — `potential_bot` (heurística), `bot` (bots con nombre, curados, como Mayhem Bot) y `arbitrage` (MEV confirmado).
* **Plataformas** — `axiom`, `bloom` y `photon`. La API también acepta `axiom-flash` como alias de `axiom`.
* **Etiquetas de seguridad / infraestructura** — `hacker`, `spam_dusting` y `exchange` curadas cuando se conocen.
* Los roles **pool y developer** se resuelven automáticamente en endpoints con scope de token.

### Modos de PnL

Los endpoints de resumen de wallet, posiciones, posición individual, leaderboard de top traders y batch de posiciones aceptan `?pnlMode=`.

| Modo | Comportamiento |
| - | - |
| `strict` (por defecto) | Excluye posiciones con más tokens vendidos que comprados en el historial registrado. |
| `adjusted` | Mantiene esas posiciones pero recalcula el PnL realizado con un cost basis ajustado. Útil cuando strict oculta posiciones que sí quieres mostrar. |
| `raw` | Sin filtrado. El PnL realizado se devuelve exactamente como se calculó. Úsalo cuando necesites los números sin filtrar. |

Los endpoints que aceptan `pnlMode` lo devuelven en la respuesta. `pnl.realized` usa el modo solicitado y `pnl.realizedRaw` conserva el valor original. Cambiar de modo requiere otra petición para recuperar posiciones filtradas.

Los endpoints de leaderboards de KOLs, history, chart, performance, highlights, risk, token-traders, first-buyers y wallet-summary batch no aceptan `pnlMode`; devuelven la vista fija del servidor para ese conjunto de datos.

## Grupos de endpoints

### Endpoints de wallet

| Endpoint | Qué devuelve |
| - | - |
| [GET /v2/pnl/wallets/\{wallet}](/es/data-api/pnl-v2/wallet/get-wallet-summary) | Resumen de PnL, win rate, conteos de tokens |
| [GET /v2/pnl/wallets/\{wallet}/positions](/es/data-api/pnl-v2/wallet/get-wallet-positions) | Todas las posiciones con orden y filtros |
| [GET /v2/pnl/wallets/\{wallet}/tokens/\{token}](/es/data-api/pnl-v2/wallet/get-wallet-token-position) | Detalle de una posición individual |
| [GET /v2/pnl/wallets/\{wallet}/history](/es/data-api/pnl-v2/wallet/get-wallet-pnl-calendar) | Snapshots diarios de PnL |
| [GET /v2/pnl/wallets/\{wallet}/chart](/es/data-api/pnl-v2/wallet/get-wallet-chart) | Puntos de datos del gráfico |
| [GET /v2/pnl/wallets/\{wallet}/performance](/es/data-api/pnl-v2/wallet/get-wallet-performance) | Rachas, drawdown, mejores/peores días |
| [GET /v2/pnl/wallets/\{wallet}/highlights](/es/data-api/pnl-v2/wallet/get-wallet-highlights) | Mayores ganadores, perdedores, flips |
| [GET /v2/pnl/wallets/\{wallet}/risk](/es/data-api/pnl-v2/wallet/get-wallet-risk) | Concentración y exposición abierta |

### Endpoints de token

| Endpoint | Qué devuelve |
| - | - |
| [GET /v2/pnl/tokens/\{token}/traders](/es/data-api/pnl-v2/token/get-token-traders) | Cada wallet que ha operado este token |
| [GET /v2/pnl/tokens/\{token}/first-buyers](/es/data-api/pnl-v2/token/get-token-first-buyers) | Solo los primeros compradores (`sort=first_trade`, `direction=asc`) |

### Endpoints de leaderboard

| Endpoint | Qué devuelve |
| - | - |
| [GET /v2/pnl/leaderboard/kols](/es/data-api/pnl-v2/leaderboard/get-kol-leaderboard) | Rankings de KOLs (all-time) |
| [GET /v2/pnl/leaderboard/kols/period](/es/data-api/pnl-v2/leaderboard/get-kol-leaderboard-for-a-period) | Rankings de KOLs en una ventana de tiempo |
| [GET /v2/pnl/leaderboard/kols/calendar](/es/data-api/pnl-v2/leaderboard/get-kol-calendar) | Rendimiento diario de KOLs durante un mes |
| [GET /v2/pnl/leaderboard/kols/date](/es/data-api/pnl-v2/leaderboard/get-kol-daily-breakdown) | Desglose por KOL para un día |
| [GET /v2/pnl/leaderboard/top](/es/data-api/pnl-v2/leaderboard/solana-traders-leaderboard) | Leaderboard de traders de Solana en una ventana móvil |

### Endpoints batch

| Endpoint | Qué devuelve |
| - | - |
| [POST /v2/pnl/wallets/\{wallet}/positions/batch](/es/data-api/pnl-v2/wallet/get-wallet-batch-positions) | Un wallet → muchos tokens |
| [POST /v2/pnl/tokens/\{token}/positions/batch](/es/data-api/pnl-v2/token/get-token-batch-positions) | Un token → muchas wallets |
| [POST /v2/pnl/positions/batch](/es/data-api/pnl-v2/batch/get-position-batch-lookup) | Cualquier par wallet-token |
| POST /v2/pnl/wallets/batch | Resúmenes de wallet + etiquetas para hasta 100 wallets |

## Conceptos clave

### PnL realizado vs no realizado

<AccordionGroup>
  <Accordion title="PnL realizado">
    Ganancia o pérdida de tokens que has **vendido**. Está asegurado — no cambia.
  </Accordion>

  <Accordion title="PnL no realizado">
    Ganancia o pérdida sobre el papel de tokens que **aún mantienes**. Cambia con cada tick de precio.
  </Accordion>

  <Accordion title="PnL total">
    `realizado + no realizado`. La imagen completa.
  </Accordion>
</AccordionGroup>

### Cobertura de wallets

PnL V2 cubre todas las wallets de Solana desde **diciembre de 2023 en adelante**. Las wallets no se indexan bajo demanda.

### Paginación

Los endpoints de lista usan **paginación por cursor**. Toma `pagination.nextCursor` de la respuesta y pásalo como parámetro de consulta `cursor` para obtener la siguiente página.

```bash theme={null}
# First page
curl "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/positions?limit=50" \
  -H "x-api-key: YOUR_API_KEY"

# Next page (use cursor from previous response)
curl "https://data.solanatracker.io/v2/pnl/wallets/{wallet}/positions?limit=50&cursor=eyJ..." \
  -H "x-api-key: YOUR_API_KEY"
```

### Identidad del wallet

Cada respuesta con scope de wallet incluye un objeto `identity` estructurado. Combina varias fuentes para que una wallet pueda llevar varias etiquetas a la vez (por ejemplo `["kol", "developer", "axiom"]`). Solo se devuelven los campos poblados:

| Etiqueta | Significado |
| - | - |
| `kol` | Wallet de KOL monitorizada. Incluye `name`, `twitter`, `avatar`. |
| `bot` | Bot curado con nombre (por ejemplo, Mayhem Bot). |
| `potential_bot` | Bot detectado heurísticamente — señal más suave. |
| `arbitrage` | Operador MEV / arbitraje confirmado. |
| `hacker` | Etiqueta curada de exploit / wallet de estafa. Incluye `hacker.label`. |
| `spam_dusting` | Etiqueta curada de wallet de spam-dusting. Incluye `spamDusting.label`. |
| `exchange` | Hot wallet conocida de un exchange centralizado. Incluye `exchange.name`. |
| `pool` | La wallet es vault de pool, authority, LP mint o cuenta de bonding curve. Incluye `program` y `poolAddress`. |
| `developer` | La wallet es creador del token, deployer del pool o mint authority. Incluye `via`, `pools`, `creationTx`, `createdAt`. |
| Etiquetas de plataforma | `axiom`, `bloom`, `photon`. `axiom-flash` se acepta como alias de consulta y aparece como `axiom`. |

En endpoints con scope de token (`/tokens/:token/traders`, `/first-buyers`, `/tokens/:token/positions/batch`) los roles `pool` y `developer` se resuelven para el token exacto en el path, así que puedes identificar devs, LPs y snipers en línea sin solicitudes adicionales. Consulta la [guía de Etiquetas de Wallets de Solana](/es/guides/pnl-v2/wallet-tags) para la lista completa de etiquetas soportadas.

### Enriquecimiento en `/tokens/:tokenAddress/holders`

El endpoint clásico de holders acepta un parámetro opcional `?enrich=`:

* `?enrich=identity` — añade identidad pool / developer / plataforma por holder.
* `?enrich=walletPnl` — añade PnL lifetime de la wallet más PnL por token por holder.
* `?enrich=all` — ambos.

Si se omite, el endpoint se comporta exactamente como antes sin trabajo extra.

### En tiempo real vía Datastream

Combina estos endpoints REST con las salas de PnL V2 Datastream para actualizaciones en vivo. Disponible en los planes Premium, Business y Enterprise:

| Sala | Emite | Alcance |
| - | - | - |
| `pnl:{wallet}:{token}` | `tradeUpdate`, `balanceUpdate` | Una posición de token |
| `pnl:{wallet}` | `tradeUpdate`, `balanceUpdate` | Cada token que opera la wallet |
| `pnl:{wallet}:summary` | Resumen total de PnL de la wallet | PnL realizado/no realizado, ROI, conteos, medias y totales de posiciones abiertas agregados |

Patrón típico: llama a `GET /v2/pnl/wallets/:wallet` una vez para sembrar el estado y luego suscríbete a `pnl:{wallet}:summary` para mantenerlo sincronizado.

Para los **ticks de PnL no realizado más rápidos**, combina una sala de PnL con un stream de precios — `price:aggregated:{token}` (multi-pool, recomendado) o `price-by-token:{token}` (pool principal). Las salas de PnL emiten `tradeUpdate` y `balanceUpdate` en cada fill más un `priceUpdate` ocasional con throttle; las salas de precio emiten en cada movimiento del mercado. Walkthrough en la [guía PnL V2 Datastream](/es/guides/datastream-pnl#fastest-live-unrealized-pnl-combining-rooms).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.