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
- Configuration
- API WebSocket
- API REST - comptes
- API REST - produits et données de marché
- API REST - ordres
- API REST - fills
- API REST - positions
- Exemple de code complet
- Notes et bonnes pratiques
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 |
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 canalSubscribeUser 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.
