Coinbase-API-update sgcWebSockets

· Functies
Integratie van de Coinbase Advanced Trade-API in Delphi

Coinbase Advanced Trade is het professionele handelsplatform van een van de meest gebruikte cryptocurrency-exchanges ter wereld. De TsgcWSAPI_Coinbase-component voor Delphi biedt volledige toegang tot zowel de WebSocket- als de REST-API en maakt het mogelijk om realtime marktdata te streamen, orders te beheren, accounts te monitoren en futures-balansen te volgen vanuit één Delphi-interface.

Inhoudsopgave

Overzicht

De Coinbase Advanced Trade-API vervangt de oude Coinbase Pro-API en biedt een moderne interface voor professionele crypto-handel. De API ondersteunt zowel spot-trading voor een breed scala aan crypto-assets als futures-contracten. De API gebruikt twee transportmechanismen:

Transport Use-case Authenticatie
WebSocket Realtime streamen van marktdata, user-events en futures-balansen Verplicht voor private kanalen, optioneel voor publieke
REST Account-queries, orders plaatsen, productdata en fill-gegevens ophalen Verplicht voor alle private endpoints

Configuratie

Configureer de TsgcWSAPI_Coinbase-component met je API-gegevens om toegang te krijgen tot private endpoints. Publieke marktdata-endpoints zijn ook zonder authenticatie bereikbaar.

Eigenschap Type Beschrijving
Coinbase.ApiKey String Je API-sleutel voor Coinbase Advanced Trade
Coinbase.ApiSecret String Je API-secret voor Coinbase Advanced Trade, gebruikt om verzoeken te ondertekenen
Let op: genereer je API-gegevens via het Coinbase Developer Platform. Selecteer bij het aanmaken van een sleutel het API-type Advanced Trade en ken alleen de rechten toe die je toepassing echt nodig heeft. Voor toepassingen die alleen marktdata gebruiken kun je het aanmaken van API-sleutels helemaal overslaan en de publieke endpoints gebruiken.
var
  oClient: TsgcWebSocketClient;
  oCoinbase: TsgcWSAPI_Coinbase;
begin
  oClient := TsgcWebSocketClient.Create(nil);
  oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
  oCoinbase.Client := oClient;
  // API-gegevens configureren
  oCoinbase.Coinbase.ApiKey := 'your_api_key';
  oCoinbase.Coinbase.ApiSecret := 'your_api_secret';
  // Verbinden met Coinbase
  oClient.Active := True;
end;

WebSocket-API

De WebSocket-API biedt realtime-streamingkanalen voor marktdata en private account-events. Publieke kanalen leveren marktbrede data zonder authenticatie; private kanalen streamen account-specifieke events.

Publieke kanalen

Methode Beschrijving
SubscribeHeartBeat / UnSubscribeHeartBeat Bewaakt de verbindingsstatus via periodieke heartbeat-berichten voor een bepaald product
SubscribeStatus / UnSubscribeStatus Productstatus-updates, inclusief handelsstatus en veilingsinformatie
SubscribeTicker / UnSubscribeTicker Realtime ticker-data inclusief prijs, 24-uurs volume en beste bid/ask
SubscribeTickerBatch / UnSubscribeTickerBatch Gebundelde ticker-updates met lagere frequentie voor minder bandbreedte
SubscribeLevel2 / UnSubscribeLevel2 Volledige Level 2 order-book-snapshots en incrementele updates
SubscribeCandles / UnSubscribeCandles Realtime OHLCV-candle-data voor grafieken
SubscribeMarketTrades / UnSubscribeMarketTrades Realtime feed van alle trades die op de exchange voor een bepaald product worden uitgevoerd

Private kanalen

Methode Beschrijving
SubscribeUser / UnSubscribeUser Realtime updates over je orders (nieuw, gevuld, geannuleerd) en account-activiteit
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary Realtime updates over je futures-account-saldo, margin en liquidatieprijs
// Abonneer op realtime ticker voor BTC-USD
oCoinbase.SubscribeTicker('BTC-USD');
// Abonneer op Level 2 order-book-updates
oCoinbase.SubscribeLevel2('BTC-USD');
// Abonneer op candle-data voor grafieken
oCoinbase.SubscribeCandles('ETH-USD');
// Abonneer op live market trades
oCoinbase.SubscribeMarketTrades('BTC-USD');
// Abonneer op het private user-kanaal (vereist API-sleutel)
oCoinbase.SubscribeUser('BTC-USD');
// Abonneer op futures-balans-updates
oCoinbase.SubscribeFuturesBalanceSummary;

