Coinbase Advanced Trade ist die professionelle Trading-Plattform einer der meistgenutzten Krypto-Börsen der Welt. Die Delphi-Komponente TsgcWSAPI_Coinbase bietet vollständigen Zugriff auf WebSocket- und REST-API und ermöglicht Marktdaten-Streaming in Echtzeit, Order-Management, Konto-Monitoring und Futures-Saldo-Tracking aus einer einheitlichen Delphi-Schnittstelle.
Inhaltsverzeichnis
- Übersicht
- Konfiguration
- WebSocket-API
- REST-API - Konten
- REST-API - Produkte und Marktdaten
- REST-API - Orders
- REST-API - Fills
- REST-API - Positionen
- Vollständiges Code-Beispiel
- Hinweise und Best Practices
Übersicht
Die Coinbase Advanced Trade API ersetzt die alte Coinbase Pro API und bietet ein modernes Interface für professionelles Krypto-Trading. Sie unterstützt sowohl Spot-Trading für viele Krypto-Assets als auch Futures-Kontrakte. Die API nutzt zwei Transportmechanismen:
| Transport | Anwendungsfall | Authentifizierung |
|---|---|---|
| WebSocket | Echtzeit-Streaming von Marktdaten, User-Events und Futures-Salden | Für private Channels erforderlich, für öffentliche optional |
| REST | Kontoabfragen, Orderplatzierung, Produktdaten und Fill-Abruf | Für alle privaten Endpoints erforderlich |
Konfiguration
Konfiguriere die Komponente TsgcWSAPI_Coinbase mit deinen API-Zugangsdaten, um auf private Endpoints zuzugreifen. Öffentliche Marktdaten-Endpoints funktionieren ohne Authentifizierung.
| Property | Typ | Beschreibung |
|---|---|---|
Coinbase.ApiKey |
String | Dein Coinbase Advanced Trade API-Key |
Coinbase.ApiSecret |
String | Dein Coinbase Advanced Trade API-Secret, verwendet für Request-Signierung |
var
oClient: TsgcWebSocketClient;
oCoinbase: TsgcWSAPI_Coinbase;
begin
oClient := TsgcWebSocketClient.Create(nil);
oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
oCoinbase.Client := oClient;
// API-Zugangsdaten konfigurieren
oCoinbase.Coinbase.ApiKey := 'dein_api_key';
oCoinbase.Coinbase.ApiSecret := 'dein_api_secret';
// Mit Coinbase verbinden
oClient.Active := True;
end;
WebSocket-API
Die WebSocket-API bietet Echtzeit-Streaming-Channels für Marktdaten und private Konto-Events. Öffentliche Channels liefern marktweite Daten ohne Authentifizierung, private Channels streamen kontospezifische Events.
Öffentliche Channels
| Methode | Beschreibung |
|---|---|
SubscribeHeartBeat / UnSubscribeHeartBeat |
Überwachung der Verbindungsstabilität über periodische Heartbeat-Nachrichten für ein Produkt |
SubscribeStatus / UnSubscribeStatus |
Produktstatus-Updates inklusive Handelsstatus und Auktionsinfos |
SubscribeTicker / UnSubscribeTicker |
Ticker-Daten in Echtzeit inklusive Preis, 24h-Volumen und bestem Bid/Ask |
SubscribeTickerBatch / UnSubscribeTickerBatch |
Gebündelte Ticker-Updates mit reduzierter Frequenz für geringere Bandbreitennutzung |
SubscribeLevel2 / UnSubscribeLevel2 |
Vollständige Level-2-Orderbuch-Snapshots und inkrementelle Updates |
SubscribeCandles / UnSubscribeCandles |
OHLCV-Candle-Daten in Echtzeit für Charts |
SubscribeMarketTrades / UnSubscribeMarketTrades |
Echtzeit-Feed aller an der Börse für ein Produkt ausgeführten Trades |
Private Channels
| Methode | Beschreibung |
|---|---|
SubscribeUser / UnSubscribeUser |
Echtzeit-Updates zu deinen Orders (neu, gefüllt, storniert) und Kontoaktivität |
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary |
Echtzeit-Updates zu deinem Futures-Konto-Saldo, Margin und Liquidationspreis |
// Echtzeit-Ticker für BTC-USD abonnieren
oCoinbase.SubscribeTicker('BTC-USD');
// Level-2-Orderbuch-Updates abonnieren
oCoinbase.SubscribeLevel2('BTC-USD');
// Candle-Daten für Charts abonnieren
oCoinbase.SubscribeCandles('ETH-USD');
// Live-Market-Trades abonnieren
oCoinbase.SubscribeMarketTrades('BTC-USD');
// Privaten User-Channel abonnieren (erfordert API-Key)
oCoinbase.SubscribeUser('BTC-USD');
// Futures-Saldo-Updates abonnieren
oCoinbase.SubscribeFuturesBalanceSummary;
REST-API - Konten
Die Accounts-Endpoints erlauben das Abfragen deines Coinbase-Portfolios. Jedes Konto repräsentiert eine einzelne Währung oder ein Asset in deinem Portfolio mit verfügbaren und gehaltenen Salden.
| Methode | Beschreibung |
|---|---|
ListAccounts |
Liefert eine paginierte Liste aller Konten deines Portfolios mit Salden. |
GetAccount |
Liefert Details zu einem einzelnen Konto anhand seiner UUID. |
// Alle Konten im Portfolio auflisten
ShowMessage(oCoinbase.REST_API.ListAccounts);
// Details zu einem bestimmten Konto per UUID abrufen
ShowMessage(oCoinbase.REST_API.GetAccount('account-uuid-here'));
REST-API - Produkte und Marktdaten
Die Products-Endpoints bieten Marktdaten inklusive verfügbarer Handelspaare, Orderbuch-Snapshots, historischer Candle-Daten, aktueller Trades und der Server-Zeit. Alle Endpoints sind öffentlich und erfordern keine Authentifizierung.
| Methode | Beschreibung |
|---|---|
GetPublicProducts |
Liefert eine Liste aller verfügbaren Produkte (Handelspaare) mit Details |
GetPublicProduct |
Liefert Details zu einem einzelnen Produkt anhand seiner ID (z. B. BTC-USD) |
GetPublicProductBook |
Liefert das aktuelle Orderbuch für ein Produkt |
GetPublicProductCandles |
Liefert OHLCV-Candle-Daten für ein Produkt in einem Datumsbereich und mit einer Granularität |
GetTrades |
Liefert aktuelle Trades für ein Produkt |
GetTime |
Liefert die aktuelle Coinbase-Server-Zeit |
Optionen für Candle-Granularität
| Wert | Beschreibung |
|---|---|
ONE_MINUTE |
1-Minuten-Candles |
FIVE_MINUTE |
5-Minuten-Candles |
FIFTEEN_MINUTE |
15-Minuten-Candles |
THIRTY_MINUTE |
30-Minuten-Candles |
ONE_HOUR |
1-Stunden-Candles |
TWO_HOUR |
2-Stunden-Candles |
SIX_HOUR |
6-Stunden-Candles |
ONE_DAY |
Tageskerzen |
// Alle verfügbaren Produkte abrufen
ShowMessage(oCoinbase.REST_API.GetPublicProducts);
// Details für BTC-USD abrufen
ShowMessage(oCoinbase.REST_API.GetPublicProduct('BTC-USD'));
// Stündliche Candles für Januar 2024 abrufen
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// Aktuelle Trades abrufen
ShowMessage(oCoinbase.REST_API.GetTrades('BTC-USD'));
REST-API - Orders
Die Orders-Endpoints bieten vollständiges Order-Lebenszyklus-Management. Du kannst neue Orders platzieren (Market, Limit oder Stop), bestehende Orders abfragen, Orders stornieren und Ordergebnisse vor der Ausführung in einer Vorschau ansehen.
| Methode | Beschreibung |
|---|---|
PlaceNewOrder |
Platziere eine neue Order mit voller Parameterkontrolle |
PlaceMarketOrder |
Convenience-Methode für Market-Orders (Kauf oder Verkauf zum aktuellen Preis) |
PlaceLimitOrder |
Convenience-Methode für Limit-Orders zu einem festgelegten Preis |
PlaceStopOrder |
Convenience-Methode für Stop-Orders, die bei einem festgelegten Preis ausgelöst werden |
ListOrders |
Liefert eine paginierte Liste von Orders, optional gefiltert nach Status oder Produkt |
GetOrder |
Liefert Details zu einer einzelnen Order anhand ihrer ID |
CancelOrder |
Storniere eine oder mehrere offene Orders anhand ihrer IDs |
EditOrder |
Modifiziere eine bestehende Order (z. B. Preis oder Größe ändern) |
EditOrderPreview |
Vorschau auf das Ergebnis einer Order-Änderung ohne Ausführung |
PreviewOrder |
Vorschau auf das Ergebnis einer neuen Order ohne Platzierung (geschätzte Gebühren, Slippage) |
// Market-Buy-Order für 0,001 BTC platzieren
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
// Limit-Buy-Order bei $40.000 platzieren
ShowMessage(oCoinbase.REST_API.PlaceLimitOrder(cosBuy, 'BTC-USD', 0.001, 40000));
// Alle offenen Orders auflisten
ShowMessage(oCoinbase.REST_API.ListOrders);
// Order anhand der ID stornieren
oCoinbase.REST_API.CancelOrder('order-id-here');
Tipp: Nutze PreviewOrder vor dem Platzieren von Live-Orders, um geschätzte Gebühren und Execution-Ergebnisse zu sehen, ohne echtes Geld zu riskieren. Besonders nützlich bei Market-Orders, deren finaler Ausführungspreis von der Orderbuch-Tiefe abhängt.
REST-API - Fills
Fills stellen die einzelnen Executions dar, die eine abgeschlossene oder teilweise gefüllte Order bilden. Eine einzelne Order kann mehrere Fills ergeben, wenn sie gegen mehrere Resting Orders im Orderbuch gematcht wird. Du kannst Fills anhand von Order-ID, Produkt-ID oder Trade-ID abfragen.
| Methode | Beschreibung |
|---|---|
GetFillsByOrderId |
Liefert alle Fills zu einer bestimmten Order |
GetFillsByProductId |
Liefert alle Fills zu einem bestimmten Produkt (z. B. BTC-USD) |
GetFillsByTradeId |
Liefert Fill-Details für eine bestimmte Trade-ID |
// Fills für eine bestimmte Order abrufen
ShowMessage(oCoinbase.REST_API.GetFillsByOrderId('order-id-here'));
// Alle Fills für BTC-USD abrufen
ShowMessage(oCoinbase.REST_API.GetFillsByProductId('BTC-USD'));
REST-API - Positionen
Der Positions-Endpoint dient der Verwaltung von Futures-Positionen. Er erlaubt das Schließen einer offenen Futures-Position.
| Methode | Beschreibung |
|---|---|
ClosePosition |
Schließt eine offene Futures-Position für ein bestimmtes Produkt |
Vollständiges Code-Beispiel
Das folgende Beispiel zeigt einen vollständigen Workflow: Verbindung zu Coinbase, Konten auflisten, historische Candle-Daten abrufen, Echtzeit-Ticker abonnieren und eine Market-Order platzieren.
var
oClient: TsgcWebSocketClient;
oCoinbase: TsgcWSAPI_Coinbase;
begin
// WebSocket-Client erstellen und konfigurieren
oClient := TsgcWebSocketClient.Create(nil);
oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
oCoinbase.Client := oClient;
// API-Zugangsdaten konfigurieren
oCoinbase.Coinbase.ApiKey := 'dein_api_key';
oCoinbase.Coinbase.ApiSecret := 'dein_api_secret';
// Mit Coinbase verbinden
oClient.Active := True;
// REST: Alle Konten im Portfolio auflisten
ShowMessage(oCoinbase.REST_API.ListAccounts);
// REST: Stündliche Candles für BTC-USD abrufen
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// WebSocket: Echtzeit-Ticker abonnieren
oCoinbase.SubscribeTicker('BTC-USD');
// REST: Market-Buy-Order für 0,001 BTC platzieren
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
end;
Hinweise und Best Practices
API-Key-Berechtigungen
Folge beim Erzeugen von API-Keys in der Coinbase Developer Platform dem Prinzip der minimalen Berechtigungen. Für ein Read-Only-Dashboard aktiviere nur die Berechtigung View. Für einen Trading-Bot füge Trade hinzu, lasse Transfer aber deaktiviert, sofern deine Anwendung nicht Gelder zwischen Konten bewegen muss.
Order-Side-Konstanten
Verwende beim Platzieren von Orders die Delphi-Enum-Konstanten für die Order-Side:
| Konstante | Beschreibung |
|---|---|
cosBuy |
Buy-Order (Basiswährung erwerben) |
cosSell |
Sell-Order (Basiswährung verkaufen) |
Ticker vs. TickerBatch
Nutze SubscribeTicker, wenn du jedes Preis-Update in Echtzeit brauchst (z. B. für eine Order-Execution-Engine). Nutze SubscribeTickerBatch, wenn dir periodische Snapshots reichen (z. B. für ein Dashboard) — er liefert dieselben Daten mit reduzierter Frequenz und spart Bandbreite und Verarbeitungsaufwand.
Rate Limits
Coinbase Advanced Trade erzwingt Rate Limits für REST-API-Aufrufe. Die Limits variieren nach Endpoint-Kategorie (öffentlich vs. privat, Lesen vs. Schreiben). Vermeide Polling in engen Schleifen; nutze stattdessen WebSocket-Subscriptions für Echtzeitdaten und reserviere REST-Aufrufe für On-Demand-Abfragen und Order-Operationen.
Tipp: Für eine robuste Trading-Anwendung kombiniere denSubscribeUser-Channel für Order-State-Updates in Echtzeit mit SubscribeTicker für Live-Marktpreise. Nutze die REST-Methoden PlaceMarketOrder oder PlaceLimitOrder zur Trade-Ausführung und bestätige die Execution über den User-Channel, anstatt GetOrder zu pollen.
