sgcWebSockets の新しい Binance API メソッド

· 機能

sgcWebSockets ライブラリは Binance 統合を継続的に拡張し、Spot REST API・Futures REST API・WebSocket ストリームをカバーする大量の新メソッドを追加しました。本記事では各新メソッドのパラメーターと実用的な Delphi コードサンプルを技術的に解説し、迅速に開始できるようにします。

目次

  1. 新しい Spot REST API メソッド
  2. Spot 市場データ:UI KLines・ローリングウィンドウ・取引日ティッカー
  3. Spot 注文管理:OCO・OTO・OTOCO・SOR 注文
  4. Spot アカウント:手数料・配分・レート制限・自己取引防止
  5. 新しい Futures REST API メソッド
  6. Futures 市場データ:連続 KLines・プレミアムインデックスなど
  7. Futures 注文管理:変更・バッチ・強制注文
  8. Futures アカウント:V3 エンドポイント・設定・手数料バーン
  9. 新しい Spot WebSocket ストリーム
  10. 新しい Futures WebSocket ストリーム
  11. 完全な動作サンプル

1. 新しい Spot REST API メソッド

TsgcHTTP_API_Binance_Rest クラスに新しい市場データエンドポイント・高度な注文タイプ・アカウント照会メソッドが追加されました。すべてのメソッドは REST コンポーネントから直接、または TsgcWS_API_BinanceREST_API プロパティを介してアクセスできます。

市場データエンドポイント

メソッド 説明 Binance Endpoint
GetUIKLines UI 表示に最適化されたローソク足データ。GetKLines と同一フォーマットで返しますがチャートレンダリング用に調整されています。 /api/v3/uiKlines
GetRollingWindowTicker ローリングウィンドウ価格変動統計。固定の 24 時間ティッカーとは異なり、設定可能なウィンドウサイズ(例:1h・4h・1d)をサポートします。 /api/v3/ticker
GetTradingDayTicker 取引日(UTC 00:00 から現在)全体の価格変動統計。単一または複数のシンボルをサポートします。 /api/v3/ticker/tradingDay
GetPriceTickers シンボル名の JSON 配列を使用して 1 回のリクエストで複数シンボルの価格ティッカーを取得します。 /api/v3/ticker/price

GetUIKLines

function GetUIKLines(const aSymbol: String;
  aInterval: TsgcHTTPBinanceChartIntervals; aStartTime: Int64 = 0;
  aEndTime: Int64 = 0; aLimit: Integer = 500): String;

GetKLinesGetUIKLines の違いは微妙です:UI バリアントは Binance バックエンドでチャートレンダリング向けに最適化されており、視覚的な表現を改善するためにローソク足の境界が変更される場合があります。レスポンスフォーマットは同一なので、チャート用途のドロップイン代替として使用できます。

var
  vJSON: string;
begin
  // Retrieve 1-hour UI-optimized klines for BTCUSDT
  vJSON := sgcBinanceREST.GetUIKLines('BTCUSDT', bcih1h, 0, 0, 100);
  Memo1.Lines.Add(vJSON);
end;

GetRollingWindowTicker

function GetRollingWindowTicker(const aSymbol: String = '';
  const aSymbols: String = ''; const aWindowSize: String = ''): String;

このメソッドはカスタムウィンドウサイズを許可することで従来の Get24hrTicker を拡張します。aWindowSize に指定できる値は '1h''4h''1d' です。省略した場合はデフォルトウィンドウが使用されます。

var
  vJSON: string;
begin
  // Get 4-hour rolling window stats for ETHUSDT
  vJSON := sgcBinanceREST.GetRollingWindowTicker('ETHUSDT', '', '4h');
  Memo1.Lines.Add(vJSON);
  // Get rolling window for multiple symbols
  vJSON := sgcBinanceREST.GetRollingWindowTicker('',
    '["BTCUSDT","ETHUSDT"]', '1h');
  Memo1.Lines.Add(vJSON);
end;

GetTradingDayTicker

function GetTradingDayTicker(const aSymbol: String = '';
  const aSymbols: String = ''; const aType: String = ''): String;
var
  vJSON: string;
begin
  // Get trading day statistics for BTCUSDT (FULL response)
  vJSON := sgcBinanceREST.GetTradingDayTicker('BTCUSDT', '', 'FULL');
  Memo1.Lines.Add(vJSON);
end;

高度な注文タイプ

Binance は元の OCO を超えるいくつかの新しい注文リストタイプを導入しました。sgcWebSockets ライブラリがすべてをネイティブでサポートするようになりました。

NewOrderListOCO(新 OCO フォーマット)

