Coinbase Advanced Trade は世界で最も広く使用されている暗号資産取引所の 1 つが提供するプロ向けトレーディングプラットフォームです。Delphi 向け TsgcWSAPI_Coinbase コンポーネントは WebSocket と REST API の両方への完全なアクセスを提供し、統一された Delphi インターフェイスからリアルタイム市場データストリーミング・注文管理・アカウント監視・先物残高追跡を実現します。
目次
- 概要
- 設定
- WebSocket API
- REST API - アカウント
- REST API - プロダクトと市場データ
- REST API - 注文
- REST API - 約定
- REST API - ポジション
- 完全なコードサンプル
- 注意事項とベストプラクティス
概要
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 シークレット |
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 をポーリングするのではなくユーザーチャンネルで執行を確認してください。
