primary

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Primary — Trading API de Matba ROFEX

Primary — Matba ROFEX交易API

API para operar en el Mercado Argentino de Futuros y Opciones (Matba ROFEX) a través de Primary Trading Platform (PTP). Soporta futuros (dólar, soja, trigo, maíz, índices), opciones sobre futuros, acciones, bonos y CEDEARs.
Base URL:
https://api.remarkets.primary.com.ar
Docs: github.com/matbarofex — repositorio oficial con ejemplos open source.

用于通过Primary Trading Platform (PTP)在阿根廷期货与期权市场(Matba ROFEX)进行交易的API。支持期货(美元、大豆、小麦、玉米、指数)、期货期权、股票、债券和CEDEARs。
Base URL:
https://api.remarkets.primary.com.ar
文档: github.com/matbarofex — 包含开源示例的官方仓库。

Autenticación

认证

Obtener Credenciales

获取凭证

EntornoURLDescripción
REMARKET (demo)remarkets.primary.venturesCrear cuenta gratis para paper trading
LIVE (producción)Contactar a mpi@primary.com.arSolicitar acceso al equipo MPI
Una vez creada la cuenta en REMARKET, tendrás:
  • Usuario: el que registraste
  • Password: el que configuraste
  • Account: tu número de cuenta (suele ser
    REM
    + últimos dígitos del usuario)
环境URL描述
REMARKET(演示)remarkets.primary.ventures免费创建账户进行模拟交易
LIVE(生产)联系 mpi@primary.com.ar联系MPI团队申请访问权限
在REMARKET创建账户后,你将获得:
  • 用户名: 注册时填写的用户名
  • 密码: 自行设置的密码
  • 账户: 你的账户编号(通常为
    REM
    + 用户名最后几位)

Obtener Token

获取Token

python
import requests

r = requests.post("https://api.remarkets.primary.com.ar/auth/getToken",
    headers={"X-Username": tu_usuario, "X-Password": tu_password})

token = r.headers["X-Auth-Token"]
El token se envía en adelante como header
X-Auth-Token
en todos los requests.
⚠️ NUNCA hardcodear credenciales. Usar variables de entorno o parámetros CLI.
python
import os
TOKEN = os.getenv("PRIMARY_TOKEN")  # Opcional: cachear token
USER = os.getenv("PRIMARY_USER")
PASS = os.getenv("PRIMARY_PASSWORD")
ACCOUNT = os.getenv("PRIMARY_ACCOUNT")  # Ej: 12345 o REM12345
python
import requests

r = requests.post("https://api.remarkets.primary.com.ar/auth/getToken",
    headers={"X-Username": tu_usuario, "X-Password": tu_password})

token = r.headers["X-Auth-Token"]
后续所有请求中,需在请求头
X-Auth-Token
中携带该token。
⚠️ 切勿硬编码凭证。请使用环境变量或CLI参数。
python
import os
TOKEN = os.getenv("PRIMARY_TOKEN")  # 可选:缓存token
USER = os.getenv("PRIMARY_USER")
PASS = os.getenv("PRIMARY_PASSWORD")
ACCOUNT = os.getenv("PRIMARY_ACCOUNT")  # 示例: 12345 或 REM12345

Renew Token

刷新Token

Si recibís un 401, el token expiró. Renovalo con un nuevo POST a
/auth/getToken
.

如果收到401错误,说明token已过期。通过再次POST请求
/auth/getToken
刷新token。

Segmentos

交易板块

El mercado se organiza en segmentos (ruedas de negociación). Cada instrumento pertenece a un segmento.
SegmentoDescripción
DDF
Derivados Financieros (futuros de dólar, índices)
DDA
Derivados Agropecuarios (soja, trigo, maíz)
DUAL
Instrumentos listados en ambas divisiones
MERV
Mercados externos a Matba ROFEX (BYMA)
MAE
Mercado Abierto Electrónico
TEST
Ambiente de pruebas
U-DDF
,
U-DDA
,
U-DUAL
,
U-FIN
,
U-COMM
,
U-STOCK
Sub-segmentos de usuarios
TIVA
,
AVS
Otros segmentos
市场按交易板块(交易轮次)划分。每个交易工具都属于一个板块。
板块描述
DDF
金融衍生品(美元期货、指数)
DDA
农业衍生品(大豆、小麦、玉米)
DUAL
在两个部门上市的工具
MERV
Matba ROFEX以外的市场(BYMA)
MAE
电子公开市场
TEST
测试环境
U-DDF
,
U-DDA
,
U-DUAL
,
U-FIN
,
U-COMM
,
U-STOCK
用户子板块
TIVA
,
AVS
其他板块