新 OCO フォーマットはレガシーの NewOCO を置き換え、より柔軟な上値/下値価格設定を導入します。OCO の各レグは独自の注文タイプ・ストップ価格・トレーリングデルタ・有効期限を個別に設定できます。

function NewOrderListOCO(const aSymbol, aSide: String;
  aQuantity: Double; const aAboveType: String;
  const aBelowType: String;
  aAboveClientOrderId: String = '';
  aAboveIcebergQty: Double = 0; aAbovePrice: Double = 0;
  aAboveStopPrice: Double = 0; aAboveTrailingDelta: Int64 = 0;
  aAboveTimeInForce: String = '';
  aBelowClientOrderId: String = '';
  aBelowIcebergQty: Double = 0; aBelowPrice: Double = 0;
  aBelowStopPrice: Double = 0; aBelowTrailingDelta: Int64 = 0;
  aBelowTimeInForce: String = '';
  aListClientOrderId: String = '';
  aNewOrderRespType: String = '';
  aSelfTradePreventionMode: String = ''): String;
var
  vJSON: string;
begin
  // Place a new-format OCO: take-profit above + stop-loss below
  vJSON := sgcBinanceREST.NewOrderListOCO(
    'BTCUSDT',          // symbol
    'SELL',              // side
    0.001,              // quantity
    'LIMIT_MAKER',      // above type (take-profit)
    'STOP_LOSS_LIMIT',  // below type (stop-loss)
    '',                 // aboveClientOrderId
    0,                  // aboveIcebergQty
    72000.0,            // abovePrice (take-profit price)
    0,                  // aboveStopPrice
    0,                  // aboveTrailingDelta
    '',                 // aboveTimeInForce
    '',                 // belowClientOrderId
    0,                  // belowIcebergQty
    62000.0,            // belowPrice (limit price for stop)
    62500.0,            // belowStopPrice (trigger price)
    0,                  // belowTrailingDelta
    'GTC'               // belowTimeInForce
  );
  Memo1.Lines.Add(vJSON);
end;

NewOrderListOTO(片方が他方をトリガー)

OTO 注文リストは稼働注文と待機注文で構成されます。稼働注文が執行されると待機注文が自動的に発注されます。自動フォローアップ注文付きのエントリー注文の設定に有用です。

function NewOrderListOTO(const aSymbol: String;
  const aWorkingType, aWorkingSide: String;
  aWorkingQuantity: Double; aWorkingPrice: Double;
  const aPendingType, aPendingSide: String;
  aPendingQuantity: Double;
  { ... additional optional parameters ... }
  ): String;
var
  vJSON: string;
begin
  // Buy BTCUSDT at limit, then automatically place a stop-loss sell
  vJSON := sgcBinanceREST.NewOrderListOTO(
    'BTCUSDT',
    'LIMIT', 'BUY',       // working order: limit buy
    0.001, 65000.0,        // working quantity and price
    'STOP_LOSS_LIMIT', 'SELL',  // pending: stop-loss sell
    0.001,                 // pending quantity
    '',                    // workingClientOrderId
    'GTC',                 // workingTimeInForce
    0,                     // workingIcebergQty
    '',                    // pendingClientOrderId
    62000.0,               // pendingPrice (limit)
    62500.0                // pendingStopPrice (trigger)
  );
  Memo1.Lines.Add(vJSON);
end;

NewOrderListOTOCO(片方が OCO をトリガー)

OTO と OCO ロジックを組み合わせます:稼働注文が約定すると OCO ペア(利食い + 損切り)がトリガーされます。単一の API 呼び出しで完全に自動化されたエントリー+エグジットプラン戦略を実現します。

var
  vJSON: string;
begin
  // Entry: limit buy at 65000
  // On fill: places OCO with take-profit at 72000 and stop-loss at 62000
  vJSON := sgcBinanceREST.NewOrderListOTOCO(
    'BTCUSDT',
    'LIMIT', 'BUY',          // working order
    0.001, 65000.0,           // working qty & price
    'SELL',                   // pending side
    'LIMIT_MAKER',            // pending above type
    'STOP_LOSS_LIMIT',        // pending below type
    0.001,                   // pending quantity
    '',                      // workingClientOrderId
    'GTC',                   // workingTimeInForce
    0,                       // workingIcebergQty
    '',                      // pendingAboveClientOrderId
    72000.0,                 // pendingAbovePrice (take-profit)
    0,                       // pendingAboveStopPrice
    0,                       // pendingAboveTrailingDelta
    '',                      // pendingAboveTimeInForce
    0,                       // pendingAboveIcebergQty
    '',                      // pendingBelowClientOrderId
    62000.0,                 // pendingBelowPrice
    62500.0                  // pendingBelowStopPrice
  );
  Memo1.Lines.Add(vJSON);
