BitMEX は先物・無期限契約のレバレッジ取引に特化した大手暗号資産デリバティブ取引所です。TsgcWSAPI_Bitmex コンポーネントは Delphi 開発者に WebSocket と REST API の両方へのアクセスを提供し、1 つのコンポーネントでリアルタイム市場データのストリーミング、注文執行、ポジション管理、包括的な口座操作を実現します。
目次
概要
多くの取引所コンポーネントが WebSocket のみをサポートするのとは異なり、TsgcWSAPI_Bitmex コンポーネントはデュアルインターフェースアプローチを提供します。WebSocket API はトピックベースのサブスクリプションを通じて取引、板情報更新、気配値、口座データのリアルタイムストリーミングを提供します。REST API(REST_API プロパティ経由でアクセス)は注文の発注、ポジション管理、市場データの照会のための同期的なリクエスト・レスポンスメソッドを提供します。この組み合わせはライブデータフィードと精密な注文執行の両方が必要な完全な取引アプリケーションの構築に最適です。
はじめに
TsgcWebSocketClient と TsgcWSAPI_Bitmex コンポーネントを作成してリンクし、認証情報を設定します。WebSocket 接続はクライアント経由でアクティブ化され、REST API は REST_API プロパティ経由でアクセスします。
oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
注意: パブリック WebSocket サブスクリプションとパブリック REST エンドポイントには API 認証情報は不要です。認証はプライベートトピック(execution、margin、order、position)と取引・ポジション関連の REST メソッドにのみ必要です。
WebSocket API
BitMEX WebSocket API はトピックベースのサブスクリプションモデルを使用します。トピックにサブスクライブ(オプションで銘柄フィルタリング可能)し、継続的な更新ストリームを受信します。コンポーネントは 3 つのコア WebSocket メソッドを提供します。
| メソッド | 説明 |
|---|---|
Subscribe |
トピックストリームにサブスクライブします(銘柄シンボルでフィルタリング可能)。 |
Unsubscribe |
以前にサブスクライブしたトピックストリームからアンサブスクライブします。 |
Authenticate |
プライベートトピックアクセスのために WebSocket セッションを認証します。 |
利用可能なトピック
トピックは受信するデータの種類を定義します。複数のトピックに同時にサブスクライブできます。サブスクリプション形式は topic:symbol で、シンボルフィルターはオプションです。
| トピック | 認証必須 | 説明 |
|---|---|---|
trade |
No | 取引所でのライブ約定情報。 |
instrument |
No | 資金調達レートと決済情報を含む銘柄データ。 |
orderBookL2 |
No | 差分更新付きの完全なレベル 2 板情報。 |
quote |
No | 板上位の最良ビッド・アスク気配値。 |
execution |
Yes | 自口座の取引約定および約定情報。 |
margin |
Yes | 口座証拠金残高および利用可能残高の更新。 |
order |
Yes | 未決注文および注文状態の更新。 |
position |
Yes | 未決ポジションおよび未実現損益の更新。 |
WebSocket サブスクリプションの例
// Subscribe to XBTUSD trades
oBitmex.Subscribe('trade:XBTUSD');
// Subscribe to the Level 2 order book
oBitmex.Subscribe('orderBookL2:XBTUSD');
// Subscribe to best bid/ask quotes
oBitmex.Subscribe('quote:XBTUSD');
// Authenticate for private topics
oBitmex.Authenticate;
// Subscribe to your order updates (requires auth)
oBitmex.Subscribe('order');
// Subscribe to your position updates (requires auth)
oBitmex.Subscribe('position');
// Unsubscribe from trades
oBitmex.Unsubscribe('trade:XBTUSD');
REST API: 市場データ
REST API はコンポーネントの REST_API プロパティ経由でアクセスします。市場データメソッドはアプリケーションでパース可能な JSON 文字列を返します。これらはリクエストされたデータを即座に返す同期呼び出しです。
| メソッド | 説明 |
|---|---|
GetInstruments |
取引所で利用可能なすべての銘柄リストを取得します。 |
GetInstrumentsActive |
アクティブに取引されている銘柄のみを取得します。 |
GetOrderBook |
銘柄の現在の板情報スナップショットを取得します。 |
GetQuotes |
最近の気配値(ビッド/アスク)データを取得します。 |
GetTrades |
最近の公開取引データを取得します。 |
GetExecutions |
自口座の生の約定データを取得します。 |
GetExecutionsTradeHistory |
自口座の取引約定履歴を取得します。 |
// Get the order book for XBTUSD
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// Get all active instruments
ShowMessage(oBitmex.REST_API.GetInstrumentsActive);
// Get recent trades
ShowMessage(oBitmex.REST_API.GetTrades('XBTUSD'));
// Get recent quotes
ShowMessage(oBitmex.REST_API.GetQuotes('XBTUSD'));
REST API: 取引
取引メソッドは注文の発注、修正、キャンセルを行います。REST API は成行、指値、逆指値、逆指値指値などの複数の注文タイプをサポートします。すべての取引メソッドには認証が必要です。
| メソッド | 説明 |
|---|---|
PlaceOrder |
全パラメーターを制御して新規注文を発注します。 |
PlaceMarketOrder |
最良価格で即座に約定する成行注文を発注します。 |
PlaceLimitOrder |
指定価格で指値注文を発注します。 |
PlaceStopOrder |
逆指値価格でトリガーされる逆指値(成行)注文を発注します。 |
PlaceStopLimitOrder |
トリガー価格と指値価格の両方を持つ逆指値指値注文を発注します。 |
AmendOrder |
既存注文の価格、数量、その他のパラメーターを修正します。 |
CancelOrder |
識別子で特定の注文をキャンセルします。 |
CancelAllOrders |
すべての未決注文を一括キャンセルします。 |
CancelAllOrdersAfter |
タイムアウト後にすべての注文をキャンセルするデッドマンズスイッチを設定します。 |
GetOrders |
すべての注文を取得します(状態でフィルタリング可能)。 |
注文の例
// Place a limit order: Buy 100 contracts of XBTUSD at $30,000
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
// Place a market order: Sell 50 contracts of XBTUSD
ShowMessage(oBitmex.REST_API.PlaceMarketOrder(bmsSell, 'XBTUSD', 50));
// Place a stop order: triggers when price reaches $28,000
ShowMessage(oBitmex.REST_API.PlaceStopOrder(bmsSell, 'XBTUSD', 100, 28000));
// Place a stop-limit order: triggers at $28,000, limit price $27,500
ShowMessage(oBitmex.REST_API.PlaceStopLimitOrder(bmsSell, 'XBTUSD', 100, 28000, 27500));
// Cancel a specific order
ShowMessage(oBitmex.REST_API.CancelOrder('order-id-here'));
// Cancel all open orders
ShowMessage(oBitmex.REST_API.CancelAllOrders);
注意: CancelAllOrdersAfter メソッドはデッドマンズスイッチとして機能します。指定されたタイムアウト内に更新されない場合はすべての注文をキャンセルします。アプリケーションが接続を失った場合に暴走注文を防ぐ安全機構として有用です。
REST API: ポジション
ポジション管理メソッドはレバレッジや証拠金設定を含む未決ポジションの照会、クローズ、設定を行います。
| メソッド | 説明 |
|---|---|
GetPosition |
銘柄の現在のポジションを取得します。 |
ClosePosition |
クロージング成行注文を発注して未決ポジションをクローズします。 |
SetPositionIsolate |
ポジションのクロスと分離証拠金モードを切り替えます。 |
SetPositionLeverage |
ポジションのレバレッジ倍率を設定します。 |
SetPositionRiskLimit |
ポジションのリスク制限を設定します。 |
SetPositionTransferMargin |
分離ポジションに証拠金を移転またはポジションから移転します。 |
ポジション管理の例
// Get current position for XBTUSD
ShowMessage(oBitmex.REST_API.GetPosition('XBTUSD'));
// Set leverage to 10x
ShowMessage(oBitmex.REST_API.SetPositionLeverage('XBTUSD', 10));
// Switch to isolated margin mode
ShowMessage(oBitmex.REST_API.SetPositionIsolate('XBTUSD', True));
// Close the position at market price
ShowMessage(oBitmex.REST_API.ClosePosition('XBTUSD'));
コード例
以下の例は WebSocket サブスクリプションと REST API 呼び出しを組み合わせた完全なワークフローを示します。接続、ライブ取引のサブスクライブ、板情報の照会、指値注文の発注です。
oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
// Subscribe to trades
oBitmex.Subscribe('trade:XBTUSD');
// REST: Get order book
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// REST: Place a limit order
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
設定と注意事項
API 認証情報
BitMEX アカウント設定から API キーとシークレットを生成します。特定の権限(注文、出金など)を持つキーを作成できます。取引ボットには必要な権限のみを持つキーを作成し、絶対に必要な場合以外は出金権限を有効にしないでください。
テストネットサポート
BitMEX は開発とテスト用に testnet.bitmex.com のテストネット環境を提供しています。本番環境への移行前に模擬資金で統合をテストするため、テストネットエンドポイントを使用するようコンポーネントを設定します。Bitmex プロパティグループには本番とテストネット環境を切り替える設定が含まれています。
注文サイドの列挙値
取引メソッドは注文方向を指定するために bmsBuy と bmsSell 列挙値を使用します。これらは BitMEX コンポーネント固有です。
WebSocket vs REST の使い分け
レイテンシが重要なリアルタイムデータストリーミング(ライブ価格表示、板情報の可視化、約定監視)には WebSocket サブスクリプションを使用します。注文の発注、ポジションの照会、過去データの取得などのオンデマンド操作には REST API を使用します。2 つのインターフェースは互いを補完し、同時に使用できます。
レート制限
BitMEX は REST API 呼び出しにレート制限を適用しています。制限はエンドポイントによって異なりますが、通常ほとんどの取引エンドポイントで 1 分あたり 60 リクエスト、注文修正・キャンセルで 1 分あたり 30 リクエストです。一時的なブロックを避けるため、レスポンスのレート制限ヘッダーを監視してください。WebSocket サブスクリプションは REST レート制限の対象外です。
銘柄シンボル
BitMEX は独自の銘柄シンボル形式を使用します。ビットコインの無期限契約は XBTUSD で、先物契約には満期日サフィックスが含まれます(例:XBTM25)。現在取引可能なすべての銘柄とそのシンボルを確認するには GetInstrumentsActive を使用します。
CancelAllOrdersAfter メソッドと定期タイマーを組み合わせてください。アプリケーションがクラッシュしたり接続を失ったりした場合、指定されたタイムアウト後にすべての注文が自動的にキャンセルされ、予期しない市場変動から保護されます。