Listar Segmentos

列出所有交易板块

http
GET https://api.remarkets.primary.com.ar/rest/segment/all
python
r = requests.get("https://api.remarkets.primary.com.ar/rest/segment/all",
    headers={"X-Auth-Token": token})
print(r.json()["segments"])
Respuesta:
json
{"status":"OK","segments":[
  {"marketSegmentId":"DDF","marketId":"ROFX"},
  {"marketSegmentId":"DDA","marketId":"ROFX"},
  ...
]}

http
GET https://api.remarkets.primary.com.ar/rest/segment/all
python
r = requests.get("https://api.remarkets.primary.com.ar/rest/segment/all",
    headers={"X-Auth-Token": token})
print(r.json()["segments"])
响应:
json
{"status":"OK","segments":[
  {"marketSegmentId":"DDF","marketId":"ROFX"},
  {"marketSegmentId":"DDA","marketId":"ROFX"},
  ...
]}

Instrumentos (Securities)

交易工具(证券)

Los instrumentos se identifican por su símbolo y marketId. Ejemplos:
SímboloDescripciónCFI Code
DLR/JUN26
Futuro de dólar Junio 2026
FXXXSX
SOJ.ROS/MAY26
Futuro de soja Rosario Mayo 2026
FXXXSX
DLR/JUN26 1460 C
Opción Call sobre futuro dólar
OCAFXS
DLR/JUN26 1420 P
Opción Put sobre futuro dólar
OPAFXS
GGAL
Acción Grupo Galicia
ESXXXX
交易工具通过代码marketId标识。示例:
代码描述CFI代码
DLR/JUN26
2026年6月美元期货
FXXXSX
SOJ.ROS/MAY26
2026年5月罗萨里奥大豆期货
FXXXSX
DLR/JUN26 1460 C
美元期货看涨期权
OCAFXS
DLR/JUN26 1420 P
美元期货看跌期权
OPAFXS
GGAL
Galicia集团股票
ESXXXX

Todos los Instrumentos

所有交易工具

http
GET https://api.remarkets.primary.com.ar/rest/instruments/all
http
GET https://api.remarkets.primary.com.ar/rest/instruments/all

Instrumentos con Detalle

带详情的交易工具

http
GET https://api.remarkets.primary.com.ar/rest/instruments/details
Devuelve:
symbol
,
segment
,
lowLimitPrice
,
highLimitPrice
,
minPriceIncrement
,
minTradeVol
,
maxTradeVol
,
tickSize
,
contractMultiplier
,
roundLot
,
maturityDate
,
currency
,
orderTypes
,
timesInForce
,
cficode
.
http
GET https://api.remarkets.primary.com.ar/rest/instruments/details
返回字段:
symbol
,
segment
,
lowLimitPrice
,
highLimitPrice
,
minPriceIncrement
,
minTradeVol
,
maxTradeVol
,
tickSize
,
contractMultiplier
,
roundLot
,
maturityDate
,
currency
,
orderTypes
,
timesInForce
,
cficode

Detalle de un Instrumento

单个交易工具详情

http
GET https://api.remarkets.primary.com.ar/rest/instruments/detail?symbol=DLR/JUN26&marketId=ROFX
http
GET https://api.remarkets.primary.com.ar/rest/instruments/detail?symbol=DLR/JUN26&marketId=ROFX

Por Código CFI

按CFI代码筛选

