Mise à jour API Bitmex sgcWebSockets

· Fonctionnalités
Intégration de l'API WebSocket et REST BitMEX dans Delphi

BitMEX est une plateforme leader d'échange de dérivés crypto spécialisée dans le trading à effet de levier de futures et de contrats perpétuels. Le composant TsgcWSAPI_Bitmex fournit aux développeurs Delphi un accès à la fois WebSocket et REST, permettant le streaming de données de marché en temps réel, l'exécution d'ordres, la gestion des positions et des opérations de compte complètes depuis un seul composant.

Table des matières

Aperçu

Contrairement à de nombreux composants d'exchange qui ne prennent en charge que WebSocket, le composant TsgcWSAPI_Bitmex propose une approche à double interface. L'API WebSocket fournit le streaming en temps réel des trades, mises à jour de carnet d'ordres, quotes et données de compte via des abonnements par topic. L'API REST (accessible via la propriété REST_API) fournit des méthodes synchrones requête-réponse pour passer des ordres, gérer les positions et interroger les données de marché. Cette combinaison est idéale pour construire des applications de trading complètes qui ont besoin à la fois de flux de données en direct et d'une exécution d'ordres précise.

Premiers pas

Crée un TsgcWebSocketClient et un composant TsgcWSAPI_Bitmex, lie-les et configure tes identifiants. La connexion WebSocket est activée via le client, tandis que l'API REST est accessible via la propriété REST_API.

oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
Note : les abonnements WebSocket publics et les endpoints REST publics ne nécessitent pas d'identifiants API. L'authentification n'est requise que pour les topics privés (execution, margin, order, position) et les méthodes REST de trading/position.

API WebSocket

L'API WebSocket BitMEX utilise un modèle d'abonnement par topic. Tu t'abonnes à un topic (optionnellement filtré par instrument) et reçois un flux continu de mises à jour. Le composant fournit trois méthodes WebSocket principales.

Méthode Description
Subscribe S'abonner à un flux de topic, optionnellement filtré par symbole d'instrument.
Unsubscribe Se désabonner d'un flux de topic précédemment souscrit.
Authenticate Authentifier la session WebSocket pour l'accès aux topics privés.

Topics disponibles

Les topics définissent le type de données que tu reçois. Tu peux t'abonner à plusieurs topics simultanément. Le format d'abonnement est topic:symbol où le filtre symbol est optionnel.

Topic Auth requise Description
trade Non Exécutions de trades en direct sur l'exchange.
instrument No Données d'instruments incluant taux de funding et infos de settlement.
orderBookL2 No Carnet d'ordres Level 2 complet avec mises à jour incrémentales.
quote No Meilleurs bid et ask en tête de carnet.
execution Oui Exécutions et fills de trades de ton compte.
margin Yes Mises à jour du solde de marge et du solde disponible du compte.
order Yes Tes ordres ouverts et mises à jour de statut d'ordre.
position Yes Tes positions ouvertes et mises à jour du P&L latent.

Exemples d'abonnement WebSocket

// S'abonner aux trades XBTUSD
oBitmex.Subscribe('trade:XBTUSD');
// S'abonner au carnet d'ordres Level 2
oBitmex.Subscribe('orderBookL2:XBTUSD');
// S'abonner aux meilleurs bid/ask
oBitmex.Subscribe('quote:XBTUSD');
// S'authentifier pour les topics privés
oBitmex.Authenticate;
// S'abonner aux mises à jour de tes ordres (auth requise)
oBitmex.Subscribe('order');
// S'abonner aux mises à jour de tes positions (auth requise)
oBitmex.Subscribe('position');
// Se désabonner des trades
oBitmex.Unsubscribe('trade:XBTUSD');

API REST : données de marché

L'API REST est accessible via la propriété REST_API du composant. Les méthodes de données de marché retournent des chaînes JSON que tu peux parser dans ton application. Ce sont des appels synchrones qui retournent immédiatement avec les données demandées.

Method Description
GetInstruments Récupérer la liste de tous les instruments disponibles sur l'exchange.
GetInstrumentsActive Récupérer uniquement les instruments activement tradés.
GetOrderBook Récupérer le snapshot actuel du carnet d'ordres pour un instrument.
GetQuotes Récupérer les données de quote (bid/ask) récentes.
GetTrades Récupérer les données de trades publics récents.
GetExecutions Récupérer les données brutes d'exécution de ton compte.
GetExecutionsTradeHistory Récupérer l'historique d'exécution des trades de ton compte.
// Récupérer le carnet d'ordres pour XBTUSD
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// Récupérer tous les instruments actifs
ShowMessage(oBitmex.REST_API.GetInstrumentsActive);
// Récupérer les trades récents
ShowMessage(oBitmex.REST_API.GetTrades('XBTUSD'));
// Récupérer les quotes récentes
ShowMessage(oBitmex.REST_API.GetQuotes('XBTUSD'));

API REST : trading

Les méthodes de trading permettent de placer, modifier et annuler des ordres. L'API REST prend en charge plusieurs types d'ordres dont market, limit, stop et stop-limit. Toutes les méthodes de trading nécessitent une authentification.

Method Description
PlaceOrder Placer un nouvel ordre avec un contrôle complet des paramètres.
PlaceMarketOrder Placer un ordre market qui s'exécute immédiatement au meilleur prix.
PlaceLimitOrder Placer un ordre limit à un prix spécifié.
PlaceStopOrder Placer un ordre stop (market) déclenché à un stop price.
PlaceStopLimitOrder Placer un ordre stop-limit avec à la fois un prix de déclenchement et un prix limit.
AmendOrder Modifier le prix, la quantité ou d'autres paramètres d'un ordre existant.
CancelOrder Annuler un ordre spécifique par son identifiant.
CancelAllOrders Annuler tous les ordres ouverts en une seule fois.
CancelAllOrdersAfter Définir un dead man's switch qui annule tous les ordres après un timeout.
GetOrders Récupérer tous les ordres, optionnellement filtrés par statut.