end;

スマートオーダールーティング(SOR)

SOR 注文は Binance が複数の流動性プールをルーティングして執行を最適化できます。ライブ執行用の NewSOROrder と実際の発注なしでバリデーションを行う TestSOROrder の 2 つの新しいメソッドが提供されます。

function NewSOROrder(const aSymbol, aSide, aType: String;
  aQuantity: Double; aTimeInForce: String = '';
  aPrice: Double = 0; aNewClientOrderId: String = '';
  aNewOrderRespType: String = '';
  aIcebergQty: Double = 0;
  aSelfTradePreventionMode: String = '';
  aStrategyId: Int64 = 0; aStrategyType: Integer = 0): String;
var
  vJSON: string;
begin
  // Place a SOR limit order
  vJSON := sgcBinanceREST.NewSOROrder(
    'BTCUSDT', 'BUY', 'LIMIT',
    0.001,             // quantity
    'GTC',             // timeInForce
    65000.0            // price
  );
  Memo1.Lines.Add(vJSON);
  // Test a SOR order without execution
  vJSON := sgcBinanceREST.TestSOROrder('BTCUSDT', 'BUY', 'LIMIT',
    0.001, 'GTC', 65000.0);
  Memo1.Lines.Add(vJSON);
end;

CancelReplaceOrder(キャンセル&置換)

既存の注文をアトミックにキャンセルして新しい注文を発注します。2 つの別々のキャンセル+発注呼び出しの間にポジションがない状態になるリスクなく注文を変更する必要がある戦略に重要です。

var
  vJSON: string;
begin
  // Cancel order 123456 and replace it with a new limit buy
  vJSON := sgcBinanceREST.CancelReplaceOrder(
    'BTCUSDT', 'BUY', 'LIMIT',
    'STOP_ON_FAILURE',   // mode: only place new if cancel succeeds
    'GTC',               // timeInForce
    0.001,               // quantity
    0,                   // quoteOrderQty
    64500.0,             // new price
    '',                  // cancelNewClientOrderId
    '',                  // cancelOrigClientOrderId
    123456               // cancelOrderId
  );
  Memo1.Lines.Add(vJSON);
end;

アカウント・照会エンドポイント

メソッド 説明
GetAccountInformation(aOmitZeroBalances) aOmitZeroBalances パラメーターで拡張されました。True に設定すると残高がゼロの資産がレスポンスから除外されます。
GetOrderRateLimitUsage 現在の注文数とレート制限使用量を返します。高頻度シナリオで API 制限内に収まるために不可欠です。
GetPreventedMatches 防止された自己取引マッチを照会します。シンボル・注文 ID・防止マッチ ID によるフィルタリングとページネーションをサポートします。
GetAllocations SOR 注文の配分を取得し、注文がどのようにプール間で分配されたかを示します。
GetAccountCommission 特定のシンボルのメイカー/テイカー手数料率を返します。
var
  vJSON: string;
begin
  // Get account info, omitting zero balances
  vJSON := sgcBinanceREST.GetAccountInformation(True);
  Memo1.Lines.Add(vJSON);
  // Check order rate limit usage
  vJSON := sgcBinanceREST.GetOrderRateLimitUsage;
  Memo1.Lines.Add(vJSON);
  // Get commission rates for BTCUSDT
  vJSON := sgcBinanceREST.GetAccountCommission('BTCUSDT');
  Memo1.Lines.Add(vJSON);
  // Get prevented matches for a symbol
  vJSON := sgcBinanceREST.GetPreventedMatches('BTCUSDT');
  Memo1.Lines.Add(vJSON);
  // Get SOR allocations for a symbol
  vJSON := sgcBinanceREST.GetAllocations('BTCUSDT');
  Memo1.Lines.Add(vJSON);
end;
注:NewOrder および TestNewOrder メソッドにも新しいオプションパラメーター(aSelfTradePreventionModeaStrategyIdaStrategyType)が追加されました。CancelOrder メソッドは条件付きキャンセルのための aCancelRestrictions パラメーターを受け付けるようになりました。これらの追加は後方互換性があり、既存のコードは変更なしで動作し続けます。

2. 新しい Futures REST API メソッド

TsgcHTTP_API_Binance_Futures_Rest クラスは最大数の新メソッドを受け取り、市場データ・注文管理・アカウント設定・ストリーム管理をカバーしています。すべてのメソッドは FuturesContracts プロパティで制御される USDT-M と COIN-M の両先物で動作します。

Futures 市場データ