http
GET https://api.remarkets.primary.com.ar/rest/instruments/byCFICode?CFICode=FXXXSX
CFI CodeTipo
FXXXSX
Futuro
FXXXXX
Futuro (genérico)
OCAFXS
Opción Call sobre Futuro
OPAFXS
Opción Put sobre Futuro
OCEFXS
Opción Call europea sobre Futuro
OPEFXS
Opción Put europea sobre Futuro
ESXXXX
Acción
DBXXXX
Bono
EMXXXX
CEDEAR
OCASPS
Opción Call sobre Acción
OPASPS
Opción Put sobre Acción
DBXXFR
Obligación Negociable
http
GET https://api.remarkets.primary.com.ar/rest/instruments/byCFICode?CFICode=FXXXSX
CFI代码类型
FXXXSX
期货
FXXXXX
通用期货
OCAFXS
期货看涨期权
OPAFXS
期货看跌期权
OCEFXS
欧式期货看涨期权
OPEFXS
欧式期货看跌期权
ESXXXX
股票
DBXXXX
债券
EMXXXX
CEDEAR
OCASPS
股票看涨期权
OPASPS
股票看跌期权
DBXXFR
可交易债券

Por Segmento

按交易板块筛选

http
GET https://api.remarkets.primary.com.ar/rest/instruments/bySegment?MarketSegmentID=DDF&MarketID=ROFX

http
GET https://api.remarkets.primary.com.ar/rest/instruments/bySegment?MarketSegmentID=DDF&MarketID=ROFX

Market Data

市场数据

En Tiempo Real (REST Snapshot)

实时数据(REST快照)

http
GET https://api.remarkets.primary.com.ar/rest/marketdata/get
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &entries=BI,OF,LA,OP,CL,SE,OI
    &depth=3
EntrySignificado
BI
Bids (ofertas de compra en el book)
OF
Offers (ofertas de venta en el book)
LA
Last (último precio operado)
OP
Opening Price (precio de apertura)
CL
Closing Price (cierre rueda anterior)
SE
Settlement Price (precio de ajuste, solo futuros)
HI
High Price (máximo de la rueda)
LO
Low Price (mínimo de la rueda)
TV
Trade Volume (volumen operado en contratos)
OI
Open Interest (interés abierto, solo futuros)
IV
Index Value (solo índices)
EV
Effective Volume (solo BYMA)
NV
Nominal Volume (solo BYMA)
ACP
Auction Price (cierre del día corriente)
python
r = requests.get("https://api.remarkets.primary.com.ar/rest/marketdata/get",
    headers={"X-Auth-Token": token},
    params={"marketId": "ROFX", "symbol": "DLR/JUN26",
            "entries": "BI,OF,LA,OP,CL,SE,OI", "depth": 3})
data = r.json()["marketData"]
print(f"Bid: {data['BI']}  |  Offer: {data['OF']}")
print(f"Last: {data['LA']}  |  Settle: {data['SE']}")
http
GET https://api.remarkets.primary.com.ar/rest/marketdata/get
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &entries=BI,OF,LA,OP,CL,SE,OI
    &depth=3
条目含义
BI
买价(订单簿中的买入报价)
OF
卖价(订单簿中的卖出报价)
LA
最新成交价
OP
开盘价
CL
上一交易日收盘价
SE
结算价(仅期货)
HI
当日最高价
LO
当日最低价
TV
成交量(合约数)
OI
持仓量(仅期货)
IV
指数值(仅指数)
EV
有效成交量(仅BYMA)
NV
名义成交量(仅BYMA)
ACP
拍卖价(当日收盘价)
python
r = requests.get("https://api.remarkets.primary.com.ar/rest/marketdata/get",
    headers={"X-Auth-Token": token},
    params={"marketId": "ROFX", "symbol": "DLR/JUN26",
            "entries": "BI,OF,LA,OP,CL,SE,OI", "depth": 3})
data = r.json()["marketData"]
print(f"买价: {data['BI']}  |  卖价: {data['OF']}")
print(f"最新成交价: {data['LA']}  |  结算价: {data['SE']}")

Histórica (Trades)

历史交易数据

http
GET https://api.remarkets.primary.com.ar/rest/data/getTrades
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &dateFrom=2026-06-01
    &dateTo=2026-06-08
Parámetros:
marketId
,
symbol
,
date
(una fecha),
dateFrom
/
dateTo
(rango),
external
(para mercados externos),
environment
(
REMARKETS
).
python
r = requests.get("https://api.remarkets.primary.com.ar/rest/data/getTrades",
    headers={"X-Auth-Token": token},
    params={"marketId": "ROFX", "symbol": "DLR/JUN26",
            "date": "2026-06-05"})
trades = r.json()["trades"]
for t in trades[:3]:
    print(f"{t['datetime']}  {t['price']}  {t['size']}")