Exemples de placement d'ordres

// Placer un ordre limit : acheter 100 contrats XBTUSD à 30 000 $
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
// Placer un ordre market : vendre 50 contrats XBTUSD
ShowMessage(oBitmex.REST_API.PlaceMarketOrder(bmsSell, 'XBTUSD', 50));
// Placer un ordre stop : se déclenche quand le prix atteint 28 000 $
ShowMessage(oBitmex.REST_API.PlaceStopOrder(bmsSell, 'XBTUSD', 100, 28000));
// Placer un ordre stop-limit : déclenchement à 28 000 $, prix limit 27 500 $
ShowMessage(oBitmex.REST_API.PlaceStopLimitOrder(bmsSell, 'XBTUSD', 100, 28000, 27500));
// Annuler un ordre spécifique
ShowMessage(oBitmex.REST_API.CancelOrder('order-id-here'));
// Annuler tous les ordres ouverts
ShowMessage(oBitmex.REST_API.CancelAllOrders);
Note : la méthode CancelAllOrdersAfter agit comme un dead man's switch. Elle annule tous les ordres si elle n'est pas renouvelée dans le timeout spécifié. C'est utile comme mécanisme de sécurité pour éviter des ordres emballés si ton application perd la connectivité.

API REST : positions

Les méthodes de gestion de position permettent d'interroger, fermer et configurer tes positions ouvertes, incluant les paramètres de leverage et de marge.

Method Description
GetPosition Récupérer la position actuelle pour un instrument.
ClosePosition Fermer une position ouverte en passant un ordre market de clôture.
SetPositionIsolate Basculer entre mode cross et isolated margin pour une position.
SetPositionLeverage Définir le multiplicateur de leverage pour une position.
SetPositionRiskLimit Définir le risk limit pour une position.
SetPositionTransferMargin Transférer de la marge vers ou depuis une position isolated.

Exemples de gestion de position

// Récupérer la position actuelle pour XBTUSD
ShowMessage(oBitmex.REST_API.GetPosition('XBTUSD'));
// Définir le leverage à 10x
ShowMessage(oBitmex.REST_API.SetPositionLeverage('XBTUSD', 10));
// Passer en mode isolated margin
ShowMessage(oBitmex.REST_API.SetPositionIsolate('XBTUSD', True));
// Fermer la position au prix du marché
ShowMessage(oBitmex.REST_API.ClosePosition('XBTUSD'));

Exemple de code

L'exemple suivant montre un workflow complet combinant à la fois des abonnements WebSocket et des appels d'API REST : se connecter, s'abonner aux trades en direct, interroger le carnet d'ordres et placer un ordre limit.

oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
// S'abonner aux trades
oBitmex.Subscribe('trade:XBTUSD');
// REST : récupérer le carnet d'ordres
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// REST : placer un ordre limit
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));

Configuration et notes

Identifiants API

Génère ta clé et ta secret API depuis les paramètres du compte BitMEX. Tu peux créer des clés avec des permissions spécifiques (order, withdraw, etc.). Pour les bots de trading, crée une clé avec seulement les permissions dont tu as besoin et évite d'activer les permissions de retrait sauf en cas de nécessité absolue.

Prise en charge du testnet

BitMEX fournit un environnement testnet à testnet.bitmex.com pour le développement et les tests. Configure le composant pour utiliser l'endpoint testnet et tester ton intégration avec des fonds simulés avant le passage en production. Le groupe de propriétés Bitmex inclut des paramètres pour sélectionner entre environnements de production et testnet.

Important : teste toujours ta logique de trading sur le testnet BitMEX avant de déployer en production. Les clés API testnet sont générées séparément depuis l'interface testnet et ne sont pas interchangeables avec les clés de production.

Énumération du sens des ordres

Les méthodes de trading utilisent les valeurs d'énumération bmsBuy et bmsSell pour spécifier le sens de l'ordre. Elles sont spécifiques au composant BitMEX.

Utilisation WebSocket vs REST

Utilise les abonnements WebSocket pour le streaming de données en temps réel où la faible latence est critique (affichages de prix en direct, visualisation du carnet d'ordres, monitoring d'exécution). Utilise l'API REST pour les opérations à la demande comme placer des ordres, interroger des positions et récupérer des données historiques. Les deux interfaces se complètent et peuvent être utilisées simultanément.

Rate limits

BitMEX impose des rate limits sur les appels d'API REST. Les limites varient selon l'endpoint mais sont typiquement de 60 requêtes par minute pour la plupart des endpoints de trading et 30 requêtes par minute pour la modification et l'annulation d'ordres. Surveille les en-têtes de rate limit dans les réponses pour éviter d'être temporairement bloqué. Les abonnements WebSocket ne sont pas soumis aux rate limits REST.

Symboles des instruments

BitMEX utilise son propre format de symbole d'instrument. Le contrat perpétuel Bitcoin est XBTUSD, tandis que les contrats futures incluent un suffixe de date d'échéance (par ex. XBTM25). Utilise GetInstrumentsActive pour découvrir tous les instruments actuellement tradables et leurs symboles.

Astuce : combine la méthode CancelAllOrdersAfter avec un timer périodique dans ton application comme filet de sécurité. Si ton application crashe ou perd la connectivité, tous les ordres seront automatiquement annulés après le timeout spécifié, te protégeant des mouvements de marché inattendus.