REST-API - Accounts

Met de Accounts-endpoints kun je je Coinbase-portfolio bevragen. Elk account vertegenwoordigt een enkele valuta of asset in je portfolio met het beschikbare en het vastgehouden saldo.

Methode Beschrijving
ListAccounts Geeft een gepagineerde lijst van alle accounts in je portfolio met saldi terug
GetAccount Geeft de details van één account terug op basis van het UUID
// Lijst alle accounts in je portfolio
ShowMessage(oCoinbase.REST_API.ListAccounts);
// Detail van een specifiek account op basis van UUID
ShowMessage(oCoinbase.REST_API.GetAccount('account-uuid-here'));

REST-API - Producten en marktdata

De Products-endpoints leveren marktdata, waaronder beschikbare handelsparen, order-book-snapshots, historische candle-data, recente trades en de huidige servertijd. Het zijn allemaal publieke endpoints die geen authenticatie vereisen.

Methode Beschrijving
GetPublicProducts Geeft een lijst met alle beschikbare producten (handelsparen) en hun details terug
GetPublicProduct Geeft de details van één product terug op basis van het ID (bijv. BTC-USD)
GetPublicProductBook Geeft het huidige order-book voor een bepaald product terug
GetPublicProductCandles Geeft OHLCV-candle-data terug voor een product binnen een datumbereik en granulariteit
GetTrades Geeft de recente trades voor een bepaald product terug
GetTime Geeft de huidige Coinbase-servertijd terug

Granulariteitsopties voor candles

Waarde Beschrijving
ONE_MINUTE 1-minuut-candles
FIVE_MINUTE 5-minuten-candles
FIFTEEN_MINUTE 15-minuten-candles
THIRTY_MINUTE 30-minuten-candles
ONE_HOUR 1-uur-candles
TWO_HOUR 2-uur-candles
SIX_HOUR 6-uur-candles
ONE_DAY Dagcandles
// Alle beschikbare producten ophalen
ShowMessage(oCoinbase.REST_API.GetPublicProducts);
// Details voor BTC-USD
ShowMessage(oCoinbase.REST_API.GetPublicProduct('BTC-USD'));
// Uurcandles voor januari 2024
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
  'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// Recente trades ophalen
ShowMessage(oCoinbase.REST_API.GetTrades('BTC-USD'));

REST-API - Orders

De Orders-endpoints bieden volledig beheer over de levenscyclus van orders. Je kunt nieuwe orders plaatsen (market, limit of stop), bestaande orders bevragen, orders annuleren en de uitkomst van een order vooraf bekijken.

Methode Beschrijving
PlaceNewOrder Plaatst een nieuwe order met volledige parametercontrole
PlaceMarketOrder Hulpmethode voor het plaatsen van een market-order (kopen of verkopen tegen de huidige prijs)
PlaceLimitOrder Hulpmethode voor het plaatsen van een limit-order tegen een opgegeven prijs
PlaceStopOrder Hulpmethode voor het plaatsen van een stop-order die wordt geactiveerd bij een opgegeven prijs
ListOrders Geeft een gepagineerde lijst van orders terug, optioneel gefilterd op status of product
GetOrder Geeft de details van één order terug op basis van het ID
CancelOrder Annuleert één of meer openstaande orders op basis van hun ID
EditOrder Wijzigt een bestaande order (bijv. prijs of hoeveelheid)
EditOrderPreview Bekijk het resultaat van een order-wijziging vooraf, zonder uit te voeren
PreviewOrder Bekijk het resultaat van een nieuwe order vooraf, zonder hem te plaatsen (geschatte fees, slippage)
// Plaats een market-buy-order voor 0,001 BTC
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
// Plaats een limit-buy-order op $ 40.000
ShowMessage(oCoinbase.REST_API.PlaceLimitOrder(cosBuy, 'BTC-USD', 0.001, 40000));
// Lijst alle openstaande orders
ShowMessage(oCoinbase.REST_API.ListOrders);
// Annuleer een order op basis van ID
oCoinbase.REST_API.CancelOrder('order-id-here');
Tip: gebruik PreviewOrder voordat je live orders plaatst om geschatte fees en het executieresultaat te zien zonder echt geld te riskeren. Dit is vooral handig voor market-orders, waarvan de uiteindelijke executieprijs afhangt van de diepte van het order-book.