http
GET https://api.remarkets.primary.com.ar/rest/data/getTrades
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &dateFrom=2026-06-01
    &dateTo=2026-06-08
参数:
marketId
,
symbol
,
date
(单个日期),
dateFrom
/
dateTo
(日期范围),
external
(用于外部市场),
environment
REMARKETS
)。
python
r = requests.get("https://api.remarkets.primary.com.ar/rest/data/getTrades",
    headers={"X-Auth-Token": token},
    params={"marketId": "ROFX", "symbol": "DLR/JUN26",
            "date": "2026-06-05"})
trades = r.json()["trades"]
for t in trades[:3]:
    print(f"{t['datetime']}  {t['price']}  {t['size']}")

Órdenes

订单

Tipos de Órdenes

订单类型

TipoDescripción
LIMIT
Orden con precio límite
MARKET
Orden a mercado
STOP_LIMIT
Orden stop que se activa como limit
MARKET_TO_LIMIT
Market que se convierte en limit
Nota: STOP_LIMIT y MARKET_TO_LIMIT no están disponibles para todos los instrumentos. Verificar
orderTypes
en el detalle del instrumento.
类型描述
LIMIT
限价订单
MARKET
市价订单
STOP_LIMIT
止损限价订单
MARKET_TO_LIMIT
转限价市价订单
注:STOP_LIMIT和MARKET_TO_LIMIT并非对所有交易工具可用。请查看交易工具详情中的
orderTypes
字段。

Time in Force (TIF)

有效期限(TIF)

TIFDescripción
DAY
Solo válida por el día. Se expira al cierre de rueda
IOC
Immediate or Cancel
FOK
Fill or Kill
GTD
Good Till Date (requiere
expireDate
)
TIF描述
DAY
仅当日有效,交易日结束后过期
IOC
立即成交或取消
FOK
全部成交或取消
GTD
有效期至指定日期(需
expireDate
参数)

Ingresar Orden (REST)

提交订单(REST)

http
GET https://api.remarkets.primary.com.ar/rest/order/newSingleOrder
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &side=BUY
    &orderQty=10
    &ordType=LIMIT
    &price=1450.0
    &timeInForce=DAY
    &account=TU_CUENTA
    &cancelPrevious=False
    &iceberg=False
Parámetros:
ParámetroTipoObligatorioDescripción
marketId
String
ROFX
symbol
StringSímbolo del instrumento
side
String
BUY
o
SELL
orderQty
IntegerCantidad de contratos
ordType
String
LIMIT
o
MARKET
price
FloatCondicionalRequerido para LIMIT
timeInForce
StringNo
DAY
(default),
IOC
,
FOK
,
GTD
account
Integer/StringNúmero de cuenta
cancelPrevious
BooleanNoCancela órdenes previas del mismo contrato/lado
iceberg
BooleanNoOrden Iceberg (default: false)
displayQty
IntegerCondicionalCantidad a divulgar (para iceberg)
expireDate
DateCondicionalRequerido para GTD (formato: YYYYMMDD)
Respuesta:
json
{"status":"OK","order":{"clientId":"21581341758","proprietary":"PBCP"}}
El
clientId
es el clOrdId (Client Order ID) que se usa para consultar/cancelar la orden.
http
GET https://api.remarkets.primary.com.ar/rest/order/newSingleOrder
    ?marketId=ROFX
    &symbol=DLR/JUN26
    &side=BUY
    &orderQty=10
    &ordType=LIMIT
    &price=1450.0
    &timeInForce=DAY
    &account=TU_CUENTA
    &cancelPrevious=False
    &iceberg=False
参数:
参数类型必填描述
marketId
String
ROFX
symbol
String交易工具代码
side
String
BUY
(买入)或
SELL
(卖出)
orderQty
Integer合约数量
ordType
String
LIMIT
(限价)或
MARKET
(市价)
price
Float条件必填限价订单需填写
timeInForce
String默认
DAY
,可选
IOC
,
FOK
,
GTD
account
Integer/String账户编号
cancelPrevious
Boolean是否取消同一工具同一方向的先前订单
iceberg
Boolean是否为冰山订单(默认:false)
displayQty
Integer条件必填冰山订单需填写显示数量
expireDate
Date条件必填GTD订单需填写(格式:YYYYMMDD)
响应:
json
{"status":"OK","order":{"clientId":"21581341758","proprietary":"PBCP"}}
clientId
clOrdId(客户订单ID),用于查询/取消订单。

