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
- Configuratie
- WebSocket-API
- REST-API - Accounts
- REST-API - Producten en marktdata
- REST-API - Orders
- REST-API - Fills
- REST-API - Posities
- Volledig codevoorbeeld
- Opmerkingen en best practices
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 |
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 hetSubscribeUser-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.