メソッド 説明
GetContinuousKLines連続契約のローソク足データ。ペア・契約タイプ(例:'PERPETUAL''CURRENT_QUARTER')・インターバルが必要です。
GetIndexPriceKLines取引ペアのインデックス価格に基づくローソク足データ。
GetMarkPriceKLinesシンボルのマーク価格に基づくローソク足データ。
GetPremiumIndexKLinesベーシス計算とファンディングレート分析のためのプレミアムインデックスローソク足データ。
GetFundingInfoファンディングインターバルと上限/下限レートを含むすべてのシンボルのファンディングレート情報を返します。
GetPriceTickerV2改善されたレスポンスフォーマットの V2 価格ティッカー。
GetIndexInfo複合インデックスシンボルのインデックス価格と構成データを返します。
GetAssetIndexマルチアセットモード証拠金計算のための資産インデックス価格。
GetConstituents指定した複合インデックスの構成要素とその重みを照会します。
GetDeliveryPrice四半期/半四半期契約の過去の受渡価格。
GetBasis指定ペアと契約タイプのベーシスデータ(先物価格とスポット価格のスプレッド)。
var
  vJSON: string;
begin
  // Continuous klines for BTCUSDT perpetual, 1h interval
  vJSON := sgcBinanceFutREST.GetContinuousKLines(
    'BTCUSDT', 'PERPETUAL', bcih1h, 0, 0, 100);
  Memo1.Lines.Add(vJSON);
  // Mark price klines for ETHUSDT, 15m interval
  vJSON := sgcBinanceFutREST.GetMarkPriceKLines('ETHUSDT', bcih15m);
  Memo1.Lines.Add(vJSON);
  // Index price klines
  vJSON := sgcBinanceFutREST.GetIndexPriceKLines('BTCUSDT', bcih4h);
  Memo1.Lines.Add(vJSON);
  // Premium index klines for funding analysis
  vJSON := sgcBinanceFutREST.GetPremiumIndexKLines('BTCUSDT', bcih1h);
  Memo1.Lines.Add(vJSON);
  // Get funding info for all symbols
  vJSON := sgcBinanceFutREST.GetFundingInfo;
  Memo1.Lines.Add(vJSON);
  // V2 price ticker
  vJSON := sgcBinanceFutREST.GetPriceTickerV2('BTCUSDT');
  Memo1.Lines.Add(vJSON);
  // Basis data
  vJSON := sgcBinanceFutREST.GetBasis('BTCUSDT', 'PERPETUAL', oip1h, 30);
  Memo1.Lines.Add(vJSON);
  // Delivery price history
  vJSON := sgcBinanceFutREST.GetDeliveryPrice('BTCUSD');
  Memo1.Lines.Add(vJSON);
end;

Futures 注文管理

新しい Futures 注文メソッドはテスト注文・注文変更・バッチ処理・清算照会を提供します。

メソッド 説明
TestNewOrder発注せずに新規先物注文をバリデーションします。NewOrder シグネチャをミラーします。
ModifyOrder既存のオープン注文の価格・数量・価格マッチングモードを変更します。
NewBatchOrders注文オブジェクトの JSON 配列で 1 回のリクエストに最大 5 件の注文を発注します。
ModifyBatchOrders1 回のリクエストで最大 5 件の既存注文を変更します。
CancelBatchOrders注文 ID リストまたはクライアント注文 ID リストで複数の注文をキャンセルします。
GetOrderAmendment注文の変更履歴を取得します。
CountdownCancelAll指定時間(ミリ秒)後にシンボルのすべてのオープン注文をキャンセルするカウントダウンタイマーを設定します。
GetForceOrdersオプションのフィルタリング付きで強制清算注文を照会します。
GetADLQuantileポジションの ADL(自動デレバレッジング)分位数推定を取得します。

Futures の NewOrder シグネチャも新しいパラメーター(aPriceMatchaSelfTradePreventionModeaGoodTillDateaPriceProtect)で拡張されました。

var
  vJSON: string;
begin
  // Test a futures order without execution
  vJSON := sgcBinanceFutREST.TestNewOrder(
    'BTCUSDT', 'BUY', '', 'LIMIT',
    'GTC', 0.001, 'false', 65000.0);
  Memo1.Lines.Add('TestNewOrder: ' + vJSON);
  // Modify an existing order's price
  vJSON := sgcBinanceFutREST.ModifyOrder('BTCUSDT', 123456, '',
    'BUY', 0.001, 64800.0);
  Memo1.Lines.Add('ModifyOrder: ' + vJSON);
  // Cancel multiple orders at once
  vJSON := sgcBinanceFutREST.CancelBatchOrders('BTCUSDT',
    '[123456,123457,123458]');
  Memo1.Lines.Add('CancelBatch: ' + vJSON);
  // Set countdown cancel: cancel all BTCUSDT orders in 30 seconds
  vJSON := sgcBinanceFutREST.CountdownCancelAll('BTCUSDT', 30000);
  Memo1.Lines.Add('Countdown: ' + vJSON);
  // Query forced liquidation orders
  vJSON := sgcBinanceFutREST.GetForceOrders('BTCUSDT');
  Memo1.Lines.Add('ForceOrders: ' + vJSON);
  // ADL quantile estimation
  vJSON := sgcBinanceFutREST.GetADLQuantile('BTCUSDT');
  Memo1.Lines.Add('ADL: ' + vJSON);
