Coinbase API 更新 sgcWebSockets

· 機能

Coinbase Advanced Trade は世界で最も広く使用されている暗号資産取引所の 1 つが提供するプロ向けトレーディングプラットフォームです。Delphi 向け TsgcWSAPI_Coinbase コンポーネントは WebSocket と REST API の両方への完全なアクセスを提供し、統一された Delphi インターフェイスからリアルタイム市場データストリーミング・注文管理・アカウント監視・先物残高追跡を実現します。

目次

概要

Coinbase Advanced Trade API は旧来の Coinbase Pro API の後継であり、プロ向け暗号資産取引のモダンなインターフェイスを提供します。幅広い暗号資産のスポット取引と先物契約の両方をサポートしています。API は 2 つのトランスポートメカニズムを使用します:

トランスポート 用途 認証
WebSocket 市場データ・ユーザーイベント・先物残高のリアルタイムストリーミング プライベートチャンネルでは必須、パブリックでは任意
REST アカウント照会・注文発注・プロダクトデータ・約定取得 すべてのプライベートエンドポイントで必須

設定

TsgcWSAPI_Coinbase コンポーネントに API 認証情報を設定してプライベートエンドポイントにアクセスします。パブリックな市場データエンドポイントは認証なしでアクセスできます。

プロパティ 説明
Coinbase.ApiKey String Coinbase Advanced Trade API キー
Coinbase.ApiSecret String リクエスト署名に使用する Coinbase Advanced Trade API シークレット
注:Coinbase Developer Platform から API 認証情報を生成してください。キーを作成する際は Advanced Trade API タイプを選択し、アプリケーションに必要な権限のみを付与してください。市場データのみのアプリケーションの場合は API キーの作成を省略してパブリックエンドポイントのみを使用できます。
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 は市場データとプライベートアカウントイベントのリアルタイムストリーミングチャンネルを提供します。パブリックチャンネルは認証なしで市場全体のデータを配信し、プライベートチャンネルはアカウント固有のイベントをストリーミングします。

パブリックチャンネル

メソッド 説明
SubscribeHeartBeat / UnSubscribeHeartBeat 指定プロダクトの定期的なハートビートメッセージによる接続ヘルス監視
SubscribeStatus / UnSubscribeStatus 取引ステータスとオークション情報を含むプロダクトステータスの更新
SubscribeTicker / UnSubscribeTicker 価格・24 時間出来高・最良買値/売値を含むリアルタイムティッカーデータ
SubscribeTickerBatch / UnSubscribeTickerBatch 帯域幅使用量を削減するために低頻度で配信されるバッチティッカー更新
SubscribeLevel2 / UnSubscribeLevel2 完全な Level 2 注文板スナップショットと差分更新
SubscribeCandles / UnSubscribeCandles チャート用リアルタイム OHLCV ローソク足データ
SubscribeMarketTrades / UnSubscribeMarketTrades 指定プロダクトの取引所で執行されたすべての取引のリアルタイムフィード

プライベートチャンネル

メソッド 説明
SubscribeUser / UnSubscribeUser 注文(新規・約定・キャンセル)とアカウントアクティビティのリアルタイム更新
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary 先物アカウント残高・証拠金・清算価格のリアルタイム更新
// 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 - アカウント

アカウントエンドポイントで Coinbase ポートフォリオを照会できます。各アカウントはポートフォリオ内の単一の通貨または資産を表し、利用可能残高と保有残高が含まれます。

メソッド 説明
ListAccounts ポートフォリオ内のすべてのアカウントと残高のページネーションリストを返します
GetAccount 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 - プロダクトと市場データ

プロダクトエンドポイントは利用可能な取引ペア・注文板スナップショット・過去のローソク足データ・直近の取引・現在のサーバー時刻などの市場データを提供します。すべてパブリックエンドポイントで認証は不要です。

メソッド 説明
GetPublicProducts 利用可能なすべてのプロダクト(取引ペア)とその詳細のリストを返します
GetPublicProduct ID(例:BTC-USD)でプロダクトの詳細を返します
GetPublicProductBook 指定プロダクトの現在の注文板を返します
GetPublicProductCandles 日付範囲と粒度を指定してプロダクトの OHLCV ローソク足データを返します
GetTrades 指定プロダクトの直近の取引を返します
GetTime 現在の Coinbase サーバー時刻を返します

