Mise à jour API Coinbase sgcWebSockets

· Fonctionnalités
Intégration de l'API Coinbase Advanced Trade dans Delphi

Coinbase Advanced Trade est la plateforme de trading professionnelle de l'un des exchanges crypto les plus utilisés au monde. Le composant TsgcWSAPI_Coinbase pour Delphi fournit un accès complet aux APIs WebSocket et REST, permettant le streaming de données de marché en temps réel, la gestion des ordres, le monitoring de compte et le suivi des soldes futures depuis une interface Delphi unifiée.

Table des matières

Aperçu

L'API Coinbase Advanced Trade remplace l'ancienne API Coinbase Pro et fournit une interface moderne pour le trading crypto professionnel. Elle prend en charge à la fois le trading spot pour une large gamme d'actifs crypto et les contrats futures. L'API utilise deux mécanismes de transport :

Transport Cas d'usage Authentification
WebSocket Streaming en temps réel des données de marché, des événements utilisateur et des soldes futures Requise pour les canaux privés, optionnelle pour les publics
REST Requêtes de compte, placement d'ordres, données produit et récupération de fills Requise pour tous les endpoints privés

Configuration

Configure le composant TsgcWSAPI_Coinbase avec tes identifiants API pour accéder aux endpoints privés. Les endpoints de données de marché publics sont accessibles sans authentification.

Propriété Type Description
Coinbase.ApiKey String Ta clé API Coinbase Advanced Trade
Coinbase.ApiSecret String Ton secret API Coinbase Advanced Trade, utilisé pour la signature des requêtes
Note : génère tes identifiants API depuis la Coinbase Developer Platform. Lors de la création d'une clé, sélectionne le type d'API Advanced Trade et assigne seulement les permissions dont ton application a besoin. Pour les applications qui n'ont besoin que de données de marché, tu peux complètement sauter la création de clés API et n'utiliser que les endpoints publics.
var
  oClient: TsgcWebSocketClient;
  oCoinbase: TsgcWSAPI_Coinbase;
begin
  oClient := TsgcWebSocketClient.Create(nil);
  oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
  oCoinbase.Client := oClient;
  // Configurer les identifiants API
  oCoinbase.Coinbase.ApiKey := 'your_api_key';
  oCoinbase.Coinbase.ApiSecret := 'your_api_secret';
  // Se connecter à Coinbase
  oClient.Active := True;
end;

API WebSocket

L'API WebSocket fournit des canaux de streaming en temps réel pour les données de marché et les événements de compte privés. Les canaux publics livrent les données du marché global sans authentification, tandis que les canaux privés streament les événements spécifiques au compte.

Canaux publics

Méthode Description
SubscribeHeartBeat / UnSubscribeHeartBeat Monitoring de la santé de la connexion via des messages heartbeat périodiques pour un produit donné
SubscribeStatus / UnSubscribeStatus Mises à jour du statut produit incluant le statut de trading et les infos d'enchère
SubscribeTicker / UnSubscribeTicker Données ticker en temps réel incluant le prix, le volume 24h et les meilleurs bid/ask
SubscribeTickerBatch / UnSubscribeTickerBatch Mises à jour ticker groupées livrées à fréquence réduite pour une consommation de bande passante plus faible
SubscribeLevel2 / UnSubscribeLevel2 Snapshots complets de carnet d'ordres Level 2 et mises à jour incrémentales
SubscribeCandles / UnSubscribeCandles Données de chandelles OHLCV en temps réel pour le charting
SubscribeMarketTrades / UnSubscribeMarketTrades Flux en temps réel de tous les trades exécutés sur l'exchange pour un produit donné

Canaux privés

Method Description
SubscribeUser / UnSubscribeUser Mises à jour en temps réel sur tes ordres (new, filled, cancelled) et l'activité du compte
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary Mises à jour en temps réel sur le solde de ton compte futures, la marge et le prix de liquidation
// S'abonner au ticker temps réel pour BTC-USD
oCoinbase.SubscribeTicker('BTC-USD');
// S'abonner aux mises à jour du carnet d'ordres Level 2
oCoinbase.SubscribeLevel2('BTC-USD');
// S'abonner aux données de chandelles pour le charting
oCoinbase.SubscribeCandles('ETH-USD');
// S'abonner aux trades de marché en direct
oCoinbase.SubscribeMarketTrades('BTC-USD');
// S'abonner au canal utilisateur privé (nécessite une clé API)
oCoinbase.SubscribeUser('BTC-USD');
// S'abonner aux mises à jour de solde futures
oCoinbase.SubscribeFuturesBalanceSummary;