end;

Futures アカウントと設定

設定と手数料管理メソッドとともにいくつかの V3 アカウントエンドポイントが追加されました。

メソッド 説明
GetAccountBalanceV3マルチアセット証拠金サポートが改善された V3 アカウント残高。
GetAccountInformationV3マルチアセット証拠金モードと更新された手数料ティアを含む V3 アカウント詳細。
GetPositionInformationV3追加の精度フィールドを持つ V3 ポジションデータ。
GetCommissionRate特定の先物シンボルの現在のメイカー/テイカー手数料率を返します。
GetAccountConfigアカウントレベル設定:手数料ティア・ポジションモード・マルチアセット証拠金モード。
GetSymbolConfigシンボルごとの設定:レバレッジ・証拠金タイプ・ポジションモード。
GetOrderRateLimitシンボルごとの現在の注文レート制限ステータス。
GetApiTradingStatusAPI 取引ステータスと取引制限をトリガーする可能性のある指標。
ChangeMultiAssetsModeUSDT-M 先物のマルチアセット証拠金モードを有効または無効にします。
GetMultiAssetsMode現在のマルチアセット証拠金モード設定を照会します。
SetFeeBurnBNB 手数料バーン(割引で BNB で手数料を支払う)を有効または無効にします。
GetFeeBurn現在の手数料バーン設定を照会します。

リッスンキー管理

WebSocket コンポーネントから独立して、REST 経由で先物ユーザーデータストリームのリッスンキーライフサイクルを直接処理する 3 つの専用メソッドが追加されました:

メソッド 説明
CreateListenKeyユーザーデータストリームの新しいリッスンキーを生成します(POST)。
KeepAliveListenKeyリッスンキーの有効期間を延長します(PUT)。60 分ごとに呼び出す必要があります。
CloseListenKeyリッスンキーを無効にしてクローズします(DELETE)。
var
  vJSON: string;
begin
  // V3 balance and account info
  vJSON := sgcBinanceFutREST.GetAccountBalanceV3;
  Memo1.Lines.Add('V3 Balance: ' + vJSON);
  vJSON := sgcBinanceFutREST.GetAccountInformationV3;
  Memo1.Lines.Add('V3 Account: ' + vJSON);
  vJSON := sgcBinanceFutREST.GetPositionInformationV3('BTCUSDT');
  Memo1.Lines.Add('V3 Position: ' + vJSON);
  // Commission rate
  vJSON := sgcBinanceFutREST.GetCommissionRate('BTCUSDT');
  Memo1.Lines.Add('Commission: ' + vJSON);
  // Account and symbol configuration
  vJSON := sgcBinanceFutREST.GetAccountConfig;
  Memo1.Lines.Add('AccountConfig: ' + vJSON);
  vJSON := sgcBinanceFutREST.GetSymbolConfig('BTCUSDT');
  Memo1.Lines.Add('SymbolConfig: ' + vJSON);
  // Enable multi-asset margin mode
  vJSON := sgcBinanceFutREST.ChangeMultiAssetsMode(True);
  Memo1.Lines.Add('MultiAssets: ' + vJSON);
  // Enable BNB fee burn
  vJSON := sgcBinanceFutREST.SetFeeBurn(True);
  Memo1.Lines.Add('FeeBurn: ' + vJSON);
  // Check API trading status
  vJSON := sgcBinanceFutREST.GetApiTradingStatus('BTCUSDT');
  Memo1.Lines.Add('TradingStatus: ' + vJSON);
  // Listen key lifecycle (REST-only approach)
  vJSON := sgcBinanceFutREST.CreateListenKey;
  Memo1.Lines.Add('ListenKey: ' + vJSON);
end;

3. 新しい Spot WebSocket ストリーム

TsgcWS_API_Binance クラスに 3 つの新しいストリームタイプが追加され、それぞれサブスクライブとアンサブスクライブメソッドがあります。

