Coinbase API Güncellemesi sgcWebSockets

· Özellikler
Delphi'de Coinbase Advanced Trade API Entegrasyonu

Coinbase Advanced Trade, dünyanın en yaygın kullanılan kripto para borsalarından birinin profesyonel ticaret platformudur. Delphi için TsgcWSAPI_Coinbase bileşeni, hem WebSocket hem de REST API'lerine tam erişim sağlar; tek bir birleşik Delphi arayüzünden gerçek zamanlı piyasa verisi akışı, emir yönetimi, hesap izleme ve vadeli işlem bakiyesi takibine olanak tanır.

İçindekiler

Genel Bakış

Coinbase Advanced Trade API, eski Coinbase Pro API'sinin yerini alır ve profesyonel kripto para ticareti için modern bir arayüz sağlar. Hem geniş bir kripto varlık yelpazesi için spot ticareti hem de vadeli işlem sözleşmelerini destekler. API iki taşıma mekanizması kullanır:

Taşıma Kullanım Senaryosu Kimlik Doğrulama
WebSocket Piyasa verilerinin, kullanıcı olaylarının ve vadeli işlem bakiyelerinin gerçek zamanlı akışı Özel kanallar için zorunlu, genel kanallar için isteğe bağlı
REST Hesap sorguları, emir verme, ürün verileri ve gerçekleşme bilgilerinin alınması Tüm özel uç noktalar için zorunlu

Yapılandırma

Özel uç noktalara erişmek için TsgcWSAPI_Coinbase bileşenini API kimlik bilgilerinizle yapılandırın. Genel piyasa verisi uç noktalarına kimlik doğrulaması olmadan erişilebilir.

Özellik Tür Açıklama
Coinbase.ApiKey String Coinbase Advanced Trade API anahtarınız
Coinbase.ApiSecret String İstek imzalama için kullanılan Coinbase Advanced Trade API gizli anahtarınız (secret)
Not: API kimlik bilgilerinizi Coinbase Developer Platform üzerinden oluşturun. Bir anahtar oluştururken, Advanced Trade API türünü seçin ve yalnızca uygulamanızın ihtiyaç duyduğu izinleri atayın. Yalnızca piyasa verisi kullanan uygulamalar için, API anahtarı oluşturmayı tamamen atlayabilir ve yalnızca genel uç noktaları kullanabilirsiniz.
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, piyasa verileri ve özel hesap olayları için gerçek zamanlı akış kanalları sağlar. Genel kanallar kimlik doğrulaması olmadan piyasa geneli verileri sunarken, özel kanallar hesaba özgü olayları akıtır.

Genel Kanallar

Metot Açıklama
SubscribeHeartBeat / UnSubscribeHeartBeat Belirli bir ürün için periyodik heartbeat mesajları aracılığıyla bağlantı sağlığı izleme
SubscribeStatus / UnSubscribeStatus İşlem durumu ve açık artırma bilgileri dahil olmak üzere ürün durumu güncellemeleri
SubscribeTicker / UnSubscribeTicker Fiyat, 24 saatlik hacim ve en iyi alış/satış dahil olmak üzere gerçek zamanlı ticker verileri
SubscribeTickerBatch / UnSubscribeTickerBatch Daha düşük bant genişliği kullanımı için azaltılmış sıklıkta sunulan toplu ticker güncellemeleri
SubscribeLevel2 / UnSubscribeLevel2 Tam Level 2 emir defteri anlık görüntüleri ve artımlı güncellemeler
SubscribeCandles / UnSubscribeCandles Grafik oluşturma için gerçek zamanlı OHLCV mum verileri
SubscribeMarketTrades / UnSubscribeMarketTrades Belirli bir ürün için borsada gerçekleştirilen tüm işlemlerin gerçek zamanlı akışı

Özel Kanallar

Metot Açıklama
SubscribeUser / UnSubscribeUser Emirleriniz (yeni, gerçekleşmiş, iptal edilmiş) ve hesap etkinliği hakkında gerçek zamanlı güncellemeler
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary Vadeli işlem hesap bakiyeniz, marjınız ve tasfiye fiyatınız hakkında gerçek zamanlı güncellemeler
// 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 - Hesaplar

Hesaplar uç noktaları, Coinbase portföyünüzü sorgulamanıza olanak tanır. Her hesap, portföyünüzdeki tek bir para birimini veya varlığı, kullanılabilir ve tutulan bakiyeleriyle birlikte temsil eder.

Metot Açıklama
ListAccounts Portföyünüzdeki tüm hesapların bakiyeleriyle birlikte sayfalanmış bir listesini döndürür
GetAccount Bir hesabın UUID değerine göre ayrıntılarını döndürür
// 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 - Ürünler ve Piyasa Verileri

Ürünler uç noktaları, mevcut işlem çiftleri, emir defteri anlık görüntüleri, geçmiş mum verileri, son işlemler ve geçerli sunucu zamanı dahil olmak üzere piyasa verileri sağlar. Bunların tümü genel uç noktalardır ve kimlik doğrulaması gerektirmez.

Metot Açıklama
GetPublicProducts Mevcut tüm ürünlerin (işlem çiftleri) ayrıntılarıyla birlikte bir listesini döndürür
GetPublicProduct Bir ürünün kimliğine (örneğin BTC-USD) göre ayrıntılarını döndürür
GetPublicProductBook Belirli bir ürün için geçerli emir defterini döndürür
GetPublicProductCandles Bir tarih aralığı ve ayrıntı düzeyi içinde bir ürün için OHLCV mum verilerini döndürür
GetTrades Belirli bir ürün için son işlemleri döndürür
GetTime Geçerli Coinbase sunucu zamanını döndürür

Mum Ayrıntı Düzeyi Seçenekleri

