sgcWebSockets ライブラリは Binance 統合を継続的に拡張し、Spot REST API・Futures REST API・WebSocket ストリームをカバーする大量の新メソッドを追加しました。本記事では各新メソッドのパラメーターと実用的な Delphi コードサンプルを技術的に解説し、迅速に開始できるようにします。
目次
- 新しい Spot REST API メソッド
- Spot 市場データ:UI KLines・ローリングウィンドウ・取引日ティッカー
- Spot 注文管理:OCO・OTO・OTOCO・SOR 注文
- Spot アカウント:手数料・配分・レート制限・自己取引防止
- 新しい Futures REST API メソッド
- Futures 市場データ:連続 KLines・プレミアムインデックスなど
- Futures 注文管理:変更・バッチ・強制注文
- Futures アカウント:V3 エンドポイント・設定・手数料バーン
- 新しい Spot WebSocket ストリーム
- 新しい Futures WebSocket ストリーム
- 完全な動作サンプル
1. 新しい Spot REST API メソッド
TsgcHTTP_API_Binance_Rest クラスに新しい市場データエンドポイント・高度な注文タイプ・アカウント照会メソッドが追加されました。すべてのメソッドは REST コンポーネントから直接、または TsgcWS_API_Binance の REST_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;
GetKLines と GetUIKLines の違いは微妙です: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 メソッドにも新しいオプションパラメーター(aSelfTradePreventionMode・aStrategyId・aStrategyType)が追加されました。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 件の注文を発注します。 |
ModifyBatchOrders | 1 回のリクエストで最大 5 件の既存注文を変更します。 |
CancelBatchOrders | 注文 ID リストまたはクライアント注文 ID リストで複数の注文をキャンセルします。 |
GetOrderAmendment | 注文の変更履歴を取得します。 |
CountdownCancelAll | 指定時間(ミリ秒)後にシンボルのすべてのオープン注文をキャンセルするカウントダウンタイマーを設定します。 |
GetForceOrders | オプションのフィルタリング付きで強制清算注文を照会します。 |
GetADLQuantile | ポジションの ADL(自動デレバレッジング)分位数推定を取得します。 |
Futures の NewOrder シグネチャも新しいパラメーター(aPriceMatch・aSelfTradePreventionMode・aGoodTillDate・aPriceProtect)で拡張されました。
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 | シンボルごとの現在の注文レート制限ステータス。 |
GetApiTradingStatus | API 取引ステータスと取引制限をトリガーする可能性のある指標。 |
ChangeMultiAssetsMode | USDT-M 先物のマルチアセット証拠金モードを有効または無効にします。 |
GetMultiAssetsMode | 現在のマルチアセット証拠金モード設定を照会します。 |
SetFeeBurn | BNB 手数料バーン(割引で 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) |
ApiKey と ApiSecret の認証情報が必要です。本番環境に移行する前に TestNet := True を設定して Binance TestNet でテストすることを強くお勧めします。また、API キーの権限(取引・証拠金・先物)が実行する操作と一致していることを確認してください。
後方互換性:すべての追加は後方互換性があります。既存のメソッドシグネチャはデフォルトパラメーター値で拡張されているため、以前にコンパイルされたコードは変更なしで動作し続けます。新しいパラメーター(aSelfTradePreventionMode・aStrategyId・aPriceMatch など)はデフォルトで空またはゼロ値になっており、API が標準の動作を使用します。