メソッド Stream 説明
SubscribeAvgPrice / UnSubscribeAvgPrice <symbol>@avgPrice シンボルのリアルタイム平均価格ストリーム。
SubscribeRollingWindowTicker <symbol>@ticker_<window> 設定可能なウィンドウサイズ(1h・4h・1d)のローリングウィンドウ統計。
SubscribeAllRollingWindowTickers !ticker_<window>@arr 特定のウィンドウサイズでのすべての取引シンボルのローリングウィンドウ統計。

タイプセーフなウィンドウサイズ指定のための新しい列挙型 TsgcWSBinanceRollingWindowSize が提供されます:

TsgcWSBinanceRollingWindowSize = (brw1h, brw4h, brw1d);
procedure TForm1.btnSubscribeClick(Sender: TObject);
begin
  if not sgcWebSocketClient1.Active then
    sgcWebSocketClient1.Active := True;
  // Subscribe to average price updates for BTCUSDT
  sgcBinance.SubscribeAvgPrice('btcusdt');
  // Subscribe to 1-hour rolling window ticker for ETHUSDT
  sgcBinance.SubscribeRollingWindowTicker('ethusdt', brw1h);
  // Subscribe to all tickers with a 4-hour rolling window
  sgcBinance.SubscribeAllRollingWindowTickers(brw4h);
end;
procedure TForm1.btnUnsubscribeClick(Sender: TObject);
begin
  sgcBinance.UnSubscribeAvgPrice('btcusdt');
  sgcBinance.UnSubscribeRollingWindowTicker('ethusdt', brw1h);
  sgcBinance.UnSubscribeAllRollingWindowTickers(brw4h);
end;

4. 新しい Futures WebSocket ストリーム

TsgcWS_API_Binance_Futures クラスは最大数の新 WebSocket ストリームサブスクリプションを受け取ります。連続契約・複合インデックス・資産インデックス・インデックス価格・マーク価格ローソク足をカバーしています。

メソッド Stream 説明
SubscribeContinuousKLine<pair>_<contract>@continuousKline_<interval>連続契約のローソク足ストリーム。ペア・契約タイプ・インターバルが必要です。
SubscribeCompositeIndex<symbol>@compositeIndex構成要素の内訳付きの複合インデックス価格ストリーム。
SubscribeContractInfo!contractInfo契約情報ストリーム。上場・上場廃止・ブラケット変更の更新をプッシュします。
SubscribeAssetIndex / SubscribeAllAssetIndex<symbol>@assetIndex / !assetIndex@arrマルチアセット証拠金計算のための資産インデックス価格。シンボルごとまたは全市場。
SubscribeIndexPrice<pair>@indexPrice取引ペアのインデックス価格ストリーム。オプションの更新速度パラメーターをサポートします。
SubscribeIndexPriceKLine<pair>@indexPriceKline_<interval>設定可能なインターバルのインデックス価格ローソク足ストリーム。
SubscribeMarkPriceKLine<symbol>@markPriceKline_<interval>清算計算で使用されるマーク価格を追跡するマーク価格ローソク足ストリーム。
procedure TForm1.SubscribeFuturesStreams;
begin
  if not sgcWebSocketClient1.Active then
    sgcWebSocketClient1.Active := True;
  // Continuous kline for BTCUSDT perpetual contract, 1h interval
  sgcBinanceFutures.SubscribeContinuousKLine('btcusdt',
    'perpetual', bci1h);
  // Composite index stream
  sgcBinanceFutures.SubscribeCompositeIndex('defiusdt');
  // Contract info updates (no symbol needed)
  sgcBinanceFutures.SubscribeContractInfo;
  // Asset index for a single symbol
  sgcBinanceFutures.SubscribeAssetIndex('btcusd');
  // All asset index prices
  sgcBinanceFutures.SubscribeAllAssetIndex;
  // Index price with default update speed
  sgcBinanceFutures.SubscribeIndexPrice('btcusdt');
  // Index price kline, 15m interval
  sgcBinanceFutures.SubscribeIndexPriceKLine('btcusdt', bci15m);
  // Mark price kline, 5m interval
  sgcBinanceFutures.SubscribeMarkPriceKLine('btcusdt', bci5m);
end;

5. 完全な動作サンプル

サンプル 1:Spot REST + WebSocket 組み合わせ(VCL アプリケーション)

典型的なパターンは注文発注に REST API を使用し、リアルタイム市場データに WebSocket API を使用することです。以下のサンプルは TsgcWS_API_Binance コンポーネントを通じて両方をセットアップする方法を示しています。

unit MainForm;
interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  StdCtrls, sgcWebSocket_Classes, sgcWebSocket_API_Binance,
  sgcWebSocket_APIs, sgcBase_Classes, sgcWebSocket_Client, sgcWebSocket;