Değer Açıklama
ONE_MINUTE 1 dakikalık mumlar
FIVE_MINUTE 5 dakikalık mumlar
FIFTEEN_MINUTE 15 dakikalık mumlar
THIRTY_MINUTE 30 dakikalık mumlar
ONE_HOUR 1 saatlik mumlar
TWO_HOUR 2 saatlik mumlar
SIX_HOUR 6 saatlik mumlar
ONE_DAY Günlük mumlar
// 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 - Emirler

Emirler uç noktaları, tam emir yaşam döngüsü yönetimi sağlar. Yeni emirler (market, limit veya stop) verebilir, mevcut emirleri sorgulayabilir, emirleri iptal edebilir ve gerçekleştirmeden önce emir sonuçlarını önizleyebilirsiniz.

Metot Açıklama
PlaceNewOrder Tam parametre kontrolüyle yeni bir emir verir
PlaceMarketOrder Market emri vermek için kolaylık metodu (geçerli fiyattan al veya sat)
PlaceLimitOrder Belirtilen bir fiyattan limit emri vermek için kolaylık metodu
PlaceStopOrder Belirtilen bir fiyatta tetiklenen stop emri vermek için kolaylık metodu
ListOrders İsteğe bağlı olarak duruma veya ürüne göre filtrelenmiş, sayfalanmış bir emir listesi döndürür
GetOrder Bir emrin kimliğine göre ayrıntılarını döndürür
CancelOrder Kimliklerine göre bir veya daha fazla açık emri iptal eder
EditOrder Mevcut bir emri değiştirir (örneğin fiyatı veya miktarı değiştirir)
EditOrderPreview Bir emir düzenlemesinin sonucunu gerçekleştirmeden önizler
PreviewOrder Yeni bir emrin sonucunu vermeden önizler (tahmini ücretler, kayma)
// 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');
İpucu: Gerçek fonları riske atmadan tahmini ücretleri ve gerçekleşme sonuçlarını görmek için canlı emirler vermeden önce PreviewOrder kullanın. Bu, nihai gerçekleşme fiyatının emir defteri derinliğine bağlı olduğu market emirleri için özellikle yararlıdır.

REST API - Gerçekleşmeler (Fills)

Gerçekleşmeler (fills), tamamlanmış veya kısmen gerçekleşmiş bir emri oluşturan bireysel işlemleri temsil eder. Tek bir emir, defterdeki birkaç bekleyen emirle eşleşirse birden fazla gerçekleşmeyle sonuçlanabilir. Gerçekleşmeleri emir kimliğine, ürün kimliğine veya işlem kimliğine göre sorgulayabilirsiniz.

Metot Açıklama
GetFillsByOrderId Belirli bir emir için tüm gerçekleşmeleri döndürür
GetFillsByProductId Belirli bir ürün için tüm gerçekleşmeleri döndürür (örneğin BTC-USD)
GetFillsByTradeId Belirli bir işlem kimliği için gerçekleşme ayrıntılarını döndürür
// 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 - Pozisyonlar

Pozisyonlar uç noktası, vadeli işlem pozisyonlarını yönetmek için kullanılır. Açık bir vadeli işlem pozisyonunu kapatmanıza olanak tanır.

Metot Açıklama
ClosePosition Belirli bir ürün için açık bir vadeli işlem pozisyonunu kapatır

Tam Kod Örneği

Aşağıdaki örnek, eksiksiz bir iş akışını gösterir: Coinbase'e bağlanma, hesapları listeleme, geçmiş mum verilerini alma, gerçek zamanlı bir ticker'a abone olma ve bir market emri verme.

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;

Notlar ve En İyi Uygulamalar

API Anahtarı İzinleri

Coinbase Developer Platform üzerinde API anahtarları oluştururken, en az ayrıcalık ilkesini izleyin. Yalnızca okunabilir bir gösterge panosu için yalnızca View iznini etkinleştirin. Bir ticaret botu için Trade iznini ekleyin, ancak uygulamanızın hesaplar arasında fon taşıması gerekmiyorsa Transfer iznini devre dışı bırakın.

Emir Yönü Sabitleri

Emir verirken, emir yönü için Delphi numaralandırma sabitlerini kullanın:

Sabit Açıklama
cosBuy Alış emri (temel para birimini edinme)
cosSell Satış emri (temel para birimini satma)

Ticker ile TickerBatch Karşılaştırması

Her fiyat güncellemesine gerçek zamanlı olarak ihtiyacınız olduğunda (örneğin bir emir gerçekleştirme motoru için) SubscribeTicker kullanın. Yalnızca periyodik anlık görüntülere ihtiyacınız olduğunda (örneğin bir gösterge panosu için) SubscribeTickerBatch kullanın; bu, aynı veriyi azaltılmış sıklıkta sunarak bant genişliğinden ve işlem yükünden tasarruf sağlar.

İstek Sınırları (Rate Limits)

Coinbase Advanced Trade, REST API çağrılarına istek sınırları uygular. Sınırlar uç nokta kategorisine göre değişir (genel ve özel, okuma ve yazma). REST uç noktalarını sıkı döngülerde sorgulamaktan kaçının; bunun yerine gerçek zamanlı veriler için WebSocket aboneliklerini kullanın ve REST çağrılarını isteğe bağlı sorgular ve emir işlemleri için saklayın.

İpucu: Sağlam bir ticaret uygulaması için, gerçek zamanlı emir durumu güncellemeleri için SubscribeUser kanalını canlı piyasa fiyatları için SubscribeTicker ile birleştirin. İşlemleri gerçekleştirmek için REST PlaceMarketOrder veya PlaceLimitOrder metotlarını kullanın ve gerçekleşmeyi GetOrder sorgulaması yapmak yerine kullanıcı kanalı aracılığıyla onaylayın.