Coinbase Advanced Trade to profesjonalna platforma handlowa jednej z najszerzej używanych giełd kryptowalut na świecie. Komponent TsgcWSAPI_Coinbase dla Delphi zapewnia pełny dostęp do obu interfejsów API — WebSocket i REST — umożliwiając transmisję danych rynkowych w czasie rzeczywistym, zarządzanie zleceniami, monitorowanie konta i śledzenie salda futures z jednego interfejsu Delphi.
Spis treści
- Przegląd
- Konfiguracja
- WebSocket API
- REST API — Konta
- REST API — Produkty i dane rynkowe
- REST API — Zlecenia
- REST API — Realizacje
- REST API — Pozycje
- Kompletny przykład kodu
- Uwagi i najlepsze praktyki
Przegląd
Coinbase Advanced Trade API zastępuje starsze Coinbase Pro API i zapewnia nowoczesny interfejs do profesjonalnego handlu kryptowalutami. Obsługuje zarówno handel spot dla szerokiej gamy aktywów kryptograficznych, jak i kontrakty futures. API używa dwóch mechanizmów transportu:
| Transport | Zastosowanie | Uwierzytelnianie |
|---|---|---|
| WebSocket | Transmisja w czasie rzeczywistym danych rynkowych, zdarzeń użytkownika i sald futures | Wymagane dla kanałów prywatnych, opcjonalne dla publicznych |
| REST | Zapytania o konto, składanie zleceń, dane produktów i pobieranie realizacji | Wymagane dla wszystkich prywatnych punktów końcowych |
Konfiguracja
Skonfiguruj komponent TsgcWSAPI_Coinbase swoimi poświadczeniami API, aby uzyskać dostęp do prywatnych punktów końcowych. Publiczne punkty końcowe danych rynkowych są dostępne bez uwierzytelniania.
| Właściwość | Typ | Opis |
|---|---|---|
Coinbase.ApiKey |
String | Klucz API Coinbase Advanced Trade |
Coinbase.ApiSecret |
String | Sekret API Coinbase Advanced Trade używany do podpisywania żądań |
var
oClient: TsgcWebSocketClient;
oCoinbase: TsgcWSAPI_Coinbase;
begin
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;
end;
WebSocket API
WebSocket API udostępnia kanały transmisji w czasie rzeczywistym dla danych rynkowych i prywatnych zdarzeń konta. Kanały publiczne dostarczają ogólne dane rynkowe bez uwierzytelniania, natomiast kanały prywatne przesyłają zdarzenia specyficzne dla konta.
Kanały publiczne
| Metoda | Opis |
|---|---|
SubscribeHeartBeat / UnSubscribeHeartBeat |
Monitorowanie stanu połączenia za pomocą cyklicznych wiadomości heartbeat dla danego produktu |
SubscribeStatus / UnSubscribeStatus |
Aktualizacje statusu produktu, w tym status handlu i informacje o aukcji |
SubscribeTicker / UnSubscribeTicker |
Dane tickera w czasie rzeczywistym, w tym cena, wolumen 24h i najlepsza oferta kupna/sprzedaży |
SubscribeTickerBatch / UnSubscribeTickerBatch |
Zbiorcze aktualizacje tickera dostarczane z mniejszą częstotliwością w celu zmniejszenia zużycia przepustowości |
SubscribeLevel2 / UnSubscribeLevel2 |
Pełne migawki arkusza zleceń Level 2 i aktualizacje przyrostowe |
SubscribeCandles / UnSubscribeCandles |
Dane świec OHLCV w czasie rzeczywistym do wykresów |
SubscribeMarketTrades / UnSubscribeMarketTrades |
Strumień w czasie rzeczywistym wszystkich transakcji wykonanych na giełdzie dla danego produktu |
Kanały prywatne
| Metoda | Opis |
|---|---|
SubscribeUser / UnSubscribeUser |
Aktualizacje w czasie rzeczywistym dotyczące twoich zleceń (nowe, zrealizowane, anulowane) i aktywności konta |
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary |
Aktualizacje w czasie rzeczywistym salda konta futures, depozytu zabezpieczającego i ceny likwidacji |
// Subscribe to real-time ticker for BTC-USD
oCoinbase.SubscribeTicker('BTC-USD');
// Subscribe to Level 2 order book updates
oCoinbase.SubscribeLevel2('BTC-USD');
// Subscribe to candle data for charting
oCoinbase.SubscribeCandles('ETH-USD');
// Subscribe to live market trades
oCoinbase.SubscribeMarketTrades('BTC-USD');
// Subscribe to private user channel (requires API key)
oCoinbase.SubscribeUser('BTC-USD');
// Subscribe to futures balance updates
oCoinbase.SubscribeFuturesBalanceSummary;
REST API — Konta
Punkty końcowe Accounts umożliwiają zapytanie o portfolio Coinbase. Każde konto reprezentuje jedną walutę lub aktywo w portfolio wraz z dostępnymi i zablokowanymi saldami.
| Metoda | Opis |
|---|---|
ListAccounts |
Zwraca paginowaną listę wszystkich kont w portfolio wraz z saldami |
GetAccount |
Zwraca szczegóły jednego konta na podstawie jego UUID |
// List all accounts in your portfolio
ShowMessage(oCoinbase.REST_API.ListAccounts);
// Get details for a specific account by UUID
ShowMessage(oCoinbase.REST_API.GetAccount('account-uuid-here'));
REST API — Produkty i dane rynkowe
Punkty końcowe Products dostarczają dane rynkowe, w tym dostępne pary handlowe, migawki arkusza zleceń, historyczne dane świec, ostatnie transakcje i aktualny czas serwera. Są to publiczne punkty końcowe niewymagające uwierzytelniania.
| Metoda | Opis |
|---|---|
GetPublicProducts |
Zwraca listę wszystkich dostępnych produktów (par handlowych) wraz ze szczegółami |
GetPublicProduct |
Zwraca szczegóły jednego produktu na podstawie jego ID (np. BTC-USD) |
GetPublicProductBook |
Zwraca aktualny arkusz zleceń dla danego produktu |
GetPublicProductCandles |
Zwraca dane świec OHLCV dla produktu w podanym zakresie dat i granulacji |
GetTrades |
Zwraca ostatnie transakcje dla danego produktu |
GetTime |
Zwraca aktualny czas serwera Coinbase |
Opcje granulacji świec
| Wartość | Opis |
|---|---|
ONE_MINUTE |
Świece 1-minutowe |
FIVE_MINUTE |
Świece 5-minutowe |
FIFTEEN_MINUTE |
Świece 15-minutowe |
THIRTY_MINUTE |
Świece 30-minutowe |
ONE_HOUR |
Świece 1-godzinne |
TWO_HOUR |
Świece 2-godzinne |
SIX_HOUR |
Świece 6-godzinne |
ONE_DAY |
Świece dzienne |
// Get all available products
ShowMessage(oCoinbase.REST_API.GetPublicProducts);
// Get details for BTC-USD
ShowMessage(oCoinbase.REST_API.GetPublicProduct('BTC-USD'));
// Get hourly candles for January 2024
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// Get recent trades
ShowMessage(oCoinbase.REST_API.GetTrades('BTC-USD'));
REST API — Zlecenia
Punkty końcowe Orders zapewniają pełne zarządzanie cyklem życia zleceń. Możesz składać nowe zlecenia (rynkowe, z limitem lub stop), zapytywać o istniejące zlecenia, anulować je oraz podglądać wyniki zleceń przed realizacją.
| Metoda | Opis |
|---|---|
PlaceNewOrder |
Składa nowe zlecenie z pełną kontrolą parametrów |
PlaceMarketOrder |
Wygodna metoda składania zlecenia rynkowego (kupno lub sprzedaż po bieżącej cenie) |
PlaceLimitOrder |
Wygodna metoda składania zlecenia z limitem po określonej cenie |
PlaceStopOrder |
Wygodna metoda składania zlecenia stop aktywowanego po określonej cenie |
ListOrders |
Zwraca paginowaną listę zleceń, opcjonalnie filtrowaną według statusu lub produktu |
GetOrder |
Zwraca szczegóły jednego zlecenia na podstawie jego ID |
CancelOrder |
Anuluje jedno lub więcej otwartych zleceń na podstawie ich ID |
EditOrder |
Modyfikuje istniejące zlecenie (np. zmienia cenę lub ilość) |
EditOrderPreview |
Podgląd wyniku edycji zlecenia bez jego wykonywania |
PreviewOrder |
Podgląd wyniku nowego zlecenia bez jego składania (szacowane opłaty, poślizg) |
// Place a market buy order for 0.001 BTC
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
// Place a limit buy order at $40,000
ShowMessage(oCoinbase.REST_API.PlaceLimitOrder(cosBuy, 'BTC-USD', 0.001, 40000));
// List all open orders
ShowMessage(oCoinbase.REST_API.ListOrders);
// Cancel an order by ID
oCoinbase.REST_API.CancelOrder('order-id-here');
Wskazówka: używaj PreviewOrder przed składaniem zleceń produkcyjnych, aby zobaczyć szacowane opłaty i wyniki realizacji bez ryzykowania prawdziwych środków. Jest to szczególnie przydatne w zleceniach rynkowych, gdzie ostateczna cena realizacji zależy od głębokości arkusza zleceń.
REST API — Realizacje
Realizacje reprezentują poszczególne wykonania składające się na zrealizowane lub częściowo zrealizowane zlecenie. Jedno zlecenie może skutkować wieloma realizacjami, jeśli zostanie dopasowane do kilku zleceń oczekujących w arkuszu. Możesz zapytać o realizacje według ID zlecenia, ID produktu lub ID transakcji.
| Metoda | Opis |
|---|---|
GetFillsByOrderId |
Zwraca wszystkie realizacje dla określonego zlecenia |
GetFillsByProductId |
Zwraca wszystkie realizacje dla określonego produktu (np. BTC-USD) |
GetFillsByTradeId |
Zwraca szczegóły realizacji dla określonego ID transakcji |
// Get fills for a specific order
ShowMessage(oCoinbase.REST_API.GetFillsByOrderId('order-id-here'));
// Get all fills for BTC-USD
ShowMessage(oCoinbase.REST_API.GetFillsByProductId('BTC-USD'));
REST API — Pozycje
Punkt końcowy Positions służy do zarządzania pozycjami futures. Umożliwia zamknięcie otwartej pozycji futures.
| Metoda | Opis |
|---|---|
ClosePosition |
Zamyka otwartą pozycję futures dla danego produktu |
Kompletny przykład kodu
Poniższy przykład demonstruje kompletny przepływ pracy: łączenie z Coinbase, listowanie kont, pobieranie historycznych danych świec, subskrybowanie tickera w czasie rzeczywistym i składanie zlecenia rynkowego.
var
oClient: TsgcWebSocketClient;
oCoinbase: TsgcWSAPI_Coinbase;
begin
// Create and configure the WebSocket client
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: List all accounts in your portfolio
ShowMessage(oCoinbase.REST_API.ListAccounts);
// REST: Get hourly candles for BTC-USD
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// WebSocket: Subscribe to real-time ticker
oCoinbase.SubscribeTicker('BTC-USD');
// REST: Place a market buy order for 0.001 BTC
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
end;
Uwagi i najlepsze praktyki
Uprawnienia klucza API
Generując klucze API na platformie Coinbase Developer Platform, stosuj zasadę najmniejszych uprawnień. Dla pulpitu tylko do odczytu włącz wyłącznie uprawnienie View. Dla bota handlowego dodaj uprawnienie Trade, ale pozostaw Transfer wyłączone, chyba że aplikacja potrzebuje przenosić środki między kontami.
Stałe strony zlecenia
Składając zlecenia, używaj stałych wyliczenia Delphi dla strony zlecenia:
| Stała | Opis |
|---|---|
cosBuy |
Zlecenie kupna (nabycie waluty bazowej) |
cosSell |
Zlecenie sprzedaży (sprzedaż waluty bazowej) |
Ticker kontra TickerBatch
Używaj SubscribeTicker, gdy potrzebujesz każdej aktualizacji ceny w czasie rzeczywistym (np. dla silnika realizacji zleceń). Używaj SubscribeTickerBatch, gdy potrzebujesz jedynie okresowych migawek (np. dla pulpitu) — dostarcza te same dane z mniejszą częstotliwością, oszczędzając przepustowość i zasoby obliczeniowe.
Limity żądań
Coinbase Advanced Trade nakłada limity żądań na wywołania REST API. Limity różnią się w zależności od kategorii punktu końcowego (publiczne kontra prywatne, odczyt kontra zapis). Unikaj odpytywania punktów końcowych REST w ciasnych pętlach — zamiast tego używaj subskrypcji WebSocket do danych w czasie rzeczywistym, a wywołania REST rezerwuj dla zapytań na żądanie i operacji zleceń.
Wskazówka: w solidnej aplikacji handlowej połącz kanałSubscribeUser do aktualizacji stanu zleceń w czasie rzeczywistym z SubscribeTicker do bieżących cen rynkowych. Do realizacji transakcji używaj metod REST PlaceMarketOrder lub PlaceLimitOrder, a potwierdzenia realizacji szukaj w kanale użytkownika zamiast odpytywać GetOrder.