type
  TForm1 = class(TForm)
    sgcWebSocketClient1: TsgcWebSocketClient;
    sgcBinance: TsgcWSAPI_Binance;
    btnConnect: TButton;
    btnGetTicker: TButton;
    btnPlaceSOROrder: TButton;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure btnConnectClick(Sender: TObject);
    procedure btnGetTickerClick(Sender: TObject);
    procedure btnPlaceSOROrderClick(Sender: TObject);
    procedure sgcWebSocketClient1Message(Connection: TsgcWSConnection;
      const Text: string);
  end;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
  // Configure API credentials
  sgcBinance.Binance.ApiKey := 'your-api-key';
  sgcBinance.Binance.ApiSecret := 'your-api-secret';
  sgcBinance.Binance.TestNet := True;  // use testnet during development
  sgcBinance.Binance.UserStream := False;
end;
procedure TForm1.btnConnectClick(Sender: TObject);
begin
  sgcWebSocketClient1.Active := True;
  // Subscribe to new streams
  sgcBinance.SubscribeAvgPrice('btcusdt');
  sgcBinance.SubscribeRollingWindowTicker('btcusdt', brw1h);
end;
procedure TForm1.btnGetTickerClick(Sender: TObject);
begin
  // Use new REST endpoints via the integrated REST_API property
  Memo1.Lines.Add(sgcBinance.REST_API.GetTradingDayTicker('BTCUSDT'));
  Memo1.Lines.Add(sgcBinance.REST_API.GetRollingWindowTicker('BTCUSDT',
    '', '4h'));
  Memo1.Lines.Add(sgcBinance.REST_API.GetAccountCommission('BTCUSDT'));
end;
procedure TForm1.btnPlaceSOROrderClick(Sender: TObject);
begin
  // Test a Smart Order Routing order
  Memo1.Lines.Add(sgcBinance.REST_API.TestSOROrder(
    'BTCUSDT', 'BUY', 'LIMIT', 0.001, 'GTC', 65000.0));
end;
procedure TForm1.sgcWebSocketClient1Message(Connection: TsgcWSConnection;
  const Text: string);
begin
  Memo1.Lines.Add(Text);
end;
end.

サンプル 2:Futures REST + WebSocket(コンソールアプリケーション)

コンソールアプリケーションはヘッドレスボットとバックグラウンドサービスに最適です。以下のサンプルはコンソールコンテキストで新しい Futures メソッドを使用する方法を示しています。

program BinanceFuturesConsole;
{$APPTYPE CONSOLE}
{$R *.res}
uses
  Classes, SysUtils,
  sgcWebSocket, sgcWebSocket_APIs, sgcWebSocket_Types,
  sgcWebSocket_Classes, sgcHTTP_API_Binance;
var
  FutREST: TsgcHTTP_API_Binance_Futures_Rest;
  vJSON: string;
begin
  try
    FutREST := TsgcHTTP_API_Binance_Futures_Rest.Create(nil);
    try
      FutREST.BinanceOptions.ApiKey := 'your-api-key';
      FutREST.BinanceOptions.ApiSecret := 'your-api-secret';
      FutREST.BinanceOptions.TestNet := True;
      FutREST.FuturesContracts := bfchUSDT;
      // New market data methods
      vJSON := FutREST.GetFundingInfo;
      WriteLn('Funding Info: ', Copy(vJSON, 1, 200), '...');
      vJSON := FutREST.GetPriceTickerV2('BTCUSDT');
      WriteLn('PriceV2: ', vJSON);
      vJSON := FutREST.GetContinuousKLines('BTCUSDT',
        'PERPETUAL', bcih1h, 0, 0, 5);
      WriteLn('ContinuousKLines: ', Copy(vJSON, 1, 200), '...');
      // V3 account endpoints
      vJSON := FutREST.GetAccountBalanceV3;
      WriteLn('V3 Balance: ', Copy(vJSON, 1, 200), '...');
      // Account configuration
      vJSON := FutREST.GetAccountConfig;
      WriteLn('Config: ', vJSON);
      vJSON := FutREST.GetSymbolConfig('BTCUSDT');
      WriteLn('SymbolConfig: ', vJSON);
      // Commission and fee management
      vJSON := FutREST.GetCommissionRate('BTCUSDT');
      WriteLn('Commission: ', vJSON);
      vJSON := FutREST.GetFeeBurn;
      WriteLn('FeeBurn: ', vJSON);
      // Listen key management
      vJSON := FutREST.CreateListenKey;
      WriteLn('ListenKey: ', vJSON);
    finally
      FutREST.Free;
    end;
  except
    on E: Exception do
      WriteLn(E.ClassName, ': ', E.Message);
  end;