Ingresar Orden (WebSocket)

提交订单(WebSocket)

json
{"type":"no","product":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "price":185,"quantity":23,"side":"BUY","account":"20","iceberg":false}
Para identificar la orden vía WebSocket, incluir
wsClOrdId
:
json
{"type":"no","product":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "price":185,"quantity":23,"side":"BUY","account":"20",
 "iceberg":false,"wsClOrdId":"mioid-unico-123"}
Respuesta WebSocket (Execution Report):
json
{"type":"or","orderReport":{"orderId":"1128056","clOrdId":"user14545...",
 "status":"PENDING_NEW","text":"Enviada","wsClOrdId":"mioid-unico-123"}}
Importante: El
wsClOrdId
solo aparece en el primer execution report. Luego se debe usar el
clOrdId
devuelto para seguimiento.
json
{"type":"no","product":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "price":185,"quantity":23,"side":"BUY","account":"20","iceberg":false}
通过WebSocket提交订单时,可添加
wsClOrdId
标识订单:
json
{"type":"no","product":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "price":185,"quantity":23,"side":"BUY","account":"20",
 "iceberg":false,"wsClOrdId":"mioid-unico-123"}
WebSocket响应(执行报告):
json
{"type":"or","orderReport":{"orderId":"1128056","clOrdId":"user14545...",
 "status":"PENDING_NEW","text":"已发送","wsClOrdId":"mioid-unico-123"}}
重要提示:
wsClOrdId
仅在首次执行报告中出现。后续需使用返回的
clOrdId
进行跟踪。

Reemplazar Orden

修改订单

http
GET https://api.remarkets.primary.com.ar/rest/order/replaceById
    ?clOrdId=user144733478280357
    &proprietary=api
    &price=17
    &orderQty=10
http
GET https://api.remarkets.primary.com.ar/rest/order/replaceById
    ?clOrdId=user144733478280357
    &proprietary=api
    &price=17
    &orderQty=10

Cancelar Orden

取消订单

http
GET https://api.remarkets.primary.com.ar/rest/order/cancelById
    ?clOrdId=ajduj3l13ieci2jr4ck
    &proprietary=PBCP
http
GET https://api.remarkets.primary.com.ar/rest/order/cancelById
    ?clOrdId=ajduj3l13ieci2jr4ck
    &proprietary=PBCP

Cancelar por WebSocket

通过WebSocket取消订单

json
{"type":"co","clientId":"user114121092035207","proprietary":"PBCP"}
json
{"type":"co","clientId":"user114121092035207","proprietary":"PBCP"}

Consultar Estado de la Orden (REST)

查询订单状态(REST)

EndpointDescripción
GET /rest/order/id?clOrdId=...&proprietary=api
Último estado del request
GET /rest/order/allById?clOrdId=...&proprietary=api
Todos los estados del request
GET /rest/order/byOrderId?orderId=...
Estado por Order ID
GET /rest/order/actives?accountId=10
Órdenes activas (NEW o PARTIALLY_FILLED)
GET /rest/order/filleds?accountId=10
Órdenes total o parcialmente operadas
GET /rest/order/all?accountId=10
Todos los estados de la cuenta
GET /rest/order/byExecId?execId=T1234567
Estado por Execution ID
端点描述
GET /rest/order/id?clOrdId=...&proprietary=api
查询订单最新状态
GET /rest/order/allById?clOrdId=...&proprietary=api
查询订单所有状态历史
GET /rest/order/byOrderId?orderId=...
通过Order ID查询状态
GET /rest/order/actives?accountId=10
查询账户有效订单(NEW或PARTIALLY_FILLED状态)
GET /rest/order/filleds?accountId=10
查询账户已成交订单(全部或部分成交)
GET /rest/order/all?accountId=10
查询账户所有订单状态
GET /rest/order/byExecId?execId=T1234567
通过Execution ID查询状态

Execution Reports (WebSocket)

执行报告(WebSocket)

Suscribirse a una cuenta:
json
{"type":"os","account":{"id":"40"}}
Varias cuentas:
json
{"type":"os","accounts":[{"id":"40"},{"id":"4000"}]}
Todas las cuentas:
json
{"type":"os"}
Solo órdenes activas:
json
{"type":"os","snapshotOnlyActive":true}

