Aktualizacja API Coinbase w sgcWebSockets

· Funkcje
Integracja API Coinbase Advanced Trade w Delphi

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

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ń
Uwaga: generuj poświadczenia API na platformie Coinbase Developer Platform. Tworząc klucz, wybierz typ API Advanced Trade i przypisz tylko uprawnienia potrzebne aplikacji. W aplikacjach służących wyłącznie do odczytu danych rynkowych możesz całkowicie pominąć tworzenie kluczy API i korzystać wyłącznie z publicznych punktów końcowych.
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.