Primary API
Primary API
17
Historia del documento
2
API para listar ordenes activas.
API para listar ordenes operadas.
Descripción del campo “level” en mensaje de
suscripción a market data para Web Socket.
Se agregó un parámetro más al método de
ingreso de ordenes para permitir indicar si se
20/04/2016 1.8 cancelan las ordenes previas o no. Primary
Se actualizo la respuesta del Reporte de
Cuentas para dar soporte multimoneda.
3
Se agrego link a la documentación
Swagger
18/09/2017 1.17 Se incluyen links a ejemplos de login Rest Primary
y Websocket en Python
4
Índice
Contenido
Historia del documento .................................................................................................................................. 2
Introducción ................................................................................................................................................ 7
Conectándose al Web Service por token ................................................................................................ 8
Consultas a la API REST ............................................................................................................................... 9
Funcionalidades .......................................................................................................................................... 9
Segmentos ................................................................................................................................................ 10
Lista de Segmentos disponibles ............................................................................................................ 10
Instrumentos (Securities) .......................................................................................................................... 11
Lista de Instrumentos disponibles ........................................................................................................ 11
Lista detallada de Instrumentos disponibles ........................................................................................ 11
Descripción detallada de un Instrumento ............................................................................................ 12
Lista de Instrumentos por Código CFI ................................................................................................... 13
Lista de Instrumentos por Segmento .................................................................................................... 13
Orden ........................................................................................................................................................ 18
Ingresar una orden ................................................................................................................................ 18
Reemplazar una Orden ......................................................................................................................... 20
Cancelar una Orden .............................................................................................................................. 21
Ver el estado de una orden................................................................................................................... 22
Market Data .............................................................................................................................................. 27
Errores ....................................................................................................................................................... 28
Consultas a la API Web Socket .................................................................................................................. 31
Funcionalidades ........................................................................................................................................ 31
Cliente Web Socket ................................................................................................................................... 32
Órdenes ..................................................................................................................................................... 33
Ingresar una Orden ............................................................................................................................... 33
Cancelar una Orden .............................................................................................................................. 34
Suscribirse a Execution Reports ............................................................................................................ 34
Mensaje de Execution Reports ............................................................................................................. 36
5
Market Data .............................................................................................................................................. 37
Suscribirse a MD en tiempo real ........................................................................................................... 37
Mensaje de Market Data ...................................................................................................................... 39
Errores ....................................................................................................................................................... 39
Descripción Market Data Entries .............................................................................................................. 40
Primary Risk API ............................................................................................................................................ 41
Consultar detalle de posiciones ............................................................................................................ 42
Consulta reporte de cuenta .................................................................................................................. 43
Cotización de Monedas ......................................................................................................................... 45
6
Documentación Primary API
Introducción
Primary API es una solución creada para facilitar la interoperabilidad de software de terceros con la
plataforma de negociación electrónica de ROFEX, Primary Trading Platform (PTP).
El valor agregado de esta solución consiste en simplificar la integración con PTP traduciendo las interfaces
basadas en el estándar FIX a un conjunto de Web Services simplificados; estándar tecnológico más adoptado
por el mercado y cuya implementación requiere un menor esfuerzo de desarrollo con la consiguiente ventaja
en la reducción del costo asociado.
Los Web Services tipo REST trabajan de forma sincrónica y fueron diseñados y optimizados para atender
consultas como por ejemplo: ingresar/cancelar una orden, ver Market Data histórica, etc.
Se encuentra disponible documentación formato swagger, con api de demo online para probar todos los
métodos detallados en esta documentación:
URL: http://api.primary.com.ar/api-quickstart.html
7
Esquema de la solución:
Obtener Token:
Se debe hacer un POST a la siguiente URL:
http://demo-api.primary.com.ar/auth/getToken
Headers:
X-Username
X-Password
Retorna Header:
X-Auth-Token
Una vez obtenido el token del header de la consulta, se deberá utilizar el mismo en los siguientes requests a la
API.
Eliminar Token:
Se debe hacer un GET a la siguiente URL:
http://demo-api.primary.com.ar/auth/removeToken
A continuación se especifica link con un ejemplo en Python para autenticarse a la API REST:
Link: api.primary.com.ar/docs/PrimaryAPI-AutenticaciónREST.py
8
Consultas a la API REST
El objetivo de esta sección es brindarle al desarrollador una descripción detallada de los métodos
disponibles en Primary API.
Se da una breve explicación de la información que devuelve cada método, los parámetros que acepta,
un ejemplo de cómo utilizarlo y la respuesta que devuelve la API. Por último se agregó una lista de
errores posibles que pueden ocurrir al utilizar la API.
Funcionalidades
Primary API permite realizar lo siguiente:
Segmentos1:
Instrumentos:
Órdenes:
9
Segmentos
Lista de Segmentos disponibles
Los segmentos son los distintos ambientes o ruedas de negociación en las que está organizada la
operatoria de ROFEX. Algunos de los segmentos que existen hoy en día son:
HTTP request
GET http://demo-api.primary.com.ar/rest/segment/all
Parameters
No recibe parámetros.
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/segment/all
{
"status":"OK",
"segments":[
{
"marketSegmentId":"DDA",
"marketId":"ROFX"
},
Respuesta
…
{
"marketSegmentId":"DDF",
"marketId":"ROFX"
}
]
}
1
0
Instrumentos (Securities)
Instrumentos hace referencia a los distintos activos disponibles para negociarse en ROFEX. Pueden
agruparse por Tipos(los cuales se identifican con el estándar CFI Code) y, a su vez, cada uno tiene
características propias, las cuales se pueden consultar pidiendo el detalle (tickSize, maxSize, minSize,
etc.) del mismo.
HTTP request
GET http://demo-api.primary.com.ar/rest/instruments/all
Parameters
No recibe parámetros.
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/instruments/all
{
"status":"OK",
"instruments":[
{
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
Respuesta
},
"cficode":"FXXXSX"
},
…
]
}
10
Lista detallada de Instrumentos disponibles
Al igual que el método anterior devuelve una lista con todos los instrumentos pero se agrega una
descripción detallada de cada uno de ellos. Por cada instrumento devuelve datos de segmento, precio
mínimo/máximo, vencimiento, etc.
HTTP request
GET http://demo-api.primary.com.ar/rest/instruments/details
Parameters
No recibe parámetros.
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/instruments/details
{
"status":"OK",
"instruments":[
{
"segment":{
"marketSegmentId":"DDF",
"marketId":"ROFX"
},
"lowLimitPrice":16.905,
"highLimitPrice":19.835,
"minPriceIncrement":0.001000,
"minTradeVol":1.000000,
"maxTradeVol":5000.000000,
Respuesta
"tickSize":1.000000,
"maturityDate":20161230,
"contractMultiplier":1000.000000,
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
"cficode":"FXXXSX"
},
…
]
}
11
Descripción detallada de un Instrumento
Este método nos devuelve una descripción detallada de un solo instrumento, el cual se especifica en los
parámetros.
HTTP Request
GET http://demo-api.primary.com.ar/rest/instruments/detail
Parameters
Parámetros URL
Ejemplo
http://demo-
Http Request api.primary.com.ar/rest/instruments/detail?symbol=DODic16&marketId
=ROFX
{
"status":"OK",
"instrument":{
"segment":{
"marketSegmentId":"DDF",
"marketId":"ROFX"
},
"lowLimitPrice":16.905,
"highLimitPrice":19.835,
"minPriceIncrement":0.001000,
"minTradeVol":1.000000,
Respuesta
"maxTradeVol":5000.000000,
"tickSize":1.000000,
"maturityDate":20161230,
"contractMultiplier":1000.000000,
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
"cficode":"FXXXSX"
}
}
12
Lista de Instrumentos por Código CFI
Este método permite listar todos los instrumentos que pertenezcan al mismo Tipo (como dijimos
anteriormente cada tipo se identifica por un código CFI).
HTTP request
GET http://demo-api.primary.com.ar/rest/instruments/byCFICode
Parameters
Parámetros URL
Ejemplo
http://demo-
Http Request
api.primary.com.ar/rest/instruments/byCFICode?CFICode=FXXXSX
{
"status":"OK",
"instruments":[
{
"marketId":"ROFX",
"symbol":"DODic16"
},
Respuesta {
"marketId":"ROFX",
"symbol":"DOEne17"
},
…
]
}
HTTP request
GET http://demo-api.primary.com.ar/rest/instruments/bySegment
13
Parameters
Parámetros URL
Ejemplo
http://demo- api.primary.com.ar/rest/instruments/bySegment?MarketSegmentID=
Http Request DDF&MarketID=ROFX
{
"status":"OK",
"instruments":[
{
"marketId":"ROFX",
"symbol":"DOOct16"
},
{
"marketId":"ROFX",
Respuesta "symbol":"DOEne17"
},
…
{
"marketId":"ROFX",
"symbol":"DOFeb17"
}
]
}
14
Orden
Ingresar una orden
Es la manera de enviar una orden al Mercado. Vale la pena aclarar que cuando se ingresa una orden hay
que verificar si realmente se cargó la orden y no fue rechazada. La secuencia debería ser:
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/newSingleOrder
Parameters
Parámetros URL
Parameter name Value Description
18
cancelPrevious Boolean Parámetro opcional que indica si se cancelan todas las ordenes
previas o no. Por defecto este valor es false. Solo disponible
para ofertas enviadas a productos ROFEX.
iceberg Boolean Parámetro opcional que indica el tipo de orden Iceberg. Por
defecto este valor es false.
expireDate Date Parámetro opcional que indica la fecha de Vencimiento para
ordenes GTD. Ejemplo: 20170720
displayQty Integer Parámetro opcional que indica la cantidad a divulgar para
ordenes Iceberg.
Ejemplo
http://demo-
api.primary.com.ar/rest/order/newSingleOrder?marketId=ROFX&sym
Http Request
bol=DODic16&price=12.01&orderQty=2400&ordType=Limit&side=Buy&timeInFor
ce=Day&account=30&cancelPrevious=true
{
"status":"OK",
"order":{
Respuesta "clientId":"user144727645060649",
"proprietary":"demo-api"
}
}
Ejemplo Iceberg
http://demo-
api.primary.com.ar/rest/order/newSingleOrder?marketId=ROFX&symbol=DOAgo1
Http Request
7&price=18.25&orderQty=1000&ordType=Limit&side=Buy&timeInForce=Day&acco
unt=10&iceberg=true&displayQty=100
{
"status":"OK",
"order":{
Respuesta "clientId":"user125469825632595",
"proprietary":"demo-api"
}
}
Ejemplo GTD
http://demo-
api.primary.com.ar/rest/order/newSingleOrder?marketId=ROFX&symbol=DOJul17
Http Request
&price=17.5&orderQty=100&ordType=Limit&side=Buy&timeInForce=GTD&accoun
t=10&expireDate=20170223
{
"status":"OK",
"order":{
Respuesta "clientId":"user156548752365489",
"proprietary":"demo-api"
}
}
19
Reemplazar una Orden
Permite reemplazar una orden ingresada al mercado.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/replaceById
Parameters
Parámetros URL
Parameter name Value Description
Ejemplo
http://demo-
Http Request api.primary.com.ar/rest/order/replaceById?clOrdId=user144733478280357&proprie
tary=demo-api&price=17&orderQty=10
{
"status":"OK",
"order":{
Respuesta "clientId":"user14473450286174",
"proprietary":"demo-api"
}
}
20
Cancelar una Orden
Permite cancelar una orden ya ingresada al mercado.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/cancelById
Parameters
Parámetros URL
Parameter name Value Description
El ID del request que se hizo al Mercado, devuelto por la API
clOrdId String de Ingreso y Cancelación de Orden. Ejemplo:
user144720678549411
ID que identifica al participante del mercado mediante el cual
proprietary String se hace el request. Este parámetro es siempre fijo para una
cuenta. Valor: demo-api
Ejemplo
http://demo-
Http Request api.primary.com.ar/rest/order/cancelById?clOrdId=user14473347828035
7&proprietary=demo-api
{
"status":"OK",
"order":{
Respuesta "clientId":"user14473450286174Cnl5",
"proprietary":"demo-api"
}
}
21
Ver el estado de una orden
APIs para consultar en qué estado se encuentra una orden que se ingresó. Se brindan varias alternativas
para esto, se puede consultar por el Client Order ID (explicado más adelante), por ordenes activas u
operadas, etc.
Es importante dejar en claro algunos conceptos para poder entender correctamente tanto la consulta a
la API como los datos que nos devuelve. Dos términos que suelen confundirse pero que representan
cosas distintas son el Cliente Order ID y el Order ID:
Cliente Order ID: hace referencia al ID del request que se hace al mercado. Para que quede
claro, un ejemplo sería: cuando se quiere mandar dar de alta una orden en el mercado se hace
un request de alta de orden que lleva asociado un Cliente Order ID específico, esto permite
diferenciar distintos request que se hagan. Para el mercado un request de alta de orden y un
request de cancelación de una orden son distintos aunque tengan asociada el mismo ID de
orden (ver siguiente), entonces tendríamos un client order ID al ingresar una orden y un client
order ID distinto al cancelar esa orden y ambos van a estar asociados al mismo Order ID.
Order ID: identifica una orden en el mercado, tan simple como esto, como dijimos antes un
Order ID va a estar asociado a un request de alta de orden (client order ID). Si se manda otro
request para cancelar esa orden entonces también ese order ID va a estar asociado al request
de cancelación de orden (client order ID distinto al de alta de orden).
Si vemos lo que devuelve la API de ingreso de orden y la API de cancelación de orden encontramos un
campo de la respuesta llamado clOrdId (Cliente Order ID) con este dato es con el que vamos a poder
realizar varias de las consultas hechas a la API.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/id
Parameters
Parámetros URL
Parameter name Value Description
22
Ejemplo
http://demo-
Http Request api.primary.com.ar/rest/order/id?clOrdId=user1144720678549411&p
roprietary=demo-api
{
"status":"OK",
"order":{
"orderId":"1130835",
"clOrdId":"user1145712381052053",
"proprietary":"demo-api",
"execId":"160229133429-fix1-493",
"accountId":{
"id":"10"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
Respuesta "price":18.000,
"orderQty":10,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160304-17:37:35",
"avgPx":0,
"lastPx":0,
"lastQty":0,
"cumQty":0,
"leavesQty":10,
"status":"NEW",
"text":"Aceptada "
}
}
23
Consultar todos los estados por Client Order ID
Consulta que devuelve todos los estados por los que paso una orden que estén asociados a un request
hecho al mercado. En el caso de un request de alta de orden devolverá todos los estados de la orden
que se ingresó al mercado menos el del estado Cancelled ya este estado estará asociado a un request de
cancelación y no de alta de orden.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/allById
Parameters
Parámetros URL
Parameter name Value Description
El ID del request que se hizo al Mercado, devuelto por la API
clOrdId String de Ingreso y Cancelación de Orden. Ejemplo:
user144720678549411
ID que identifica al participante del mercado mediante el cual
proprietary String se hace el request. Este parámetro es siempre fijo para una
cuenta. Valor: demo-api
Ejemplo
http://demo-
Http Request api.primary.com.ar/rest/order/allById?clOrdId=user114472067854941
1&proprietary=demo-api
{
"status":"OK",
"orders":[
{
"orderId":null,
"clOrdId":"user1145712381052053",
"proprietary":"demo-api",
"accountId":{
"id":"10"
},
"instrumentId":{
Respuesta "marketId":"ROFX",
"symbol":"DODic16"
},
"price":18.540,
"orderQty":10,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160304-17:36:50",
"status":"PENDING_NEW",
"text":"Enviada"
},
19
{
"orderId":"1130835",
"clOrdId":"user1145712381052053",
"proprietary":"demo-api",
"execId":"160229133429-fix1-493",
"accountId":{
"id":"10"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
"price":18.540,
"orderQty":10,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160304-17:37:35",
"avgPx":0,
"lastPx":0,
"lastQty":0,
"cumQty":0,
"leavesQty":10,
"status":"NEW",
"text":"Aceptada "
}
]
}
20
Consultar Ordenes Activas
Consulta que devuelve las ordenes que están activas en el mercado.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/actives
Parameters
Parámetros URL
Parameter name Value Description
accountId Integer Número de cuenta. Ejemplo: 30
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/order/actives?accountId=10
{
"status":"OK",
"orders":[
{
"orderId":"1130813",
"clOrdId":"user1145703678429722",
"proprietary":"demo-api",
"execId":"160229133429-fix1-414",
"accountId":{
"id":"10"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
"price":18.540,
Respuesta
"orderQty":1,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160303-17:27:08",
"avgPx":0,
"lastPx":0,
"lastQty":0,
"cumQty":0,
"leavesQty":1,
"status":"NEW",
"text":"Aceptada "
},
…
]
}
21
Consultar Ordenes Operadas
Consulta que devuelve todas las ordenes que están total o parcialmente operadas.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/filleds
Parameters
Parámetros URL
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/order/actives?accountId=10
{
"status":"OK",
"orders":[
{
"orderId":"1130813",
"clOrdId":"user1145703678429722",
"proprietary":"demo-api",
"execId":"T1169011",
"accountId":{
"id":"10"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
Respuesta "price":18.540,
"orderQty":1,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160303-17:29:53",
"avgPx":18.540000,
"lastPx":18.500,
"lastQty":1,
"cumQty":1,
"leavesQty":0,
"status":"FILLED",
"text":"Operada "
}
]
}
22
Estado de orden por ID Cuenta
Consulta que devuelve el último estado de los request (client order ID) asociadas a una cuenta. Es decir,
de los si se hizo un request para dar de alta una orden, y luego se hizo otro para darlo de baja entonces
esta API devolverá 2 ordenes, una con el ultimo estado asociado al request de alta y otra con el ultimo
estado asociado al request de baja.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/all
Parameters
Parámetros URL
Parameter name Value Description
accountId Integer Número de cuenta. Ejemplo: 30
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/order/all?accountId=30
{
"status":"OK",
"orders":[
{
"orderId":"1130835",
"clOrdId":"user1145712381052053",
"proprietary":"demo-api",
"execId":"160229133429-fix1-493",
"accountId":{
"id":"10"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
Respuesta },
"price":18.540,
"orderQty":10,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160304-17:37:35",
"avgPx":0,
"lastPx":0,
"lastQty":0,
"cumQty":0,
"leavesQty":10,
"status":"NEW",
"text":"Aceptada "
},
23
{
"orderId":"1130835",
"clOrdId":"user1145712381052053Cnl54",
"proprietary":"demo-api",
"execId":"160229133429-fix1-494",
"accountId":{
"id":"10"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
"price":18.540,
"orderQty":10,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160304-17:38:15",
"avgPx":0,
"lastPx":0,
"lastQty":0,
"cumQty":0,
"leavesQty":10,
"status":"CANCELLED",
"text":"Cancelada"
}
]
}
25
Estado de Orden por Execution ID
Consulta que devuelve el estado de la orden (por Execution ID). Es decir, esta consulta va a devolver la
orden asociada a un Execution ID pudiendo identificar que orden esta involucrada en la respectiva
operación.
HTTP Request
GET http://demo-api.primary.com.ar/rest/order/byExecId
Parameters
Parámetros URL
Parameter name Value Description
execId String Identificador de Ejecución, ejemplo: T3567006
26
Market Data
Estas API permiten acceder a datos Históricos y en Tiempo Real sobre cualquier instrumento negociado
en el mercado. También la API ofrece un método para buscar todos los instrumentos que se han
operado.
HTTP Request
GET http://demo-api.primary.com.ar/rest/marketdata/get
Parameters
Parámetros URL
Ejemplo
http://demo-
Http Request api.primary.com.ar/rest/marketdata/get?marketId=ROFX&symbol=DODic
16&entries=BI,OF,LA,OP,CL,SE,OI&depth=2
{
"status":"OK",
"marketData":{
"LA":{ "price":18.010, "size":500 },
"SE":null,
"BI":[{"price":18.000, "size":25}], "OI":null,
Respuesta
"OF":[{"price":18.050, "size":50}, {"price":1.110,
"size":10}],
"OP":18.010,
27
"CL":null
},
"depth":2,
"aggregated":true
}
HTTP Request
https://demo-api.primary.com.ar/rest/data/getTrades?marketId=ROFX&symbol=DOEne18&date=YYYY-
MM-DD
Parameters
Parámetros URL
Parameter name Value Description
26
Ejemplo
Para obtener la Market Data Histórica para el contrato de Dólar Mayo 2017 para la fecha
17/05/2017:
Http Request https://demo-
api.primary.com.ar/rest/data/getTrades?marketId=ROFX&symbol=
DOMay17&date=2017-05-17
{
"status":"OK",
"symbol":"DOMay17",
"market":"ROFX",
"trades":[
{
"price":15.77,
"size":125,
"datetime":"2017-05-17 14:29:24.831",
"servertime":1495031364831,
"symbol":"DOMay17"
Respuesta },
{
"price":15.775,
"size":75,
"datetime":"2017-05-17 14:35:40.152",
"servertime":1495031740152,
"symbol":"DOMay17"
},
{
"price":15.76,
"size":325,
"datetime":"2017-05-17 14:46:43.038",
"servertime":1495032403038,
"symbol":"DOMay17"
},
…
{
"price":15.73,
"size":1000,
"datetime":"2017-05-17 15:54:15.700",
"servertime":1495036455700,
"symbol":"DOMay17"
}
]
}
27
Errores
Lista de errores
Tipo de Error Intentar cargar una orden con una cuenta a la que no se tiene acceso.
{
"status":"ERROR",
Respuesta "description":"No tiene acceso a la cuenta 30",
"message":null
}
Tipo de Error Error al intentar acceder a un método que no existe o al cual no se tiene acceso.
{
"status":"ERROR",
"message":"Access Denied"
}
O
Respuesta
{
"status":"ERROR",
"description":"Ruta invalida",
"message":""
}
30
Consultas a la API Web Socket
En esta sección se dará la información necesaria para utilizar la API Web Socket disponibles en Primary
API.
Se explica brevemente los mensajes que se pueden enviar y recibir a la API, el formato de dichos
mensajes y también se provee de ejemplos de los mensajes enviados y recibidos de la API.
Funcionalidades
Primary API con la tecnología Web Socket permite realizar lo siguiente:
Órdenes:
A continuación se especifica link con un ejemplo en Python para autenticarse a la API WebSocket:
Link: api.primary.com.ar/docs/PrimaryAPI-AutenticaciónWebSocket.py
31
Cliente Web Socket
Para facilitar el entendimiento de los mensajes enviados y recibidos por la API se desarrolló un cliente
Web que puede ser accedido una vez que nos autenticamos en Primary API.
Para utilizarlo simplemente primero se abre una conexión web socket y luego se envían mensajes. Todos
los mensajes recibidos se muestran en un Log del cliente.
32
Órdenes
Ingresar una Orden
Con este mensaje se envía una orden al mercado. Para poder saber que ocurrió con la orden hay que
estar suscripto a los Execution Report para la cuenta con la que mandamos la orden, de lo contrario no
recibiremos ningún mensaje sobre el estado de la orden.
Mensaje Enviado:
{
"type":"no",
"product":{
"symbol":"DODic17",
"marketId":"ROFX"
Formato
},
Mensaje
"price":"18",
"quantity":"10",
"side":"BUY",
"account":"20"
}
33
Cancelar una Orden
Mensaje que permite cancelar una orden ingresada en el mercado.
Mensaje Enviado:
{
"type":"co",
Formato
"clientId":"user114121092035207",
Mensaje
"proprietary":"demo-api"
}
Mensaje Enviado:
{
"type":"os",
Formato "account":{
Mensaje "id":"40"
}
}
Mensaje Enviado:
{
"type":"os",
"accounts":[
{
"id":"40"
Formato
},
Mensaje
{
"id":"4000"
}
]
}
34
Para todas las cuentas
Con este mensaje se podrá recibir los Execution Reports de todas las órdenes ingresadas con las
cuentas asociadas al usuario.
Mensaje Enviado:
{
Formato
"type":"os"
Mensaje
}
Se encuentra disponible el parámetro “snapshotOnlyActive” para recibir los Execution Reports de las
ordenes activas (en estado NEW o PARTIALLY_FILLED) para todas las cuentas, mas de una cuenta o para
una única cuenta.
Mensaje Enviado:
{
Formato
"type":"os" ,"snapshotOnlyActive":true
Mensaje
}
35
Mensaje de Execution Reports
Este es el mensaje que envía el servidor a todos los que estén suscriptos a los Execution Reports de
la orden indicada.
Mensaje Enviado:
{
"type":"or",
"orderReport":{
"orderId":"1128056",
"clOrdId":"user14545967430231",
"proprietary":"demo-api",
"execId":"160127155448-fix1-1368",
"accountId":{
"id":"30"
},
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
Formato
"price":18.000,
Mensaje
"orderQty":10,
"ordType":"LIMIT",
"side":"BUY",
"timeInForce":"DAY",
"transactTime":"20160204-11:41:54",
"avgPx":0,
"lastPx":0,
"lastQty":0,
"cumQty":0,
"leavesQty":10,
"status":"CANCELLED",
"text":"Reemplazada"
}
}
36
Market Data
Utilizando el protocolo Web Socket es posible recibir Market Data de los instrumentos especificados de
manera asíncrona cuando esta cambie necesidad de hacer un request cada vez que necesitemos.
Para recibir este tipo de mensajes hay que suscribirse indicando los instrumentos de los cuales
queremos recibir MD. El servidor enviara un mensaje de MD por cada instrumento al que nos
suscribimos cada vez que este cambie.
Mensaje Enviado:
{
"type":"smd",
"level":1,
"entries":["OF"],
"products":[
{
Formato Mensaje
"symbol":"DODic16",
"marketId":"ROFX"
}
],
"depth":2
}
37
Market Data Levels
El mensaje de Market Data incluye un parámetro “level” que indica el tiempo de actualización de los
mensajes de MD.
Actualmente contamos con 5 niveles de actualización y es el cliente quien decide a que niveles se
suscribe. Esto es importante para tener en cuenta ya que es posible estar suscripto a varios niveles al
mismo tiempo, y en consecuencia se devolverá de MD para ambos niveles y el cliente recibirá 2
mensajes de market data cada vez que cambie, uno con mayor frecuencia que el otro.
Para que quede claro con un ejemplo, supongamos que me suscribo para recibir market data de
DODic16 de nivel 1 y de nivel 5, el comportamiento sería el siguiente:
Cuando cambie la MD de ese instrumento (ej. se ingrese una nueva orden de compra) el cliente Web
Socket recibirá 2 mensajes de MD, el primero a los 100ms de cambiar la MD y el segundo a los 6s,
siempre considerando que no se ingresan nuevas ordenes. Ambos mensajes contendrán la misma
información.
38
Mensaje de Market Data
Este es el mensaje que envía el servidor a todos los que estén suscriptos a MD del instrumento indicado.
En este caso utilizamos el ejemplo de suscripción a market data con profundidad 2.
Mensaje Recibido:
{
"type":"Md",
"instrumentId":{
"marketId":"ROFX",
"symbol":"DODic16"
},
"marketData":{
"OF":[
{
Formato "price":18.000,
Mensaje "size":21
},
{
"price":18.100,
"size":21
}
]
}
}
Errores
Lista de errores
Tipo de Error Mensaje enviado con errores en la sintaxis.
{
Mensaje "status":"ERROR",
enviado por el "description":"Mensaje invalido",
Servidor "message":"{\"type\":\"smd\",\"level\":1,}"
}
39
Descripción Market Data Entries
A continuación se presentan los datos del mercado que son posibles consultar por medio de las API
tanto REST como Web Socket. Al momento de consultar market data es posible indicar que tipo de
market data se quiere recibir, esto normalmente es una lista separa por comas de los siguientes
símbolos:
40
Primary Risk API
Primary Risk API es la interfaz que permite comunicarse con el sistema RIMA (Risk Manager).
Consulta de posiciones
HTTP Request
GET http://demo-api.primary.com.ar/rest/risk/position/getPositions/{accountName}
Autenticación
HTTP Basic Authentication
Parameters
Parámetros URL
Parameter name Value Description
accountName String Nombre de la Cuenta. Ejemplo: 30
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/risk/position/getPositions/10
{
"status":"OK",
"positions":[
{
"originalBuyPrice":13.0,
"originalSellPrice":0.0,
"symbol":"DODic16",
"instrument":{
"symbolReference":"DLR122016"
Respuesta },
"buyPrice":18.0,
"buySize":10.0,
"sellPrice":0.0,
"sellSize":0,
"totalDailyDiff":0.0,
"totalDiff":0.0
}
]
}
41
Consultar detalle de posiciones
HTTP Request
GET http://demo-api.primary.com.ar/rest/risk/detailedPosition/{accountName}
Autenticación
HTTP Basic Authentication
Parameters
Parámetros URL
Parameter name Value Description
accountName String Nombre de la Cuenta. Ejemplo: 30
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/risk/detailedPosition/10
{
"status":"OK",
"detailedPosition":{
"account":"10",
"totalDailyDiffPlain":-
29288.460000000000000000000000000000,
"totalMarketValue":null,
"report":{
"FUTURE":{
"DLR122016":{
"detailedPositions":[
{
"symbolReference":"DLR122016",
"settlType":null,
"contractType":"FUTURE",
Respuesta
"priceConversionFactor":1.000000,
"contractSize":1002.000000,
"marketPrice":18.077000000000,
"currency":"ARS",
"exchangeRate":1.000000,
"totalInitialSize":0,
"buyInitialSize":0,
"sellInitialSize":0,
"buyInitialPrice":0,
"sellInitialPrice":0,
"totalFilledSize":10.000000,
"buyFilledSize":10.000000,
"sellFilledSize":0,
"buyFilledPrice":18.000000,
"sellFilledPrice":0,
42
"totalCurrentSize":10.000000,
"buyCurrentSize":10.000000,
"sellCurrentSize":0,
"detailedDailyDiff":{
"buyPricePPPDiff":18.000000,
"sellPricePPPDiff":0,
"totalDailyDiff":-
29288.460000000000000000000000,
"buyDailyDiff":-
29288.460000000000000000000000,
"sellDailyDiff":0E-18,
"totalDailyDiffPlain":-
29288.460000000000000000000000000000,
"buyDailyDiffPlain":-
29288.460000000000000000000000000000,
"sellDailyDiffPlain":0E-24
},
"marketValue":null
}
],
"instrumentMarketValue":null,
"instrumentInitialSize":0,
"instrumentFilledSize":10.000000,
"instrumentCurrentSize":10.000000
}
}
},
"lastCalculation":1455653450657
}
}
HTTP Request
GET http://demo-api.primary.com.ar/rest/risk/accountReport/{accountName}
Autenticación
HTTP Basic Authentication
Parameters
Parámetros URL
Parameter name Value Description
accountName String Nombre de la Cuenta. Ejemplo: 30
40
Ejemplo
Http Request http://demo-api.primary.com.ar/rest/risk/accountReport/10
{
"status":"OK",
"accountData":{
"lastCalculation":1467729250596,
"accountName":"10",
"marketMember":"Primary",
"marketMemberIdentity":"000",
"collateral":0,
"margin":666555,
"availableToCollateral":555666,
"detailedAccountReports":{
"T_PLUS_2":{
"currencyBalance":{
"detailedCurrencyBalance":{
"EUR":{ "consumed":0, "available":0 },
"ARS":{ "consumed":0, "available":0 },
"ARS BCRA":{ "consumed":0, "available":0 },
"U$S":{ "consumed":0, "available":0 },
"USD G":{ "consumed":0, "available":0 },
"USD D":{ "consumed":0, "available":0 },
"USD C":{ "consumed":0, "available":0 },
"USD R":{ "consumed":0, "available":0 }
},
Respuesta "accountValue":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
},
"availableToOperate":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
41
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
}
},
"NEXT_DAY":{
"currencyBalance":{
"detailedCurrencyBalance":{
"EUR":{ "consumed":0, "available":0 },
"ARS":{ "consumed":0, "available":0 },
"ARS BCRA":{ "consumed":0, "available":0 },
"U$S":{ "consumed":0, "available":0 },
"USD G":{ "consumed":0, "available":0 },
"USD D":{ "consumed":0, "available":0 },
"USD C":{ "consumed":0, "available":0 },
"USD R":{ "consumed":0, "available":0 }
}
},
"accountValue":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
},
"availableToOperate":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
}
},
"T_PLUS_3":{
"currencyBalance":{
42
"detailedCurrencyBalance":{
"EUR":{ "consumed":0, "available":0 },
"ARS":{ "consumed":0, "available":0 },
"ARS BCRA":{ "consumed":0, "available":0 },
"U$S":{ "consumed":0, "available":0 },
"USD G":{ "consumed":0, "available":0 },
"USD D":{ "consumed":0, "available":0 },
"USD C":{ "consumed":0, "available":0 },
"USD R":{ "consumed":0, "available":0 }
}
},
"accountValue":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
},
"availableToOperate":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
}
},
"CASH":{
"currencyBalance":{
"detailedCurrencyBalance":{
"EUR":{ "consumed":0, "available":0 },
"ARS":{ "consumed":0, "available":0 },
"ARS BCRA":{ "consumed":0, "available":0 },
"U$S":{ "consumed":0, "available":0 },
"USD G":{ "consumed":0, "available":0 },
"USD D":{ "consumed":0, "available":0 },
43
"USD C":{ "consumed":0, "available":0 },
"USD R":{ "consumed":0, "available":0 }
}
},
"accountValue":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
},
"availableToOperate":{
"cash":{
"totalCash":0.000000,
"detailedCash":{
"EUR":0, "ARS":0, "ARS BCRA":0, "USD G":0,
"U$S":0, "USD D":0, "USD R":0, "USD C":0
}
},
"dailyDiff":0,
"movements":0,
"portfolio":0,
"credit":1000000.000000000000,
"total":1000000.000000000000
}
}
},
"hasError":false,
"errorDetail":null
}
}
44
Cotización de Monedas
HTTP Request
GET /currency/getAll
Autenticación
HTTP Basic Authentication
Parameters
No recibe parámetros.
Ejemplo
Http Request /currency/getAll
[ {
"description":"Peso Argentino",
"currency":"ARS",
"rate":1
},{
"description":"Pesos depositados en BCRA",
"currency":"ARS BCRA",
"rate":1
},{
"description":"",
"currency":"USD G",
"rate":14.5
},{
"description":"",
"currency":"USD D",
"rate":13.5
},{
Respuesta
"description":"",
"currency":"USD C",
"rate":13.5
},{
"description":"",
"currency":"EUR",
"rate":14.7636
},{
"description":"",
"currency":"U$S",
"rate":13.726
},{
"description":"",
"currency":"USD R",
"rate":13.5533
}
]
45
Consulta Cotización de una Monedas
HTTP Request
GET /currency/get/{currency}
Autenticación
HTTP Basic Authentication
Parameters
Parámetros URL
Parameter name Value Description
currency String Nombre de la Moneda. Ejemplo: ARS
Ejemplo
Http Request /currency/get/ARS
{
"description":"Peso Argentino",
Respuesta "currency":"ARS",
"rate":1
}
46