REST-API - Fills

Fills zijn de individuele uitvoeringen waaruit een volledig of gedeeltelijk gevulde order bestaat. Eén order kan meerdere fills opleveren als hij tegen meerdere bestaande orders in het book wordt gematcht. Je kunt fills bevragen op order-ID, product-ID of trade-ID.

Methode Beschrijving
GetFillsByOrderId Geeft alle fills voor een specifieke order terug
GetFillsByProductId Geeft alle fills voor een specifiek product terug (bijv. BTC-USD)
GetFillsByTradeId Geeft de fill-details voor een specifieke trade-ID terug
// Fills voor een specifieke order ophalen
ShowMessage(oCoinbase.REST_API.GetFillsByOrderId('order-id-here'));
// Alle fills voor BTC-USD ophalen
ShowMessage(oCoinbase.REST_API.GetFillsByProductId('BTC-USD'));

REST-API - Posities

Het Positions-endpoint wordt gebruikt om futures-posities te beheren. Je kunt er een open futures-positie mee sluiten.

Methode Beschrijving
ClosePosition Sluit een open futures-positie voor een bepaald product

Volledig codevoorbeeld

Het volgende voorbeeld laat een complete workflow zien: verbinden met Coinbase, accounts opvragen, historische candle-data ophalen, abonneren op een realtime ticker en een market-order plaatsen.

var
  oClient: TsgcWebSocketClient;
  oCoinbase: TsgcWSAPI_Coinbase;
begin
  // Maak en configureer de WebSocket-client
  oClient := TsgcWebSocketClient.Create(nil);
  oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
  oCoinbase.Client := oClient;
  // API-gegevens configureren
  oCoinbase.Coinbase.ApiKey := 'your_api_key';
  oCoinbase.Coinbase.ApiSecret := 'your_api_secret';
  // Verbinden met Coinbase
  oClient.Active := True;
  // REST: alle accounts in je portfolio opvragen
  ShowMessage(oCoinbase.REST_API.ListAccounts);
  // REST: uurcandles voor BTC-USD ophalen
  ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
    'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
  // WebSocket: abonneer op realtime ticker
  oCoinbase.SubscribeTicker('BTC-USD');
  // REST: plaats een market-buy-order voor 0,001 BTC
  ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
end;

Opmerkingen en best practices

API-sleutel-rechten

Wanneer je API-sleutels aanmaakt op het Coinbase Developer Platform, volg dan het principe van zo min mogelijk rechten. Voor een alleen-lezen-dashboard schakel je alleen de View-rechten in. Voor een trading-bot voeg je Trade-rechten toe, maar laat je Transfer uitgeschakeld tenzij je toepassing daadwerkelijk fondsen tussen accounts moet verplaatsen.

Order-side-constanten

Gebruik bij het plaatsen van orders de Delphi-enumeratie-constanten voor de order-zijde:

Constante Beschrijving
cosBuy Buy-order (je koopt de base-currency)
cosSell Sell-order (je verkoopt de base-currency)

Ticker vs. TickerBatch

Gebruik SubscribeTicker als je elke prijsupdate realtime nodig hebt (bijv. voor een order-execution-engine). Gebruik SubscribeTickerBatch als je alleen periodieke snapshots nodig hebt (bijv. voor een dashboard) — dit levert dezelfde data met een lagere frequentie, wat bandbreedte en verwerkingstijd bespaart.

Rate limits

Coinbase Advanced Trade hanteert rate limits voor REST-API-aanroepen. De limieten verschillen per endpoint-categorie (publiek vs. private, read vs. write). Vermijd het pollen van REST-endpoints in strakke loops; gebruik in plaats daarvan WebSocket-subscriptions voor realtime data en houd REST-aanroepen voor on-demand-queries en order-acties.

Tip: voor een robuuste trading-toepassing combineer je het SubscribeUser-kanaal voor realtime order-state-updates met SubscribeTicker voor live marktprijzen. Gebruik de REST-methoden PlaceMarketOrder of PlaceLimitOrder om trades uit te voeren en bevestig de uitvoering via het user-kanaal in plaats van GetOrder te pollen.