订阅单个账户:
json
{"type":"os","account":{"id":"40"}}
订阅多个账户:
json
{"type":"os","accounts":[{"id":"40"},{"id":"4000"}]}
订阅所有账户:
json
{"type":"os"}
仅订阅有效订单:
json
{"type":"os","snapshotOnlyActive":true}

Risk API

Risk API

La Risk API usa HTTP Basic Auth con el mismo user/password, no token. Requiere el header
Authorization: Basic <base64>
adicionalmente al
X-Auth-Token
.
python
import base64
auth = base64.b64encode(f"{user}:{password}".encode()).decode()
headers = {"X-Auth-Token": token, "Authorization": f"Basic {auth}"}
Risk API使用HTTP Basic认证,使用与之前相同的用户名/密码,无需token。除
X-Auth-Token
外,还需添加请求头
Authorization: Basic <base64>
python
import base64
auth = base64.b64encode(f"{user}:{password}".encode()).decode()
headers = {"X-Auth-Token": token, "Authorization": f"Basic {auth}"}

Posiciones de una Cuenta

账户头寸

http
GET https://api.remarkets.primary.com.ar/rest/risk/position/getPositions/{accountName}
python
r = requests.get(f"https://api.remarkets.primary.com.ar/rest/risk/position/getPositions/TU_CUENTA",
    headers=headers)
positions = r.json()["positions"]
for p in positions:
    print(f"{p['symbol']}  Buy:{p['buySize']}  Sell:{p['sellSize']}  Diff:{p['totalDiff']}")
http
GET https://api.remarkets.primary.com.ar/rest/risk/position/getPositions/{accountName}
python
r = requests.get(f"https://api.remarkets.primary.com.ar/rest/risk/position/getPositions/TU_CUENTA",
    headers=headers)
positions = r.json()["positions"]
for p in positions:
    print(f"{p['symbol']}  买入:{p['buySize']}  卖出:{p['sellSize']}  差额:{p['totalDiff']}")

Posiciones Detalladas

详细头寸

http
GET https://api.remarkets.primary.com.ar/rest/risk/detailedPosition/{accountName}
Devuelve desglose por instrumento con:
contractType
,
marketPrice
,
currency
,
exchangeRate
,
contractMultiplier
,
buyCurrentSize
,
sellCurrentSize
,
detailedDailyDiff
.
http
GET https://api.remarkets.primary.com.ar/rest/risk/detailedPosition/{accountName}
返回按工具拆分的详情,包含:
contractType
,
marketPrice
,
currency
,
exchangeRate
,
contractMultiplier
,
buyCurrentSize
,
sellCurrentSize
,
detailedDailyDiff

Reporte de Cuenta

账户报告

http
GET https://api.remarkets.primary.com.ar/rest/risk/accountReport/{accountName}
python
import base64
auth = base64.b64encode(f"{user}:{password}".encode()).decode()
headers = {"X-Auth-Token": token, "Authorization": f"Basic {auth}"}
r = requests.get(f"https://api.remarkets.primary.com.ar/rest/risk/accountReport/TU_CUENTA",
    headers=headers)
data = r.json()["accountData"]
print(f"Colateral: {data['collateral']}")
print(f"Margen: {data['margin']}")
print(f"Disponible: {data['availableToCollateral']}")
http
GET https://api.remarkets.primary.com.ar/rest/risk/accountReport/{accountName}
python
import base64
auth = base64.b64encode(f"{user}:{password}".encode()).decode()
headers = {"X-Auth-Token": token, "Authorization": f"Basic {auth}"}
r = requests.get(f"https://api.remarkets.primary.com.ar/rest/risk/accountReport/TU_CUENTA",
    headers=headers)
data = r.json()["accountData"]
print(f"保证金: {data['collateral']}")
print(f"占用保证金: {data['margin']}")
print(f"可用保证金: {data['availableToCollateral']}")

Saldos por moneda

各币种余额

for moneda, saldo in data['detailedAccountReports']['0']['currencyBalance']['detailedCurrencyBalance'].items(): print(f" {moneda}: consumido={saldo['consumed']} disponible={saldo['available']}")

