Référence API¶
Concepts communs ¶
Volume, prix, types d'ordres et durée de validité
Volume¶
Le volume est spécifié en cents (unités de 0,0000001 lots).
| Lots | Volume (cents) |
|---|---|
| 0,01 | 100 000 |
| 0,1 | 1 000 000 |
| 1,0 | 10 000 000 |
Prix¶
Les valeurs de prix sont en pipettes. À convertir : display_price = pipette_value / 10^pipDigits
Pour EURUSD (5 chiffres), une valeur de pipette de 112345 = 1.12345.
Types d'ordres¶
| Type | Description | Champs requis |
|---|---|---|
MARKET | Exécuter immédiatement au prix actuel | symbolId, tradeSide, volume |
LIMIT | Exécuter au prix limite ou mieux | + limitPrice |
STOP | Déclencher lorsque le marché atteint le prix stop | + stopPrice |
MARKET_RANGE | Exécuter dans un écart de prix | + baseSlippagePrice |
STOP_LIMIT | Ordre à cours limité déclenché au prix stop | + stopPrice, limitPrice |
Durée de validité¶
| Politique | Description |
|---|---|
GOOD_TILL_CANCEL | L'ordre reste actif jusqu'à son exécution ou son annulation |
GOOD_TILL_DATE | L'ordre expire à l'expirationTimestamp spécifié |
IMMEDIATE_OR_CANCEL | Exécuter ce qui est disponible immédiatement, annuler le reste |
Informations sur le compte ¶
GET /v1/balance Get account balance
Renvoie le solde du compte, les fonds propres et la marge libre.
Aucun paramètre.
200 Réponse réussie
{
"balance": 10000.00,
"equity": 10250.75,
"freeMargin": 9800.50,
"balanceVersion": 42,
"moneyDigits": 2,
"depositAssetId": 1
}
| Champ | Type | Description |
|---|---|---|
balance | double | Solde du compte dans la devise de dépôt |
equity | double | Solde + P&P flottant |
freeMargin | double | Marge disponible pour de nouvelles transactions |
balanceVersion | int64 | Compteur de version du solde |
moneyDigits | int32 | Nombre de décimales pour les valeurs monétaires |
depositAssetId | int64 | ID de l'actif de la devise de dépôt |
GET /v1/symbols Obtenir les symboles disponibles
Renvoie tous les symboles disponibles pour le trading sur le compte.
Aucun paramètre.
200 Tableau d'objets Symbol
[
{
"symbolId": 1,
"symbolName": "EURUSD",
"enabled": true,
"baseAssetId": 2,
"quoteAssetId": 1,
"description": "Euro vs US Dollar"
}
]
Symbol
| Champ | Type | Description |
|---|---|---|
symbolId | int64 | ID du symbole (utilisé dans d'autres appels API) |
symbolName | string | Nom du symbole (par ex., « EURUSD ») |
enabled | boolean | Indique si le symbole est négociable |
baseAssetId | int64 | ID de l'actif de base |
quoteAssetId | int64 | ID de l'actif de cotation |
description | string | Description lisible |
GET /v1/assets Obtenir les actifs disponibles
Renvoie les actifs disponibles (devises).
Aucun paramètre.
200 Tableau d'objets Asset
[
{
"assetId": 1,
"name": "USD",
"displayName": "US Dollar"
}
]
Asset
| Champ | Type | Description |
|---|---|---|
assetId | int64 | ID de l'actif |
name | string | Code de l'actif (par ex., « USD ») |
displayName | string | Nom d'affichage |
Données de marché ¶
GET /v1/prices Obtenir les prix au comptant
Renvoie les prix acheteur/vendeur actuels pour les symboles spécifiés. Il s'agit d'un instantané – l'API ne prend pas en charge le streaming.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
symbolId | query | int64[] | ID de symboles séparés par des virgules |
200 Tableau d'objets SpotPrice
[
{
"symbolId": 1,
"bid": 112340,
"ask": 112355,
"high": 112890,
"low": 111950,
"sessionClose": 112100,
"timestamp": 1700000000000
}
]
SpotPrice
| Champ | Type | Description |
|---|---|---|
symbolId | int64 | ID du symbole |
bid | int64 | Meilleur cours vendeur (pipettes) |
ask | int64 | Meilleur cours acheteur (pipettes) |
high | int64 | Plus haut de la session (pipettes) |
low | int64 | Plus bas de la session (pipettes) |
sessionClose | int64 | Clôture de la session précédente (pipettes) |
timestamp | int64 | Horodatage de la cotation (epoch ms) |
GET /v1/trendbars Obtenir les données OHLCV historiques
Renvoie les données historiques en chandeliers (OHLCV) pour un symbole.
| Nom | Situé dans | Type | Requis | Par défaut | Description |
|---|---|---|---|---|---|
symbolId | query | int64 | – | ID du symbole | |
period | query | string | – | Période de la barre | |
fromTimestamp | query | string | – | Heure de début (ISO-8601) | |
toTimestamp | query | string | – | Heure de fin (ISO-8601) | |
count | query | int32 | 100 | Nombre maximal de barres à renvoyer |
Périodes 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 Tableau d'objets Trendbar
[
{
"timestamp": 1700000000000,
"open": 112340.0,
"high": 112890.0,
"low": 111950.0,
"close": 112500.0,
"volume": 4521
}
]
Trendbar
| Champ | Type | Description |
|---|---|---|
timestamp | int64 | Heure d'ouverture de la barre (epoch ms) |
open | double | Prix d'ouverture (pipettes) |
high | double | Prix le plus haut (pipettes) |
low | double | Prix le plus bas (pipettes) |
close | double | Prix de clôture (pipettes) |
volume | int64 | Volume de tick |
Ordres ¶
POST /v1/orders Placer un nouvel ordre
Place un nouvel ordre de trading. Renvoie une ExecutionResponse.
Aucun paramètre de chemin ou de requête.
| Champ | Type | Requis | Description |
|---|---|---|---|
symbolId | int64 | Symbole à trader | |
orderType | string | MARKET, LIMIT, STOP, MARKET_RANGE, STOP_LIMIT | |
tradeSide | string | BUY ou SELL | |
volume | int64 | Volume en centimes | |
limitPrice | double | Prix limite – requis pour LIMIT, STOP_LIMIT | |
stopPrice | double | Prix de déclenchement du stop – requis pour STOP, STOP_LIMIT | |
stopLoss | double | Prix du stop loss | |
takeProfit | double | Prix du take profit | |
comment | string | Commentaire en texte libre (max. 256 caractères) | |
label | string | Libellé du bot (max. 100 caractères) | |
timeInForce | string | GOOD_TILL_CANCEL, GOOD_TILL_DATE, IMMEDIATE_OR_CANCEL | |
baseSlippagePrice | double | Prix de base pour le slippage – requis pour MARKET_RANGE | |
slippageInPoints | int32 | Slippage max. en points | |
expirationTimestamp | int64 | Horodatage d'expiration (epoch ms) – pour GOOD_TILL_DATE |
{
"symbolId": 1,
"orderType": "MARKET",
"tradeSide": "BUY",
"volume": 10000000,
"stopLoss": 112000,
"takeProfit": 113000
}
200 ExecutionResponse – ordre accepté ou exécuté
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 Obtenir les ordres en attente
Renvoie tous les ordres en cours (non exécutés).
Aucun paramètre.
200 Tableau d'objets Order en attente
PUT /v1/orders/{orderId} Modifier un ordre en attente
Modifie un ordre en cours existant. Renvoie une ExecutionResponse.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
orderId | path | int64 | L'ordre à modifier |
N'importe quel sous-ensemble des champs suivants.
| Champ | Type | Description |
|---|---|---|
volume | int64 | Nouveau volume en centimes |
limitPrice | double | Nouveau prix limite |
stopPrice | double | Nouveau prix stop |
stopLoss | double | Nouveau prix de stop loss |
takeProfit | double | Nouveau prix de take profit |
expirationTimestamp | int64 | Nouvel horodatage d'expiration (epoch ms) |
200 ExecutionResponse avec ORDER_REPLACED
404 Ordre introuvable
DELETE /v1/orders/{orderId} Annuler un ordre en attente
Annule un ordre en cours. Renvoie une ExecutionResponse.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
orderId | path | int64 | L'ordre à annuler |
200 ExecutionResponse avec ORDER_CANCELLED
404 Ordre introuvable
GET /v1/orders/history Obtenir l'historique des ordres
Renvoie l'historique des ordres dans une plage horaire.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
fromTimestamp | query | string | Heure de début (ISO-8601) | |
toTimestamp | query | string | Heure de fin (ISO-8601) |
200 OrderListResponse
| Champ | Type | Description |
|---|---|---|
orders | Order[] | Tableau des ordres historiques |
hasMore | boolean | Indique si des pages supplémentaires sont disponibles |
Positions ¶
GET /v1/positions Obtenir les positions ouvertes
Renvoie toutes les positions ouvertes et les ordres en cours.
Aucun paramètre.
200 Tableau d'objets 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
}
]
Position
| Champ | Type | Description |
|---|---|---|
positionId | int64 | Numéro de la position |
symbolId | int64 | ID du symbole |
tradeSide | string | BUY ou SELL |
volume | int64 | Volume en centimes |
entryPrice | double | Prix d'entrée PMPV |
stopLoss | double | Prix du stop loss |
takeProfit | double | Prix du take profit |
unrealizedPnl | double | Profit/perte flottant(e) |
commission | double | Commission facturée |
swap | double | Montant du swap |
GET /v1/positions/{positionId} Obtenir les détails de la position
Renvoie une position avec ses ordres et transactions associés.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
positionId | path | int64 | L'ID de la position |
200 PositionDetailResponse
| Champ | Type | Description |
|---|---|---|
position | Position | Objet Position |
orders | Order[] | Ordres associés |
deals | Deal[] | Transactions associées |
PUT /v1/positions/{positionId} Modifier le SL/TP de la position
Met à jour le stop loss et/ou le take profit pour une position ouverte. Renvoie une ExecutionResponse.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
positionId | path | int64 | L'ID de la position |
| Champ | Type | Description |
|---|---|---|
stopLoss | double | Nouveau prix de stop loss (null pour supprimer) |
takeProfit | double | Nouveau prix de take profit (null pour supprimer) |
trailingStopLoss | boolean | Activer le stop loss suiveur |
{
"stopLoss": 111500,
"takeProfit": 113500,
"trailingStopLoss": false
}
POST /v1/positions/{positionId}/close Fermer une position
Ferme une position ouverte totalement ou partiellement. Utilisez une valeur inférieure au volume total de la position pour une fermeture partielle. Renvoie une ExecutionResponse.
| Nom | Situé dans | Type | Requis | Description |
|---|---|---|---|---|
positionId | path | int64 | L'ID de la position |
| Champ | Type | Requis | Description |
|---|---|---|---|
volume | int64 | Volume à fermer en centièmes |
{
"volume": 10000000
}
422 NOT_ENOUGH_MONEY – marge insuffisante pour une fermeture partielle
Transactions ¶
GET /v1/deals Obtenir l'historique des transactions
Renvoie les transactions exécutées dans une plage horaire.
| Nom | Situé dans | Type | Requis | Par défaut | Description |
|---|---|---|---|---|---|
fromTimestamp | query | string | – | Heure de début (ISO-8601) | |
toTimestamp | query | string | – | Heure de fin (ISO-8601) | |
maxRows | query | int32 | 50 | Nombre maximum de transactions à renvoyer |
200 Tableau d'objets 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
| Champ | Type | Description |
|---|---|---|
dealId | int64 | ID de la transaction |
orderId | int64 | Ordre ayant déclenché cette transaction |
positionId | int64 | Numéro de la position |
symbolId | int64 | ID du symbole |
tradeSide | string | BUY ou SELL |
volume | int64 | Volume demandé en centièmes |
filledVolume | int64 | Volume exécuté en centièmes |
executionPrice | double | Prix d'exécution |
executionTimestamp | int64 | Heure d'exécution (epoch ms) |
dealStatus | string | Statut – voir les valeurs ci-dessous |
commission | double | Commission facturée |
Valeurs de dealStatus
| Valeur | Signification |
|---|---|
FILLED | Ordre entièrement exécuté |
PARTIALLY_FILLED | Ordre partiellement conclu |
REJECTED | Rejeté par le serveur de trading |
INTERNALLY_REJECTED | Rejeté en interne avant d'atteindre le serveur |
ERROR | Une erreur s'est produite lors de l'exécution |
MISSED | Ordre manqué (par ex., écart de marché) |
Schémas { #execution-response-schema } ¶
ExecutionResponse ¶
Toutes les opérations de placement, de modification et d'annulation d'ordres renvoient cet objet.
| Champ | Type | Description |
|---|---|---|
orderId | int64 | ID de l'ordre affecté |
positionId | int64 | ID de la position affectée |
executionType | string | Type de résultat – voir les valeurs ci-dessous |
order | Order | Détails de l'ordre (le cas échéant) |
position | Position | Détails de la position (le cas échéant) |
deal | Deal | Détails de la transaction (le cas échéant) |
Valeurs executionType
| Valeur | Signification |
|---|---|
ORDER_ACCEPTED | Ordre en cours accepté |
ORDER_FILLED | Ordre entièrement conclu |
ORDER_REPLACED | Ordre modifié |
ORDER_CANCELLED | Ordre annulé |
ORDER_EXPIRED | Ordre expiré |
ORDER_REJECTED | Ordre refusé |
ORDER_CANCEL_REJECTED | Demande d'annulation rejetée |
ORDER_PARTIAL_FILL | Ordre partiellement conclu |
SWAP | Swap de position appliqué |
DEPOSIT | Dépôt sur le compte |
WITHDRAW | Retrait du compte |
BONUS_DEPOSIT_WITHDRAW | Dépôt ou retrait de bonus |
Limites de taux ¶
La passerelle applique des limites de taux à plusieurs niveaux.
| Niveau | Description |
|---|---|
| Par IP | Limite le nombre total de requêtes provenant d'une seule adresse IP |
| Par utilisateur | Limite le nombre total de requêtes sur tous les comptes pour un seul jeton |
| Par compte | Limite les requêtes ciblant un seul compte de trading |
Limite de taux dépassée
Lorsqu'une limite de taux est dépassée, l'API renvoie 429 Too Many Requests avec un en-tête Retry-After.
Gestion des erreurs ¶
Lorsqu'une requête échoue, l'API renvoie une réponse d'erreur JSON.
{
"error": {
"code": "NOT_ENOUGH_MONEY",
"message": "Insufficient free margin for this order",
"httpStatus": 422,
"retryAfter": null
}
}
Codes d'erreur ¶
| Code | HTTP | Description |
|---|---|---|
INVALID_REQUEST | 400 | Paramètres de requête invalides ou manquants |
UNAUTHORIZED | 401 | Jeton invalide, expiré ou manquant |
TRADING_BAD_VOLUME | 400 | Le volume est invalide (inférieur au minimum ou dépasse la position) |
NOT_ENOUGH_MONEY | 422 | Marge libre insuffisante |
SYMBOL_NOT_FOUND | 404 | L'ID du symbole n'existe pas |
MARKET_CLOSED | 409 | Le marché pour le symbole est actuellement fermé |
MAINTENANCE | 503 | Le serveur de trading est en mode maintenance |
TIMEOUT | 504 | Le serveur de trading n'a pas répondu à temps |
GATEWAY_RATE_LIMIT | 429 | Limite de taux dépassée – voir l'en-tête Retry-After |
Gestion de la limite de taux
Lorsque vous recevez une réponse 429, l'en-tête Retry-After et le champ retryAfter indiquent combien de secondes vous devez attendre avant d'envoyer la requête suivante.