API WebSocket v1 - passer et annuler des ordres

Dernière mise à jour : 1 avr. 2025

Notre API WebSocket v1 prend en charge le trading via les points de terminaison addOrder et cancelOrder. Le point de terminaison addOrder est utilisé pour placer de nouveaux ordres et le point de terminaison cancelOrder est utilisé pour annuler des ordres existants (ouverts).

Les points de terminaison addOrder et cancelOrder sont tous deux des points de terminaison privés, ce qui signifie qu'ils ne peuvent être consultés que via une connexion WebSocket authentifiée.

Une connexion initiale doit être établie avec l'URL WebSocket authentifiée wss://ws-auth.kraken.com/ , qui peut ensuite être maintenue ouverte indéfiniment pendant que les ordres sont placés et annulés. Une seule connexion WebSocket est conçue pour prendre en charge plusieurs requêtes, il n'est donc pas nécessaire (ni recommandé) de se connecter/déconnecter pour chaque appel aux points de terminaison de trading.

Authentification WebSocket

Un jeton d'authentification WebSocket peut être récupéré via le point de terminaison GetWebSocketsToken de l'API REST.

Une fois qu'un jeton a été récupéré, une connexion peut être établie avec l'URL WebSocket privée wss://ws-auth.kraken.com/ et les points de terminaison addOrder et cancelOrder peuvent ensuite être utilisés indéfiniment (le jeton n'expirera pas tant qu'il est utilisé pour placer et annuler des ordres).

Notez que la clé API utilisée pour récupérer le jeton doit avoir les autorisations Modifier les ordres et Annuler/Fermer les ordres, sinon une erreur d'autorisation refusée sera reçue de l'API WebSocket.

Placer un ordre

Une fois qu'une connexion WebSocket authentifiée a été établie, un ordre peut être placé en envoyant un message comme suit :

  • {"event":"addOrder", "token":"nT9n23/7oLdq+bNHNMNJ4VvF1hiHhjTnPOaCMiB1GJ0", "pair":"XBT/USD", "type":"buy", "ordertype":"limit", "price":"9857", "volume":"0.002", "leverage":"5", "userref":"8874657"}

Une réponse sera alors reçue indiquant le statut de la requête (si l'ordre a été accepté ou rejeté). Pour un ordre accepté et placé avec succès, la réponse indiquera un statut « ok » et sera similaire à ce qui suit :

  • {"descr":"buy 0.00200000 XBTUSD @ limit 9857.0 with 5:1 leverage","event":"addOrderStatus","status":"ok","txid":"OPOUJF-BWKCL-FG5DQL"}

Pour un ordre rejeté et non placé, la réponse indiquera un statut « error », ainsi qu'un message d'erreur indiquant la raison du rejet (arguments invalides, fonds insuffisants, etc.), tel que le rejet suivant pour un ordre qui n'a pas atteint la taille minimale d'ordre :

  • {"errorMessage":"EOrder:Order minimum not met","event":"addOrderStatus","status":"error"}

Annuler un ordre

Une fois qu'une connexion WebSocket authentifiée a été établie (ou de préférence une connexion existante réutilisée), un ordre peut être annulé en envoyant un message comme suit :

  • {"event":"cancelOrder", "token":"s74Ajl83it0dNNKcF072NJ5wDmLTGIceaCbV96eWbFg", "txid":["OJZ3DI-IU6QC-ME7TVE"]}

Une réponse sera alors reçue indiquant le statut de la requête (si l'annulation a été acceptée ou rejetée). Pour un ordre annulé avec succès, la réponse indiquera un statut « ok » et sera similaire à ce qui suit :

  • {"event":"cancelOrderStatus","status":"ok"}

Pour une requête d'annulation rejetée, la réponse indiquera un statut « error », ainsi qu'un message d'erreur indiquant la raison du rejet (ID d'ordre invalide, etc.), tel que le rejet suivant pour une requête d'annulation d'un ordre qui avait déjà été annulé :

  • {"errorMessage":"EOrder:Unknown order","event":"cancelOrderStatus","status":"error"}

Notez que, contrairement au point de terminaison CancelOrder de l'API REST, il est possible de spécifier plusieurs ID de commande dans un seul message d'annulation WebSocket. Les ID de commande à annuler doivent être inclus comme entrées distinctes dans le tableau txid, comme suit :

  • {"event":"cancelOrder", "token":"c4JjTNHSurKmWDsnrGaCxIuCOa4FurCZK2ppktvT2Yo", "txid":["OLVCRZ-DNKJI-VRTZKY","O67X6E-PBGSR-GU23R5","OECCDC-T2R4V-52CR7T"]}

Besoin d’aide supplémentaire ?