Referencia de API¶
Conceptos comunes ¶
Volumen, precios, tipos de órdenes y vigencia
Volumen¶
El volumen se especifica en centavos (unidades de 0.0000001 lotes).
| Lotes | Volumen (centavos) |
|---|---|
| 0.01 | 100,000 |
| 0.1 | 1,000,000 |
| 1.0 | 10,000,000 |
Precios¶
Los valores de precio están en pipettes. Para convertir: precio_mostrado = valor_pipette / 10^dígitos_pip
Para EURUSD (5 dígitos), un valor de pipette de 112345 = 1.12345.
Tipos de órdenes¶
| Tipo | Descripción | Campos obligatorios |
|---|---|---|
MARKET | Ejecutar inmediatamente al precio actual | symbolId, tradeSide, volume |
LIMIT | Ejecutar al precio límite o mejor | + limitPrice |
STOP | Activar cuando el mercado alcance el precio de detención | + stopPrice |
MARKET_RANGE | Ejecutar dentro de un rango de precios | + baseSlippagePrice |
STOP_LIMIT | Orden límite activada al precio de detención | + stopPrice, limitPrice |
Vigencia¶
| Política | Descripción |
|---|---|
GOOD_TILL_CANCEL | La orden permanece activa hasta que se ejecute o se cancele |
GOOD_TILL_DATE | La orden vence en el expirationTimestamp especificado |
IMMEDIATE_OR_CANCEL | Ejecutar lo que esté disponible inmediatamente, cancelar el resto |
Información de cuenta ¶
GET /v1/balance Get account balance
Devuelve el saldo de la cuenta, el capital y el margen libre.
Sin parámetros.
200 Respuesta exitosa
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Campo | Tipo | Descripción |
|---|---|---|
balance | double | Saldo de cuenta en moneda de depósito |
equity | double | Saldo + P&L flotante |
freeMargin | double | Margen disponible para nuevas operaciones |
balanceVersion | int64 | Contador de versión de saldo |
moneyDigits | int32 | Decimales para valores monetarios |
depositAssetId | int64 | ID del activo de moneda de depósito |
GET /v1/symbols Obtener símbolos disponibles
Devuelve todos los símbolos disponibles para operar en la cuenta.
Sin parámetros.
200 Array de objetos Symbol
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| Campo | Tipo | Descripción |
|---|---|---|
symbolId | int64 | ID del símbolo (utilizado en otras llamadas de API) |
symbolName | string | Nombre del símbolo (p. ej., "EURUSD") |
enabled | boolean | Si el símbolo es operable |
baseAssetId | int64 | ID del activo base |
quoteAssetId | int64 | ID del activo de cotización |
description | string | Descripción legible |
GET /v1/assets Obtener activos disponibles
Devuelve los activos disponibles (monedas).
Sin parámetros.
200 Array de objetos Asset
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Campo | Tipo | Descripción |
|---|---|---|
assetId | int64 | ID del activo |
name | string | Código del activo (p. ej., "USD") |
displayName | string | Nombre para mostrar |
Datos de mercado ¶
GET /v1/prices Obtener precios al contado
Devuelve los precios de oferta/demanda actuales para los símbolos especificados. Esta es una instantánea: la API no admite transmisión.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
symbolId | query | int64[] | ID de símbolos separados por comas |
200 Array de objetos SpotPrice
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Campo | Tipo | Descripción |
|---|---|---|
symbolId | int64 | ID del símbolo |
bid | int64 | Mejor precio de oferta (pipettes) |
ask | int64 | Mejor precio de demanda (pipettes) |
high | int64 | Máximo de la sesión (pipettes) |
low | int64 | Mínimo de la sesión (pipettes) |
sessionClose | int64 | Cierre de la sesión anterior (pipettes) |
timestamp | int64 | Marca de tiempo de la cotización (epoch ms) |
GET /v1/trendbars Obtener datos históricos OHLCV
Devuelve datos históricos de velas (OHLCV) para un símbolo.
| Nombre | Ubicado en | Tipo | Obligatorio | Configuración predeterminada | Descripción |
|---|---|---|---|---|---|
symbolId | query | int64 | – | ID del símbolo | |
period | query | string | – | Período de barra | |
fromTimestamp | query | string | – | Hora de inicio (ISO-8601) | |
toTimestamp | query | string | – | Hora de finalización (ISO-8601) | |
count | query | int32 | 100 | Máximo de barras a devolver |
Períodos disponibles
M_1 M_2 M_3 M_4 M_5 M_10 M_15 M_30 H_1 H_2 H_3 H_4 H_6 H_8 H_12 D_1 W_1 MN_1
200 Array de objetos Trendbar
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | int64 | Hora de apertura de la barra (epoch ms) |
open | double | Precio de apertura (pipettes) |
high | double | Precio máximo (pipettes) |
low | double | Precio mínimo (pipettes) |
close | double | Precio de cierre (pipettes) |
volume | int64 | Volumen del tic |
Órdenes ¶
POST /v1/orders Colocar una nueva orden
Coloca una nueva orden de operaciones. Devuelve un ExecutionResponse.
Sin parámetros de ruta o consulta.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
symbolId | int64 | Símbolo a operar | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY o SELL | |
volume | int64 | Volumen en centavos | |
limitPrice | double | Precio límite: requerido para LIMIT, STOP_LIMIT | |
stopPrice | double | Precio de activación del stop: requerido para STOP, STOP_LIMIT | |
stopLoss | double | Precio de stop loss | |
takeProfit | double | Precio de take profit | |
comment | string | Comentario de texto libre (máx. 256 caracteres) | |
label | string | Etiqueta de bot (máx. 100 caracteres) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Precio base para el deslizamiento: requerido para MARKET_RANGE | |
slippageInPoints | int32 | Deslizamiento máximo en puntos | |
expirationTimestamp | int64 | Marca de tiempo de vencimiento (epoch ms): para GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse: orden aceptada o ejecutada
400 INVALID_REQUEST o TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders Obtener órdenes pendientes
Devuelve todas las órdenes pendientes (no ejecutadas).
Sin parámetros.
200 Matriz de objetos Order pendientes
PUT /v1/orders/{orderId} Modificar una orden pendiente
Modifica una orden pendiente existente. Devuelve un ExecutionResponse.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
orderId | ruta | int64 | La orden a modificar |
Cualquier subconjunto de los siguientes campos.
| Campo | Tipo | Descripción |
|---|---|---|
volume | int64 | Nuevo volumen en centavos |
limitPrice | double | Nuevo precio límite |
stopPrice | double | Nuevo precio de stop |
stopLoss | double | Nuevo precio de stop loss |
takeProfit | double | Nuevo precio de take profit |
expirationTimestamp | int64 | Nueva marca de tiempo de vencimiento (epoch ms) |
200 ExecutionResponse con ORDER_REPLACED
404 Orden no encontrada
DELETE /v1/orders/{orderId} Cancelar una orden pendiente
Cancela una orden pendiente. Devuelve un ExecutionResponse.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
orderId | ruta | int64 | La orden a cancelar |
200 ExecutionResponse con ORDER_CANCELLED
404 Orden no encontrada
GET /v1/orders/history Obtener historial de órdenes
Devuelve órdenes históricas dentro de un rango de tiempo.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
fromTimestamp | query | string | Hora de inicio (ISO-8601) | |
toTimestamp | query | string | Hora de finalización (ISO-8601) |
200 OrderListResponse
| Campo | Tipo | Descripción |
|---|---|---|
orders | Order[] | Matriz de órdenes históricas |
hasMore | boolean | Si hay páginas adicionales disponibles |
Posiciones ¶
GET /v1/positions Obtener posiciones abiertas
Devuelve todas las posiciones abiertas y órdenes pendientes.
Sin parámetros.
200 Matriz de objetos Position
[
{
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"entryPrice": 112345.0,
"stopLoss": 112000.0,
"takeProfit": 113000.0,
"unrealizedPnl": 155.25,
"commission": -7.00,
"swap": -1.20
}
]
Posición
| Campo | Tipo | Descripción |
|---|---|---|
positionId | int64 | ID de la posición |
symbolId | int64 | ID del símbolo |
tradeSide | string | BUY o SELL |
volume | int64 | Volumen en centavos |
entryPrice | double | Precio de entrada VWAP |
stopLoss | double | Precio de stop loss |
takeProfit | double | Precio de take profit |
unrealizedPnl | double | Beneficio/pérdida flotante |
commission | double | Comisión cobrada |
swap | double | Importe de swap |
GET /v1/positions/{positionId} Obtener detalles de posición
Devuelve una posición con sus órdenes y operaciones relacionadas.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
positionId | ruta | int64 | El ID de posición |
200 PositionDetailResponse
| Campo | Tipo | Descripción |
|---|---|---|
position | Position | Objeto Position |
orders | Order[] | Órdenes relacionadas |
deals | Deal[] | Operaciones relacionadas |
PUT /v1/positions/{positionId} Modificar SL/TP de posición
Actualiza el stop loss y/o take profit de una posición abierta. Devuelve un ExecutionResponse.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
positionId | ruta | int64 | El ID de posición |
| Campo | Tipo | Descripción |
|---|---|---|
stopLoss | double | Nuevo precio de stop loss (null para eliminar) |
takeProfit | double | Nuevo precio de take profit (null para eliminar) |
trailingStopLoss | boolean | Habilitar stop loss dinámico |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Cerrar una posición
Cierra una posición abierta total o parcialmente. Use un valor menor que el volumen total de la posición para un cierre parcial. Devuelve un ExecutionResponse.
| Nombre | Ubicado en | Tipo | Obligatorio | Descripción |
|---|---|---|---|---|
positionId | ruta | int64 | El ID de posición |
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
volume | int64 | Volumen a cerrar en centavos |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – margen insuficiente para cierre parcial
Transacciones ¶
GET /v1/deals Obtener historial de operaciones
Devuelve operaciones ejecutadas dentro de un rango de tiempo.
| Nombre | Ubicado en | Tipo | Obligatorio | Configuración predeterminada | Descripción |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Hora de inicio (ISO-8601) | |
toTimestamp | query | string | – | Hora de finalización (ISO-8601) | |
maxRows | query | int32 | 50 | Máximo de operaciones a devolver |
200 Matriz de objetos Deal
[
{
"dealId": 11111,
"orderId": 12345,
"positionId": 67890,
"symbolId": 1,
"tradeSide": "BUY",
"volume": 10000000,
"filledVolume": 10000000,
"executionPrice": 112345.0,
"executionTimestamp": 1700000000000,
"dealStatus": "FILLED",
"commission": -7.00
}
]
Deal
| Campo | Tipo | Descripción |
|---|---|---|
dealId | int64 | ID de la transacción |
orderId | int64 | Orden que desencadenó esta operación |
positionId | int64 | ID de la posición |
symbolId | int64 | ID del símbolo |
tradeSide | string | BUY o SELL |
volume | int64 | Volumen solicitado en centavos |
filledVolume | int64 | Volumen ejecutado en centavos |
executionPrice | double | Precio de ejecución |
executionTimestamp | int64 | Hora de ejecución (epoch ms) |
dealStatus | string | Estado – ver valores a continuación |
commission | double | Comisión cobrada |
Valores de dealStatus
| Valor | Significado |
|---|---|
FILLED | Orden completamente ejecutada |
PARTIALLY_FILLED | Orden parcialmente ejecutada |
REJECTED | Rechazada por el servidor de trading |
INTERNALLY_REJECTED | Rechazada internamente antes de llegar al servidor |
ERROR | Ocurrió un error durante la ejecución |
MISSED | Orden perdida (p. ej., brecha en el mercado) |
Esquemas { #execution-response-schema } ¶
ExecutionResponse ¶
Todas las operaciones de colocación, modificación y cancelación de órdenes devuelven este objeto.
| Campo | Tipo | Descripción |
|---|---|---|
orderId | int64 | ID de orden afectada |
positionId | int64 | ID de posición afectada |
executionType | string | Tipo de resultado: vea los valores a continuación |
order | Order | Detalles de la orden (si corresponde) |
position | Position | Detalles de la posición (si corresponde) |
deal | Deal | Detalles de la operación (si corresponde) |
Valores de executionType
| Valor | Significado |
|---|---|
ORDER_ACCEPTED | Orden pendiente aceptada |
ORDER_FILLED | Orden completada totalmente |
ORDER_REPLACED | Orden modificada |
ORDER_CANCELLED | Orden cancelada |
ORDER_EXPIRED | Orden vencida |
ORDER_REJECTED | Orden rechazada |
ORDER_CANCEL_REJECTED | Solicitud de cancelación rechazada |
ORDER_PARTIAL_FILL | Orden parcialmente ejecutada |
SWAP | Swap de posición aplicado |
DEPOSIT | Depósito en cuenta |
WITHDRAW | Retirada de cuenta |
BONUS_DEPOSIT_WITHDRAW | Depósito o retirada de bonificación |
Límites de tasa ¶
La pasarela aplica límites de tasa en varios niveles.
| Nivel | Descripción |
|---|---|
| Por IP | Limita el total de solicitudes desde una única dirección IP |
| Por usuario | Limita el total de solicitudes en todas las cuentas para un único token |
| Por cuenta | Limita las solicitudes dirigidas a una única cuenta de operaciones |
Límite de tasa excedido
Cuando se excede un límite de tasa, la API devuelve 429 Too Many Requests con un encabezado Retry-After.
Manejo de errores ¶
Cuando falla una solicitud, la API devuelve una respuesta de error JSON.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Códigos de error ¶
| Código | HTTP | Descripción |
|---|---|---|
INVALID_REQUEST | 400 | Parámetros de solicitud no válidos o faltantes |
UNAUTHORIZED | 401 | Token no válido, caducado o faltante |
TRADING_BAD_VOLUME | 400 | El volumen no es válido (por debajo del mínimo o excede la posición) |
NOT_ENOUGH_MONEY | 422 | Margen libre insuficiente |
SYMBOL_NOT_FOUND | 404 | El ID del símbolo no existe |
MARKET_CLOSED | 409 | El mercado para el símbolo está actualmente cerrado |
MAINTENANCE | 503 | El servidor de operaciones está en modo de mantenimiento |
TIMEOUT | 504 | El servidor de operaciones no respondió a tiempo |
GATEWAY_RATE_LIMIT | 429 | Límite de tasa excedido: vea el encabezado Retry-After |
Gestión del límite de tasa
Cuando recibe una respuesta 429, el encabezado Retry-After y el campo retryAfter indican cuántos segundos debe esperar antes de enviar la siguiente solicitud.