---
for moneda, saldo in data['detailedAccountReports']['0']['currencyBalance']['detailedCurrencyBalance'].items(): print(f" {moneda}: 已占用={saldo['consumed']} 可用={saldo['available']}")

---

WebSocket

WebSocket

URL:
wss://api.remarkets.primary.com.ar/
La API WebSocket recibe mensajes asíncronos. El token se envía como header en la conexión:
python
import websocket

ws = websocket.WebSocketApp(
    "wss://api.remarkets.primary.com.ar/",
    header=[f"X-Auth-Token: {token}"],
    on_open=on_open,
    on_message=on_message,
    ...
)
ws.run_forever()
Los mensajes tienen el formato:
typeSignificado
no
New Order (enviar orden)
co
Cancel Order (cancelar orden)
or
Order Report (execution report recibido)
os
Order Subscription (suscribirse a reports)
smd
Subscribe Market Data
Md
Market Data (recibido)
URL:
wss://api.remarkets.primary.com.ar/
WebSocket API接收异步消息。需在连接请求头中携带token:
python
import websocket

ws = websocket.WebSocketApp(
    "wss://api.remarkets.primary.com.ar/",
    header=[f"X-Auth-Token: {token}"],
    on_open=on_open,
    on_message=on_message,
    ...
)
ws.run_forever()
消息格式如下:
type含义
no
提交新订单
co
取消订单
or
接收执行报告
os
订阅订单报告
smd
订阅市场数据
Md
接收市场数据

Market Data por WebSocket

通过WebSocket获取市场数据

json
{"type":"smd","level":1,"entries":["OF","BI","LA"],
 "products":[{"symbol":"DLR/JUN26","marketId":"ROFX"}],"depth":2}
Respuesta:
json
{"type":"Md","instrumentId":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "marketData":{"OF":[{"price":189,"size":21},{"price":188,"size":13}]}}

json
{"type":"smd","level":1,"entries":["OF","BI","LA"],
 "products":[{"symbol":"DLR/JUN26","marketId":"ROFX"}],"depth":2}
响应:
json
{"type":"Md","instrumentId":{"marketId":"ROFX","symbol":"DLR/JUN26"},
 "marketData":{"OF":[{"price":189,"size":21},{"price":188,"size":13}]}}

Estados de una Orden

订单状态

EstadoSignificado
PENDING_NEW
Enviada al mercado, aún no procesada
NEW
Aceptada, activa en el book
PARTIALLY_FILLED
Parcialmente operada
FILLED
Totalmente operada
CANCELLED
Cancelada
REJECTED
Rechazada (ver
text
para motivo)
PENDING_CANCEL
Cancelación en proceso
PENDING_REPLACE
Reemplazo en proceso
REPLACED
Reemplazada
PENDING_APPROVAL
Pendiente de aprobación

状态含义
PENDING_NEW
已发送至市场,尚未处理
NEW
已被接受,在订单簿中处于活跃状态
PARTIALLY_FILLED
部分成交
FILLED
全部成交
CANCELLED
已取消
REJECTED
已拒绝(查看
text
字段获取原因)
PENDING_CANCEL
取消中
PENDING_REPLACE
修改中
REPLACED
已修改
PENDING_APPROVAL
待审批

Errores Comunes

常见错误

ErrorCausaSolución
401 UnauthorizedToken inválido o expiradoRenovar con
/auth/getToken
"No tiene acceso a la cuenta"
Account ID incorrectoVerificar
accountId
"Product doesn't exist"
Symbol incorrectoVerificar símbolo con
instruments/all
"Access Denied"
Sin permisos para el endpointVerificar segmento/método
"Ruta invalida"
Endpoint no existeRevisar URL
Bid/Offer vacíosMercado cerrado o sin liquidezConsultar en horario de rueda

错误原因解决方案
401 UnauthorizedToken无效或已过期通过
/auth/getToken
刷新token
"No tiene acceso a la cuenta"
账户ID错误检查
accountId
"Product doesn't exist"
工具代码错误通过
instruments/all
检查代码
"Access Denied"
无该端点访问权限检查交易板块/请求方法
"Ruta invalida"
端点不存在检查URL
买价/卖价为空市场闭市或缺乏流动性在交易时段查询

Scripts de Ejemplo

示例脚本

Ver ./scripts/:
bash
undefined
查看 ./scripts/:
bash
undefined

Autenticación y token (opcional, los scripts hacen login automático)