end.

サンプル 3:OTOCO 注文戦略

OTOCO 注文タイプは最も完全な自動取引ライフサイクルを表します:単一の呼び出しでエントリー注文を発注し、約定すると自動的に利食いと損切りの両方を設定します。

procedure TForm1.PlaceOTOCOStrategy;
var
  vResult: string;
begin
  // Strategy: buy ETHUSDT at 3400, take profit at 3600, stop-loss at 3300
  vResult := sgcBinance.REST_API.NewOrderListOTOCO(
    'ETHUSDT',
    // Working order: limit buy entry
    'LIMIT',              // workingType
    'BUY',                // workingSide
    0.1,                  // workingQuantity
    3400.0,               // workingPrice
    // Pending OCO (triggered after entry fills)
    'SELL',                // pendingSide
    'LIMIT_MAKER',         // pendingAboveType (take-profit)
    'STOP_LOSS_LIMIT',     // pendingBelowType (stop-loss)
    0.1,                  // pendingQuantity
    '',                   // workingClientOrderId
    'GTC',                // workingTimeInForce
    0,                    // workingIcebergQty
    '',                   // pendingAboveClientOrderId
    3600.0,               // pendingAbovePrice (take-profit target)
    0,                    // pendingAboveStopPrice
    0,                    // pendingAboveTrailingDelta
    '',                   // pendingAboveTimeInForce
    0,                    // pendingAboveIcebergQty
    '',                   // pendingBelowClientOrderId
    3250.0,               // pendingBelowPrice (stop-loss limit)
    3300.0                // pendingBelowStopPrice (trigger)
  );
  if Pos('"orderListId"', vResult) > 0 then
    Memo1.Lines.Add('OTOCO placed successfully')
  else
    Memo1.Lines.Add('OTOCO error: ' + vResult);
end;

まとめ

以下の表は各クラスに追加された新メソッドの数をまとめています:

コンポーネント Class 新メソッド
Spot REST API TsgcHTTP_API_Binance_Rest GetUIKLines, GetRollingWindowTicker, GetTradingDayTicker, NewOrderListOCO, NewOrderListOTO, NewOrderListOTOCO, NewSOROrder, TestSOROrder, CancelReplaceOrder, GetOrderRateLimitUsage, GetPreventedMatches, GetAllocations, GetAccountCommission
Futures REST API TsgcHTTP_API_Binance_Futures_Rest TestNewOrder, ModifyOrder, NewBatchOrders, ModifyBatchOrders, CancelBatchOrders, GetOrderAmendment, CountdownCancelAll, GetForceOrders, GetADLQuantile, GetAccountBalanceV3, GetAccountInformationV3, GetPositionInformationV3, GetCommissionRate, GetAccountConfig, GetSymbolConfig, GetOrderRateLimit, GetApiTradingStatus, ChangeMultiAssetsMode, GetMultiAssetsMode, SetFeeBurn, GetFeeBurn, GetContinuousKLines, GetIndexPriceKLines, GetMarkPriceKLines, GetPremiumIndexKLines, GetFundingInfo, GetPriceTickerV2, GetIndexInfo, GetAssetIndex, GetConstituents, GetDeliveryPrice, GetBasis, CreateListenKey, KeepAliveListenKey, CloseListenKey
Spot WebSocket TsgcWS_API_Binance SubscribeAvgPrice, SubscribeRollingWindowTicker, SubscribeAllRollingWindowTickers (+ matching UnSubscribe methods)
Futures WebSocket TsgcWS_API_Binance_Futures SubscribeContinuousKLine, SubscribeCompositeIndex, SubscribeContractInfo, SubscribeAssetIndex, SubscribeAllAssetIndex, SubscribeIndexPrice, SubscribeIndexPriceKLine, SubscribeMarkPriceKLine (+ matching UnSubscribe methods)
重要:注文を発注・変更・キャンセルするすべての取引メソッドは有効な ApiKeyApiSecret の認証情報が必要です。本番環境に移行する前に TestNet := True を設定して Binance TestNet でテストすることを強くお勧めします。また、API キーの権限(取引・証拠金・先物)が実行する操作と一致していることを確認してください。 後方互換性:すべての追加は後方互換性があります。既存のメソッドシグネチャはデフォルトパラメーター値で拡張されているため、以前にコンパイルされたコードは変更なしで動作し続けます。新しいパラメーター(aSelfTradePreventionModeaStrategyIdaPriceMatch など)はデフォルトで空またはゼロ値になっており、API が標準の動作を使用します。