API REST - comptes

Les endpoints Accounts te permettent d'interroger ton portefeuille Coinbase. Chaque compte représente une seule devise ou un seul actif dans ton portefeuille avec ses soldes disponibles et bloqués.

Method Description
ListAccounts Retourne une liste paginée de tous les comptes de ton portefeuille avec les soldes
GetAccount Retourne les détails pour un seul compte par son UUID
// Lister tous les comptes de ton portefeuille
ShowMessage(oCoinbase.REST_API.ListAccounts);
// Récupérer les détails pour un compte spécifique par UUID
ShowMessage(oCoinbase.REST_API.GetAccount('account-uuid-here'));

API REST - produits et données de marché

Les endpoints Products fournissent les données de marché, incluant les paires de trading disponibles, les snapshots de carnet d'ordres, les données historiques de chandelles, les trades récents et l'heure serveur actuelle. Ce sont tous des endpoints publics et ne nécessitent pas d'authentification.

Method Description
GetPublicProducts Retourne une liste de tous les produits disponibles (paires de trading) avec leurs détails
GetPublicProduct Retourne les détails pour un seul produit par son ID (par ex. BTC-USD)
GetPublicProductBook Retourne le carnet d'ordres actuel pour un produit donné
GetPublicProductCandles Retourne les données de chandelles OHLCV pour un produit dans une plage de dates et une granularité
GetTrades Retourne les trades récents pour un produit donné
GetTime Retourne l'heure serveur actuelle de Coinbase

Options de granularité des chandelles

Valeur Description
ONE_MINUTE Chandelles 1 minute
FIVE_MINUTE Chandelles 5 minutes
FIFTEEN_MINUTE Chandelles 15 minutes
THIRTY_MINUTE Chandelles 30 minutes
ONE_HOUR Chandelles 1 heure
TWO_HOUR Chandelles 2 heures
SIX_HOUR Chandelles 6 heures
ONE_DAY Chandelles journalières
// Récupérer tous les produits disponibles
ShowMessage(oCoinbase.REST_API.GetPublicProducts);
// Récupérer les détails pour BTC-USD
ShowMessage(oCoinbase.REST_API.GetPublicProduct('BTC-USD'));
// Récupérer les chandelles horaires pour janvier 2024
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
  'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// Récupérer les trades récents
ShowMessage(oCoinbase.REST_API.GetTrades('BTC-USD'));

API REST - ordres

Les endpoints Orders fournissent une gestion complète du cycle de vie des ordres. Tu peux placer de nouveaux ordres (market, limit ou stop), interroger des ordres existants, annuler des ordres et prévisualiser les résultats des ordres avant exécution.

Method Description
PlaceNewOrder Placer un nouvel ordre avec un contrôle complet des paramètres
PlaceMarketOrder Méthode de commodité pour placer un ordre market (acheter ou vendre au prix actuel)
PlaceLimitOrder Méthode de commodité pour placer un ordre limit à un prix spécifié
PlaceStopOrder Méthode de commodité pour placer un ordre stop qui se déclenche à un prix spécifié
ListOrders Retourne une liste paginée des ordres, optionnellement filtrée par statut ou produit
GetOrder Retourne les détails pour un seul ordre par son ID
CancelOrder Annuler un ou plusieurs ordres ouverts par leurs IDs
EditOrder Modifier un ordre existant (par ex. changer le prix ou la taille)
EditOrderPreview Prévisualiser le résultat d'une modification d'ordre sans l'exécuter
PreviewOrder Prévisualiser le résultat d'un nouvel ordre sans le placer (frais estimés, slippage)
// Placer un ordre market d'achat pour 0,001 BTC
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
// Placer un ordre limit d'achat à 40 000 $
ShowMessage(oCoinbase.REST_API.PlaceLimitOrder(cosBuy, 'BTC-USD', 0.001, 40000));
// Lister tous les ordres ouverts
ShowMessage(oCoinbase.REST_API.ListOrders);
// Annuler un ordre par ID
oCoinbase.REST_API.CancelOrder('order-id-here');
Astuce : utilise PreviewOrder avant de placer des ordres en direct pour voir les frais estimés et les résultats d'exécution sans risquer de fonds réels. C'est particulièrement utile pour les ordres market où le prix d'exécution final dépend de la profondeur du carnet d'ordres.

