Coinbase-API-Update sgcWebSockets

· Funktionen
Coinbase Advanced Trade API-Integration in Delphi

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

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
Hinweis: Erzeuge deine API-Zugangsdaten in der Coinbase Developer Platform. Wähle beim Erstellen eines Keys den API-Typ Advanced Trade und vergebe nur die Berechtigungen, die deine Anwendung benötigt. Für reine Marktdaten-Anwendungen kannst du auf API-Keys ganz verzichten und nur die öffentlichen Endpoints nutzen.
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 den SubscribeUser-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.