认证和token(可选,脚本会自动登录)

export PRIMARY_USER="tu_usuario" export PRIMARY_PASSWORD="tu_password" export PRIMARY_ACCOUNT="TU_CUENTA"
export PRIMARY_USER="你的用户名" export PRIMARY_PASSWORD="你的密码" export PRIMARY_ACCOUNT="你的账户"

Listar segmentos e instrumentos

列出交易板块和工具

python scripts/instruments.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
python scripts/instruments.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD

Market data de un futuro

获取期货市场数据

python scripts/market_data.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbol DLR/JUN26 --entries BI,OF,LA
python scripts/market_data.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbol DLR/JUN26 --entries BI,OF,LA

Ver reporte de cuenta

查看账户报告

python scripts/check_account.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--account TU_CUENTA
python scripts/check_account.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--account 你的账户

Ver posiciones

查看头寸

python scripts/check_positions.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--account TU_CUENTA
python scripts/check_positions.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--account 你的账户

Enviar orden (¡cuidado! orden real en live)

提交订单(注意!生产环境为真实订单)

python scripts/place_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbol DLR/JUN26 --side BUY --qty 1 --type LIMIT --price 1450 --account TU_CUENTA
python scripts/place_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbol DLR/JUN26 --side BUY --qty 1 --type LIMIT --price 1450 --account 你的账户

WebSocket: Market Data en tiempo real

WebSocket: 实时市场数据

python scripts/websocket_md.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbols DLR/JUN26 --entries BI,OF,LA --depth 3
python scripts/websocket_md.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbols DLR/JUN26 --entries BI,OF,LA --depth 3

WebSocket: Execution Reports

WebSocket: 执行报告

python scripts/websocket_orders.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--account TU_CUENTA
python scripts/websocket_orders.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--account 你的账户

WebSocket: Enviar orden (requiere suscripción a execution reports aparte)

WebSocket: 提交订单(需单独订阅执行报告)

python scripts/websocket_send_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbol DLR/JUN26 --side BUY --qty 1 --type LIMIT --price 1450 --account TU_CUENTA
python scripts/websocket_send_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--symbol DLR/JUN26 --side BUY --qty 1 --type LIMIT --price 1450 --account 你的账户

WebSocket: Cancelar orden

WebSocket: 取消订单

python scripts/websocket_send_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--cancel --clordid user12345... --proprietary PBCP

---
python scripts/websocket_send_order.py --user $PRIMARY_USER --password $PRIMARY_PASSWORD
--cancel --clordid user12345... --proprietary PBCP

---

Glosario de Campos

字段术语表

CampoDescripción
clOrdId
Client Order ID — ID del request al mercado
orderId
Order ID — ID de la orden en el mercado
execId
Execution ID — ID de una ejecución particular
proprietary
Usuario FIX que envió la orden (
PBCP
o
ISV_PBCP
)
wsClOrdId
ID de orden enviada por WebSocket (solo en 1er report)
avgPx
Precio promedio operado
cumQty
Cantidad acumulada operada
leavesQty
Cantidad remanente
lastPx
Último precio operado
lastQty
Última cantidad operada
transactTime
Fecha y hora de la transacción
tickSize
Incremento mínimo de cantidad
minPriceIncrement
Incremento mínimo de precio (tick price)
contractMultiplier
Multiplicador del contrato
maturityDate
Fecha de vencimiento
priceConvertionFactor
Factor para precio unitario
lowLimitPrice
Límite mínimo de precio
highLimitPrice
Límite máximo de precio
字段描述
clOrdId
客户订单ID — 发送至市场的请求ID
orderId
订单ID — 市场中的订单ID
execId
执行ID — 单次成交的ID
proprietary
发送订单的FIX用户(
PBCP
ISV_PBCP
wsClOrdId
WebSocket提交的订单ID(仅在首次报告中出现)
avgPx
平均成交价
cumQty
累计成交量
leavesQty
剩余未成交量
lastPx
最新成交价
lastQty
最新成交数量
transactTime
交易日期和时间
tickSize
最小数量增量
minPriceIncrement
最小价格增量(报价单位)
contractMultiplier
合约乘数
maturityDate
到期日
priceConvertionFactor
单位价格转换因子
lowLimitPrice
最低价格限制
highLimitPrice
最高价格限制