API REST - fills

Les fills représentent les exécutions individuelles qui composent un ordre terminé ou partiellement fillé. Un seul ordre peut entraîner plusieurs fills s'il est matché contre plusieurs ordres reposants dans le carnet. Tu peux interroger les fills par ID d'ordre, ID de produit ou ID de trade.

Method Description
GetFillsByOrderId Retourne tous les fills pour un ordre spécifique
GetFillsByProductId Retourne tous les fills pour un produit spécifique (par ex. BTC-USD)
GetFillsByTradeId Retourne les détails de fill pour un ID de trade spécifique
// Récupérer les fills pour un ordre spécifique
ShowMessage(oCoinbase.REST_API.GetFillsByOrderId('order-id-here'));
// Récupérer tous les fills pour BTC-USD
ShowMessage(oCoinbase.REST_API.GetFillsByProductId('BTC-USD'));

API REST - positions

L'endpoint Positions sert à gérer les positions futures. Il te permet de fermer une position futures ouverte.

Method Description
ClosePosition Ferme une position futures ouverte pour un produit donné

Exemple de code complet

L'exemple suivant montre un workflow complet : se connecter à Coinbase, lister les comptes, récupérer des données historiques de chandelles, s'abonner à un ticker temps réel et placer un ordre market.

var
  oClient: TsgcWebSocketClient;
  oCoinbase: TsgcWSAPI_Coinbase;
begin
  // Créer et configurer le client WebSocket
  oClient := TsgcWebSocketClient.Create(nil);
  oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
  oCoinbase.Client := oClient;
  // Configure API credentials
  oCoinbase.Coinbase.ApiKey := 'your_api_key';
  oCoinbase.Coinbase.ApiSecret := 'your_api_secret';
  // Connect to Coinbase
  oClient.Active := True;
  // REST : lister tous les comptes de ton portefeuille
  ShowMessage(oCoinbase.REST_API.ListAccounts);
  // REST : récupérer les chandelles horaires pour BTC-USD
  ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
    'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
  // WebSocket : s'abonner au ticker temps réel
  oCoinbase.SubscribeTicker('BTC-USD');
  // REST : placer un ordre market d'achat pour 0,001 BTC
  ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
end;

Notes et bonnes pratiques

Permissions de la clé API

Lors de la génération de clés API sur la Coinbase Developer Platform, suis le principe du moindre privilège. Pour un tableau de bord en lecture seule, n'active que la permission View. Pour un bot de trading, ajoute la permission Trade mais laisse Transfer désactivé sauf si ton application a besoin de déplacer des fonds entre comptes.

Constantes de sens d'ordre

Lors du placement d'ordres, utilise les constantes d'énumération Delphi pour le sens de l'ordre :

Constante Description
cosBuy Ordre d'achat (acquérir la devise de base)
cosSell Ordre de vente (vendre la devise de base)

Ticker vs TickerBatch

Utilise SubscribeTicker quand tu as besoin de chaque mise à jour de prix en temps réel (par ex. pour un moteur d'exécution d'ordres). Utilise SubscribeTickerBatch quand tu n'as besoin que de snapshots périodiques (par ex. pour un tableau de bord) -- il livre les mêmes données à une fréquence réduite, économisant bande passante et charge de traitement.

Rate limits

Coinbase Advanced Trade impose des rate limits sur les appels d'API REST. Les limites varient selon la catégorie d'endpoint (public vs privé, lecture vs écriture). Évite de poller les endpoints REST en boucles serrées ; à la place, utilise des abonnements WebSocket pour les données en temps réel et réserve les appels REST aux requêtes à la demande et aux opérations sur les ordres.

Astuce : pour une application de trading robuste, combine le canal SubscribeUser pour les mises à jour d'état d'ordre en temps réel avec SubscribeTicker pour les prix de marché en direct. Utilise les méthodes REST PlaceMarketOrder ou PlaceLimitOrder pour exécuter des trades, et confirme l'exécution via le canal utilisateur plutôt que de poller GetOrder.