Referência da API¶
Conceitos comuns ¶
Volume, preços, tipos de ordem e tempo em vigor
Volume¶
O volume é especificado em cêntimos (unidades de 0,0000001 lotes).
| Lotes | Volume (cêntimos) |
|---|---|
| 0,01 | 100.000 |
| 0,1 | 1.000.000 |
| 1,0 | 10.000.000 |
Preços¶
Os valores de preço estão em pipettes. Para converter: display_price = pipette_value / 10^pipDigits
Para EURUSD (5 dígitos), um valor de pipette de 112345 = 1,12345.
Tipos de ordem¶
| Tipo | Descrição | Campos obrigatórios |
|---|---|---|
MARKET | Executar imediatamente ao preço atual | symbolId, tradeSide, volume |
LIMIT | Executar ao preço limite ou melhor | + limitPrice |
STOP | Acionar quando o mercado atingir o preço stop | + stopPrice |
MARKET_RANGE | Executar dentro de um intervalo de preços | + baseSlippagePrice |
STOP_LIMIT | Ordem limite acionada ao preço stop | + stopPrice, limitPrice |
Tempo em vigor¶
| Política | Descrição |
|---|---|
GOOD_TILL_CANCEL | A ordem permanece ativa até ser executada ou cancelada |
GOOD_TILL_DATE | A ordem expira no expirationTimestamp especificado |
IMMEDIATE_OR_CANCEL | Executar o que estiver disponível imediatamente, cancelar o resto |
Informações da conta ¶
GET /v1/balance Get account balance
Devolve o saldo da conta, capital e margem livre.
Sem parâmetros.
200 Resposta bem-sucedida
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Campo | Tipo | Descrição |
|---|---|---|
balance | double | Saldo da conta na moeda de depósito |
equity | double | Saldo + P&L flutuante |
freeMargin | double | Margem disponível para novas negociações |
balanceVersion | int64 | Contador de versão do saldo |
moneyDigits | int32 | Casas decimais para valores monetários |
depositAssetId | int64 | ID do ativo da moeda de depósito |
GET /v1/symbols Obter símbolos disponíveis
Devolve todos os símbolos disponíveis para negociação na conta.
Sem 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 | Descrição |
|---|---|---|
symbolId | int64 | ID do símbolo (usado noutras chamadas de API) |
symbolName | string | Nome do símbolo (por exemplo, "EURUSD") |
enabled | boolean | Se o símbolo é negociável |
baseAssetId | int64 | ID do ativo base |
quoteAssetId | int64 | ID do ativo de cotação |
description | string | Descrição legível |
GET /v1/assets Obter ativos disponíveis
Devolve os ativos disponíveis (moedas).
Sem parâmetros.
200 Array de objetos Asset
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Campo | Tipo | Descrição |
|---|---|---|
assetId | int64 | ID do ativo |
name | string | Código do ativo (por exemplo, "USD") |
displayName | string | Nome de exibição |
Dados de mercado ¶
GET /v1/prices Obter preços spot
Devolve os preços de venda/compra atuais para os símbolos especificados. Isto é um instantâneo – a API não suporta streaming.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
symbolId | query | int64[] | IDs de símbolos separados por vírgulas |
200 Array de objetos SpotPrice
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Campo | Tipo | Descrição |
|---|---|---|
symbolId | int64 | ID do Símbolo |
bid | int64 | Melhor preço de venda (pipettes) |
ask | int64 | Melhor preço de compra (pipettes) |
high | int64 | Máximo da sessão (pipettes) |
low | int64 | Mínimo da sessão (pipettes) |
sessionClose | int64 | Fecho da sessão anterior (pipettes) |
timestamp | int64 | Timestamp da cotação (epoch ms) |
GET /v1/trendbars Obter dados históricos OHLCV
Devolve dados históricos de candlestick (OHLCV) para um símbolo.
| Nome | Localizado em | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|---|
symbolId | query | int64 | – | ID do Símbolo | |
period | query | string | – | Período da barra | |
fromTimestamp | query | string | – | Hora de início (ISO-8601) | |
toTimestamp | query | string | – | Hora de fim (ISO-8601) | |
count | query | int32 | 100 | Máximo de barras a devolver |
Períodos disponíveis
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 | Descrição |
|---|---|---|
timestamp | int64 | Hora de abertura da barra (epoch ms) |
open | double | Preço de abertura (pipettes) |
high | double | Preço máximo (pipettes) |
low | double | Preço mínimo (pipettes) |
close | double | Preço de fecho (pipettes) |
volume | int64 | Volume de ticks |
Ordens ¶
POST /v1/orders Colocar uma nova ordem
Coloca uma nova ordem de negociação. Devolve uma ExecutionResponse.
Sem parâmetros de caminho ou query.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
symbolId | int64 | Símbolo a negociar | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY ou SELL | |
volume | int64 | Volume em cêntimos | |
limitPrice | double | Preço de limite – obrigatório para LIMIT, STOP_LIMIT | |
stopPrice | double | Preço de acionamento do stop – obrigatório para STOP, STOP_LIMIT | |
stopLoss | double | Preço de stop loss | |
takeProfit | double | Preço de take profit | |
comment | string | Comentário de texto livre (máx. 256 carateres) | |
label | string | Etiqueta do bot (máx. 100 carateres) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Preço base para slippage – obrigatório para MARKET_RANGE | |
slippageInPoints | int32 | Slippage máximo em pontos | |
expirationTimestamp | int64 | Timestamp de expiração (epoch ms) – para GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – ordem aceite ou executada
400 INVALID_REQUEST ou TRADING_BAD_VOLUME
422 NOT_ENOUGH_MONEY
409 MARKET_CLOSED
{
"orderId": 12345,
"positionId": 67890,
"executionType": "ORDER_FILLED",
"order": { "..." : "..." },
"position": { "..." : "..." },
"deal": { "..." : "..." }
}
GET /v1/orders Obter ordens pendentes
Devolve todas as ordens pendentes (não executadas).
Sem parâmetros.
200 Array de objetos Order pendentes
PUT /v1/orders/{orderId} Alterar uma ordem pendente
Altera uma ordem pendente existente. Devolve uma ExecutionResponse.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
orderId | path | int64 | A ordem a alterar |
Qualquer subconjunto dos seguintes campos.
| Campo | Tipo | Descrição |
|---|---|---|
volume | int64 | Novo volume em cêntimos |
limitPrice | double | Novo preço limite |
stopPrice | double | Novo preço de stop |
stopLoss | double | Novo preço de stop loss |
takeProfit | double | Novo preço de take profit |
expirationTimestamp | int64 | Novo timestamp de expiração (epoch ms) |
200 ExecutionResponse com ORDER_REPLACED
404 Ordem não encontrada
DELETE /v1/orders/{orderId} Cancelar uma ordem pendente
Cancela uma ordem pendente. Devolve uma ExecutionResponse.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
orderId | path | int64 | A ordem a cancelar |
200 ExecutionResponse com ORDER_CANCELLED
404 Ordem não encontrada
GET /v1/orders/history Obter histórico de ordens
Devolve ordens históricas dentro de um intervalo de tempo.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
fromTimestamp | query | string | Hora de início (ISO-8601) | |
toTimestamp | query | string | Hora de fim (ISO-8601) |
200 OrderListResponse
| Campo | Tipo | Descrição |
|---|---|---|
orders | Order[] | Array de ordens históricas |
hasMore | boolean | Se estão disponíveis páginas adicionais |
Posições ¶
GET /v1/positions Obter posições abertas
Devolve todas as posições abertas e ordens pendentes.
Sem parâmetros.
200 Array 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
}
]
Posição
| Campo | Tipo | Descrição |
|---|---|---|
positionId | int64 | ID da posição |
symbolId | int64 | ID do Símbolo |
tradeSide | string | BUY ou SELL |
volume | int64 | Volume em cêntimos |
entryPrice | double | Preço de entrada VWAP |
stopLoss | double | Preço de stop loss |
takeProfit | double | Preço de take profit |
unrealizedPnl | double | Lucro/prejuízo flutuante |
commission | double | Comissão cobrada |
swap | double | Montante de swap |
GET /v1/positions/{positionId} Obter detalhes da posição
Devolve uma posição com as suas ordens e negócios relacionados.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
positionId | path | int64 | O ID da posição |
200 PositionDetailResponse
| Campo | Tipo | Descrição |
|---|---|---|
position | Position | Objeto de posição |
orders | Order[] | Ordens relacionadas |
deals | Deal[] | Negócios relacionados |
PUT /v1/positions/{positionId} Alterar SL/TP da posição
Atualiza o stop loss e/ou take profit de uma posição aberta. Devolve uma ExecutionResponse.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
positionId | path | int64 | O ID da posição |
| Campo | Tipo | Descrição |
|---|---|---|
stopLoss | double | Novo preço de stop loss (null para remover) |
takeProfit | double | Novo preço de take profit (null para remover) |
trailingStopLoss | boolean | Ativar trailing stop loss |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Fechar uma posição
Fecha uma posição aberta total ou parcialmente. Utilize um valor inferior ao volume total da posição para um fecho parcial. Devolve uma ExecutionResponse.
| Nome | Localizado em | Tipo | Obrigatório | Descrição |
|---|---|---|---|---|
positionId | path | int64 | O ID da posição |
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
volume | int64 | Volume a fechar em cêntimos |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – margem insuficiente para fecho parcial
Deals ¶
GET /v1/deals Obter histórico de negócios
Devolve negócios executados dentro de um intervalo de tempo.
| Nome | Localizado em | Tipo | Obrigatório | Predefinição | Descrição |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Hora de início (ISO-8601) | |
toTimestamp | query | string | – | Hora de fim (ISO-8601) | |
maxRows | query | int32 | 50 | Máximo de negócios a devolver |
200 Array 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 | Descrição |
|---|---|---|
dealId | int64 | ID da transação |
orderId | int64 | Ordem que desencadeou este negócio |
positionId | int64 | ID da posição |
symbolId | int64 | ID do Símbolo |
tradeSide | string | BUY ou SELL |
volume | int64 | Volume solicitado em cêntimos |
filledVolume | int64 | Volume completado em cêntimos |
executionPrice | double | Preço de execução |
executionTimestamp | int64 | Hora de execução (epoch ms) |
dealStatus | string | Estado – ver valores abaixo |
commission | double | Comissão cobrada |
Valores de dealStatus
| Valor | Significado |
|---|---|
FILLED | Ordem completamente completada |
PARTIALLY_FILLED | Ordem completada parcialmente |
REJECTED | Rejeitada pelo servidor de negociação |
INTERNALLY_REJECTED | Rejeitada internamente antes de chegar ao servidor |
ERROR | Ocorreu um erro durante a execução |
MISSED | Ordem perdida (por exemplo, gap no mercado) |
Schemas { #execution-response-schema } ¶
ExecutionResponse ¶
Todas as operações de colocação, alteração e cancelamento de ordens devolvem este objeto.
| Campo | Tipo | Descrição |
|---|---|---|
orderId | int64 | ID da ordem afetada |
positionId | int64 | ID da posição afetada |
executionType | string | Tipo de resultado – ver valores abaixo |
order | Order | Detalhes da ordem (se aplicável) |
position | Position | Detalhes da posição (se aplicável) |
deal | Deal | Detalhes do negócio (se aplicável) |
Valores de executionType
| Valor | Significado |
|---|---|
ORDER_ACCEPTED | Ordem pendente aceite |
ORDER_FILLED | Ordem completamente completada |
ORDER_REPLACED | Ordem alterada |
ORDER_CANCELLED | Ordem cancelada |
ORDER_EXPIRED | Ordem expirada |
ORDER_REJECTED | Ordem rejeitada |
ORDER_CANCEL_REJECTED | Pedido de cancelamento rejeitado |
ORDER_PARTIAL_FILL | Ordem completada parcialmente |
SWAP | Swap de posição aplicado |
DEPOSIT | Depósito na conta |
WITHDRAW | Levantamento da conta |
BONUS_DEPOSIT_WITHDRAW | Depósito ou levantamento de bónus |
Limites de taxa ¶
O gateway aplica limites de taxa a vários níveis.
| Nível | Descrição |
|---|---|
| Por IP | Limita o total de pedidos de um único endereço IP |
| Por utilizador | Limita o total de pedidos em todas as contas para um único token |
| Por conta | Limita os pedidos direcionados a uma única conta de negociação |
Limite de taxa excedido
Quando um limite de taxa é excedido, a API devolve 429 Too Many Requests com um cabeçalho Retry-After.
Gestão de erros ¶
Quando um pedido falha, a API devolve uma resposta de erro JSON.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Códigos de erro ¶
| Código | HTTP | Descrição |
|---|---|---|
INVALID_REQUEST | 400 | Parâmetros de pedido inválidos ou em falta |
UNAUTHORIZED | 401 | Token inválido, expirado ou em falta |
TRADING_BAD_VOLUME | 400 | O volume é inválido (abaixo do mínimo ou excede a posição) |
NOT_ENOUGH_MONEY | 422 | Margem livre insuficiente |
SYMBOL_NOT_FOUND | 404 | O ID do símbolo não existe |
MARKET_CLOSED | 409 | O mercado para o símbolo está atualmente encerrado |
MAINTENANCE | 503 | O servidor de negociação está em modo de manutenção |
TIMEOUT | 504 | O servidor de negociação não respondeu a tempo |
GATEWAY_RATE_LIMIT | 429 | Limite de taxa excedido – consulte o cabeçalho Retry-After |
Tratamento de limites de taxa
Quando recebe uma resposta 429, o cabeçalho Retry-After e o campo retryAfter indicam quantos segundos tem de aguardar antes de enviar o próximo pedido.