ローソク足の粒度オプション

Value Description
ONE_MINUTE 1 分足
FIVE_MINUTE 5 分足
FIFTEEN_MINUTE 15 分足
THIRTY_MINUTE 30 分足
ONE_HOUR 1 時間足
TWO_HOUR 2 時間足
SIX_HOUR 6 時間足
ONE_DAY 日足
// 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 - 注文

注文エンドポイントは注文の完全なライフサイクル管理を提供します。新規注文(成行・指値・逆指値)の発注・既存注文の照会・注文キャンセル・執行前の注文プレビューが行えます。

メソッド 説明
PlaceNewOrder すべてのパラメーターを制御して新規注文を発注します
PlaceMarketOrder 成行注文(現在価格での買いまたは売り)を発注する便利メソッド
PlaceLimitOrder 指定価格で指値注文を発注する便利メソッド
PlaceStopOrder 指定価格でトリガーする逆指値注文を発注する便利メソッド
ListOrders ステータスまたはプロダクトでフィルタリングできる注文のページネーションリストを返します
GetOrder ID で単一注文の詳細を返します
CancelOrder ID で 1 つ以上のオープン注文をキャンセルします
EditOrder 既存の注文を変更します(例:価格またはサイズの変更)
EditOrderPreview 実行せずに注文編集の結果をプレビューします
PreviewOrder 発注せずに新規注文の結果をプレビューします(推定手数料・スリッページ)
// 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');
ヒント:実際の資金をリスクにさらすことなく推定手数料と執行結果を確認するため、ライブ注文を発注する前に PreviewOrder を使用してください。最終執行価格が注文板の深さに依存する成行注文では特に有用です。

REST API - 約定

約定は完了または部分的に約定した注文を構成する個々の執行を表します。単一の注文が板内の複数の指値注文とマッチングされた場合、複数の約定が発生することがあります。注文 ID・プロダクト ID・取引 ID で約定を照会できます。

メソッド 説明
GetFillsByOrderId 特定の注文のすべての約定を返します
GetFillsByProductId 特定のプロダクト(例:BTC-USD)のすべての約定を返します
GetFillsByTradeId 特定の取引 ID の約定詳細を返します
// 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 - ポジション

ポジションエンドポイントは先物ポジションの管理に使用します。オープンな先物ポジションをクローズできます。

メソッド 説明
ClosePosition 指定プロダクトのオープンな先物ポジションをクローズします

完全なコードサンプル

以下のサンプルは完全なワークフローを示しています:Coinbase への接続・アカウント一覧の取得・過去のローソク足データの取得・リアルタイムティッカーのサブスクライブ・成行注文の発注。

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;

注意事項とベストプラクティス

API キーの権限

Coinbase Developer Platform で API キーを生成する際は最小権限の原則に従ってください。読み取り専用ダッシュボードの場合は View 権限のみを有効にします。トレーディングボットの場合は Trade 権限を追加しますが、アカウント間で資金を移動する必要がない限り Transfer は無効のままにしてください。

注文サイド定数

注文を発注する際は注文サイドに Delphi 列挙型定数を使用してください:

定数 説明
cosBuy 買い注文(基軸通貨を取得)
cosSell 売り注文(基軸通貨を売却)

Ticker と TickerBatch の使い分け

すべての価格更新をリアルタイムで必要とする場合(例:注文執行エンジン)は SubscribeTicker を使用します。定期的なスナップショットのみ必要な場合(例:ダッシュボード)は SubscribeTickerBatch を使用します。同じデータを低頻度で配信し帯域幅と処理オーバーヘッドを節約できます。

レート制限

Coinbase Advanced Trade は REST API 呼び出しにレート制限を設けています。制限はエンドポイントカテゴリ(パブリック/プライベート、読み取り/書き込み)によって異なります。REST エンドポイントをタイトなループでポーリングするのは避け、リアルタイムデータには WebSocket サブスクリプションを使用し、REST 呼び出しはオンデマンドの照会と注文操作のために予約してください。

ヒント:堅牢なトレーディングアプリケーションのために、リアルタイム注文状態更新の SubscribeUser チャンネルとライブ市場価格の SubscribeTicker を組み合わせてください。取引の執行には REST の PlaceMarketOrder または PlaceLimitOrder メソッドを使用し、GetOrder をポーリングするのではなくユーザーチャンネルで執行を確認してください。