Neue Binance-API-Methoden in sgcWebSockets

· Funktionen

Die sgcWebSockets-Bibliothek erweitert ihre Binance-Integration mit einem umfangreichen Satz neuer Methoden für Spot-REST-API, Futures-REST-API und WebSocket-Streams. Dieser Artikel liefert einen technischen Überblick über jede neue Methode, ihre Parameter und praktische Delphi-Code-Beispiele für den schnellen Einstieg.

Inhaltsverzeichnis

  1. Neue Spot-REST-API-Methoden
  2. Spot-Marktdaten: UI-KLines, Rolling Window & Trading Day Tickers
  3. Spot-Order-Management: OCO, OTO, OTOCO & SOR Orders
  4. Spot-Konto: Commission, Allocations, Rate Limits & Prevented Matches
  5. Neue Futures-REST-API-Methoden
  6. Futures-Marktdaten: Continuous KLines, Premium Index & mehr
  7. Futures-Order-Management: Modify, Batch & Force Orders
  8. Futures-Konto: V3-Endpoints, Config & Fee Burn
  9. Neue Spot-WebSocket-Streams
  10. Neue Futures-WebSocket-Streams
  11. Vollständige funktionierende Beispiele

1. Neue Spot-REST-API-Methoden

Die Klasse TsgcHTTP_API_Binance_Rest wurde um neue Marktdaten-Endpoints, erweiterte Order-Typen und Kontoabfrage-Methoden erweitert. Alle Methoden sind entweder direkt über die REST-Komponente oder über die Property REST_API von TsgcWS_API_Binance erreichbar.

Marktdaten-Endpoints

Methode Beschreibung Binance-Endpoint
GetUIKLines Für UI-Darstellung optimierte Kline-/Candlestick-Daten. Liefert Daten im gleichen Format wie GetKLines, aber für Chart-Rendering abgestimmt. /api/v3/uiKlines
GetRollingWindowTicker Preisänderungsstatistiken im Rolling-Window-Verfahren. Unterstützt konfigurierbare Fenstergrößen (z. B. 1h, 4h, 1d), anders als der feste 24h-Ticker. /api/v3/ticker
GetTradingDayTicker Preisänderungsstatistiken über den Handelstag berechnet (UTC 00:00 bis aktuell). Unterstützt einzelne oder mehrere Symbole. /api/v3/ticker/tradingDay
GetPriceTickers Preisticker für mehrere Symbole in einer einzigen Anfrage abrufen, über ein JSON-Array von Symbolnamen. /api/v3/ticker/price

GetUIKLines

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

Der Unterschied zwischen GetKLines und GetUIKLines ist subtil: Die UI-Variante ist vom Binance-Backend für Chart-Rendering optimiert und kann modifizierte Kline-Grenzen für bessere visuelle Darstellung liefern. Das Antwortformat ist identisch — also ein Drop-in-Ersatz für jeden Charting-Use-Case.

var
  vJSON: string;
begin
  // 1-Stunden-UI-optimierte Klines für BTCUSDT abrufen
  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;

Diese Methode erweitert den klassischen Get24hrTicker, indem sie benutzerdefinierte Fenstergrößen erlaubt. Akzeptierte Werte für aWindowSize sind '1h', '4h' und '1d'. Bei Auslassung wird das Standardfenster verwendet.

var
  vJSON: string;
begin
  // 4-Stunden-Rolling-Window-Statistiken für ETHUSDT abrufen
  vJSON := sgcBinanceREST.GetRollingWindowTicker('ETHUSDT', '', '4h');
  Memo1.Lines.Add(vJSON);
  // Rolling Window für mehrere Symbole abrufen
  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
  // Trading-Day-Statistiken für BTCUSDT (FULL-Response) abrufen
  vJSON := sgcBinanceREST.GetTradingDayTicker('BTCUSDT', '', 'FULL');
  Memo1.Lines.Add(vJSON);
end;

Erweiterte Order-Typen

Binance hat mehrere neue Order-List-Typen eingeführt, die über das ursprüngliche OCO hinausgehen. Die sgcWebSockets-Bibliothek unterstützt sie jetzt alle nativ.

NewOrderListOCO (neues OCO-Format)

Das neue OCO-Format ersetzt das alte NewOCO und führt flexiblere Above-/Below-Preiskonfigurationen ein. Jeder Schenkel der OCO lässt sich unabhängig mit eigenem Order-Typ, Stop-Preis, Trailing-Delta und Time-in-Force konfigurieren.

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
  // Neue OCO platzieren: Take-Profit oberhalb + Stop-Loss unterhalb
  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 (One-Triggers-the-Other)

Eine OTO-Order-Liste besteht aus einer Working-Order und einer Pending-Order. Wenn die Working-Order ausgeführt wird, wird die Pending-Order automatisch platziert. Nützlich für Entry-Orders mit automatischen Folge-Orders.

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
  // BTCUSDT per Limit kaufen, dann automatisch einen Stop-Loss-Sell platzieren
  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 (One-Triggers-an-OCO)

Kombiniert OTO- und OCO-Logik: Eine Working-Order löst beim Fill ein OCO-Paar (Take-Profit + Stop-Loss) aus. Das ermöglicht vollautomatische Entry-with-Exit-Plan-Strategien in einem einzigen API-Aufruf.

var
  vJSON: string;
begin
  // Entry: Limit-Buy bei 65000
  // Bei Fill: platziert OCO mit Take-Profit bei 72000 und Stop-Loss bei 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;

Smart Order Routing (SOR)

SOR-Orders erlauben Binance, die Ausführung durch Routing über mehrere Liquiditätspools zu optimieren. Es gibt zwei neue Methoden: NewSOROrder für Live-Ausführung und TestSOROrder zur Validierung ohne tatsächliche Platzierung.

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
  // SOR-Limit-Order platzieren
  vJSON := sgcBinanceREST.NewSOROrder(
    'BTCUSDT', 'BUY', 'LIMIT',
    0.001,             // quantity
    'GTC',             // timeInForce
    65000.0            // price
  );
  Memo1.Lines.Add(vJSON);
  // SOR-Order ohne Ausführung testen
  vJSON := sgcBinanceREST.TestSOROrder('BTCUSDT', 'BUY', 'LIMIT',
    0.001, 'GTC', 65000.0);
  Memo1.Lines.Add(vJSON);
end;

CancelReplaceOrder

Storniert atomar eine bestehende Order und platziert eine neue. Entscheidend für Strategien, die Orders ändern müssen, ohne zwischen zwei getrennten Cancel-+-Place-Aufrufen ohne Position dazustehen.

var
  vJSON: string;
begin
  // Order 123456 stornieren und durch neuen Limit-Buy ersetzen
  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;

Konto- und Abfrage-Endpoints

Methode Beschreibung
GetAccountInformation(aOmitZeroBalances) Erweitert um den Parameter aOmitZeroBalances. Bei True werden Assets mit Saldo null aus der Antwort ausgeschlossen.
GetOrderRateLimitUsage Liefert die aktuelle Order-Anzahl und Rate-Limit-Nutzung — essentiell, um in Hochfrequenz-Szenarien innerhalb der API-Limits zu bleiben.
GetPreventedMatches Fragt verhinderte Self-Trade-Matches ab. Unterstützt Filterung nach Symbol, Order-ID oder Prevented-Match-ID mit Paginierung.
GetAllocations Ruft SOR-Order-Allocations ab und zeigt, wie eine Order auf Pools verteilt wurde.
GetAccountCommission Liefert die Maker-/Taker-Kommissionsrate für ein bestimmtes Symbol.
var
  vJSON: string;
begin
  // Kontoinformationen abrufen, Salden null auslassen
  vJSON := sgcBinanceREST.GetAccountInformation(True);
  Memo1.Lines.Add(vJSON);
  // Order-Rate-Limit-Nutzung prüfen
  vJSON := sgcBinanceREST.GetOrderRateLimitUsage;
  Memo1.Lines.Add(vJSON);
  // Kommissionsraten für BTCUSDT abrufen
  vJSON := sgcBinanceREST.GetAccountCommission('BTCUSDT');
  Memo1.Lines.Add(vJSON);
  // Prevented Matches für ein Symbol abrufen
  vJSON := sgcBinanceREST.GetPreventedMatches('BTCUSDT');
  Memo1.Lines.Add(vJSON);
  // SOR-Allocations für ein Symbol abrufen
  vJSON := sgcBinanceREST.GetAllocations('BTCUSDT');
  Memo1.Lines.Add(vJSON);
end;
Hinweis: Die Methoden NewOrder und TestNewOrder wurden ebenfalls mit neuen optionalen Parametern erweitert: aSelfTradePreventionMode, aStrategyId und aStrategyType. Die Methode CancelOrder akzeptiert nun einen Parameter aCancelRestrictions für bedingtes Cancel. Diese Ergänzungen sind rückwärtskompatibel — bestehender Code funktioniert unverändert.

2. Neue Futures-REST-API-Methoden

Die Klasse TsgcHTTP_API_Binance_Futures_Rest hat den größten Satz neuer Methoden erhalten — abgedeckt sind Marktdaten, Order-Management, Kontokonfiguration und Stream-Management. Alle Methoden arbeiten mit USDT-M- und COIN-M-Futures, gesteuert über die Property FuturesContracts.

Futures-Marktdaten

Methode Beschreibung
GetContinuousKLinesKline-/Candlestick-Daten für einen Continuous-Kontrakt. Erfordert Pair, Kontrakttyp (z. B. 'PERPETUAL', 'CURRENT_QUARTER') und Intervall.
GetIndexPriceKLinesKline-Daten basierend auf dem Index-Preis eines Handelspaares.
GetMarkPriceKLinesKline-Daten basierend auf dem Mark-Preis eines Symbols.
GetPremiumIndexKLinesPremium-Index-Kline-Daten zur Basis-Berechnung und Funding-Rate-Analyse.
GetFundingInfoLiefert Funding-Rate-Infos für alle Symbole inklusive Funding-Intervall und Cap-/Floor-Raten.
GetPriceTickerV2V2-Preisticker mit verbessertem Antwortformat.
GetIndexInfoLiefert Indexpreis und Bestandteildaten für ein Composite-Index-Symbol.
GetAssetIndexAsset-Indexpreise für Margin-Berechnungen im Multi-Asset-Modus.
GetConstituentsBestandteile und ihre Gewichtungen für einen Composite-Index abfragen.
GetDeliveryPriceHistorische Delivery-Preise für Quartals-/Halbjahres-Kontrakte.
GetBasisBasis-Daten (Spread zwischen Futures- und Spot-Preis) für ein Paar und Kontrakttyp.
var
  vJSON: string;
begin
  // Continuous Klines für BTCUSDT Perpetual, 1h-Intervall
  vJSON := sgcBinanceFutREST.GetContinuousKLines(
    'BTCUSDT', 'PERPETUAL', bcih1h, 0, 0, 100);
  Memo1.Lines.Add(vJSON);
  // Mark-Price-Klines für ETHUSDT, 15m-Intervall
  vJSON := sgcBinanceFutREST.GetMarkPriceKLines('ETHUSDT', bcih15m);
  Memo1.Lines.Add(vJSON);
  // Index-Price-Klines
  vJSON := sgcBinanceFutREST.GetIndexPriceKLines('BTCUSDT', bcih4h);
  Memo1.Lines.Add(vJSON);
  // Premium-Index-Klines für Funding-Analyse
  vJSON := sgcBinanceFutREST.GetPremiumIndexKLines('BTCUSDT', bcih1h);
  Memo1.Lines.Add(vJSON);
  // Funding-Info für alle Symbole abrufen
  vJSON := sgcBinanceFutREST.GetFundingInfo;
  Memo1.Lines.Add(vJSON);
  // V2-Preisticker
  vJSON := sgcBinanceFutREST.GetPriceTickerV2('BTCUSDT');
  Memo1.Lines.Add(vJSON);
  // Basis-Daten
  vJSON := sgcBinanceFutREST.GetBasis('BTCUSDT', 'PERPETUAL', oip1h, 30);
  Memo1.Lines.Add(vJSON);
  // Delivery-Preishistorie
  vJSON := sgcBinanceFutREST.GetDeliveryPrice('BTCUSD');
  Memo1.Lines.Add(vJSON);
end;

Futures-Order-Management

Die neuen Futures-Order-Methoden bieten Test-Orders, Order-Modifikation, Batch-Verarbeitung und Liquidations-Abfragen.

Methode Beschreibung
TestNewOrderValidiert eine neue Futures-Order, ohne sie zu platzieren. Spiegelt die Signatur von NewOrder.
ModifyOrderÄndert Preis, Menge oder Price-Matching-Modus einer bestehenden offenen Order.
NewBatchOrdersPlatziert bis zu 5 Orders in einer einzigen Anfrage über ein JSON-Array von Order-Objekten.
ModifyBatchOrdersModifiziert bis zu 5 bestehende Orders in einer einzigen Anfrage.
CancelBatchOrdersStorniert mehrere Orders über eine Order-ID-Liste oder Client-Order-ID-Liste.
GetOrderAmendmentRuft die Änderungs-(Amendment-)Historie einer Order ab.
CountdownCancelAllSetzt einen Countdown-Timer (in Millisekunden), nach dem alle offenen Orders für ein Symbol storniert werden.
GetForceOrdersFragt erzwungene Liquidations-Orders mit optionaler Filterung ab.
GetADLQuantileRuft die ADL- (Auto-Deleveraging-)Quantilschätzung für Positionen ab.

Die Signatur von NewOrder für Futures wurde ebenfalls um neue Parameter erweitert: aPriceMatch, aSelfTradePreventionMode, aGoodTillDate und aPriceProtect.

var
  vJSON: string;
begin
  // Futures-Order ohne Ausführung testen
  vJSON := sgcBinanceFutREST.TestNewOrder(
    'BTCUSDT', 'BUY', '', 'LIMIT',
    'GTC', 0.001, 'false', 65000.0);
  Memo1.Lines.Add('TestNewOrder: ' + vJSON);
  // Preis einer bestehenden Order ändern
  vJSON := sgcBinanceFutREST.ModifyOrder('BTCUSDT', 123456, '',
    'BUY', 0.001, 64800.0);
  Memo1.Lines.Add('ModifyOrder: ' + vJSON);
  // Mehrere Orders auf einmal stornieren
  vJSON := sgcBinanceFutREST.CancelBatchOrders('BTCUSDT',
    '[123456,123457,123458]');
  Memo1.Lines.Add('CancelBatch: ' + vJSON);
  // Countdown-Cancel setzen: alle BTCUSDT-Orders in 30 Sekunden stornieren
  vJSON := sgcBinanceFutREST.CountdownCancelAll('BTCUSDT', 30000);
  Memo1.Lines.Add('Countdown: ' + vJSON);
  // Erzwungene Liquidations-Orders abfragen
  vJSON := sgcBinanceFutREST.GetForceOrders('BTCUSDT');
  Memo1.Lines.Add('ForceOrders: ' + vJSON);
  // ADL-Quantilschätzung
  vJSON := sgcBinanceFutREST.GetADLQuantile('BTCUSDT');
  Memo1.Lines.Add('ADL: ' + vJSON);
end;

Futures-Konto und Konfiguration

Mehrere V3-Konto-Endpoints wurden zusätzlich zu Konfigurations- und Fee-Management-Methoden hinzugefügt.

Methode Beschreibung
GetAccountBalanceV3V3-Kontostand mit verbesserter Multi-Asset-Margin-Unterstützung.
GetAccountInformationV3V3-Kontodetails inklusive Multi-Asset-Margin-Modus und aktualisierten Fee-Tiers.
GetPositionInformationV3V3-Positionsdaten mit zusätzlichen Präzisions-Feldern.
GetCommissionRateLiefert die aktuelle Maker-/Taker-Kommissionsrate für ein bestimmtes Futures-Symbol.
GetAccountConfigKontoweite Konfiguration: Fee-Tier, Positions-Modus, Multi-Asset-Margin-Modus.
GetSymbolConfigSymbolweite Konfiguration: Hebel, Margin-Typ und Positions-Modus.
GetOrderRateLimitAktueller Order-Rate-Limit-Status pro Symbol.
GetApiTradingStatusAPI-Trading-Status und Indikatoren, die Trading-Einschränkungen auslösen können.
ChangeMultiAssetsModeMulti-Asset-Margin-Modus für USDT-M-Futures aktivieren oder deaktivieren.
GetMultiAssetsModeAktuelle Einstellung des Multi-Asset-Margin-Modus abfragen.
SetFeeBurnBNB-Fee-Burn aktivieren oder deaktivieren (Gebühren mit BNB rabattiert bezahlen).
GetFeeBurnAktuelle Fee-Burn-Einstellung abfragen.

Listen-Key-Verwaltung

Drei dedizierte Methoden verwalten nun den Listen-Key-Lebenszyklus des Futures-User-Data-Streams direkt über REST, unabhängig von der WebSocket-Komponente:

Methode Beschreibung
CreateListenKeyErzeugt einen neuen Listen-Key für den User-Data-Stream (POST).
KeepAliveListenKeyVerlängert die Gültigkeit eines Listen-Keys (PUT). Muss alle 60 Minuten aufgerufen werden.
CloseListenKeyMacht einen Listen-Key ungültig und schließt ihn (DELETE).
var
  vJSON: string;
begin
  // V3-Saldo und Kontoinfo
  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);
  // Kommissionsrate
  vJSON := sgcBinanceFutREST.GetCommissionRate('BTCUSDT');
  Memo1.Lines.Add('Commission: ' + vJSON);
  // Konto- und Symbolkonfiguration
  vJSON := sgcBinanceFutREST.GetAccountConfig;
  Memo1.Lines.Add('AccountConfig: ' + vJSON);
  vJSON := sgcBinanceFutREST.GetSymbolConfig('BTCUSDT');
  Memo1.Lines.Add('SymbolConfig: ' + vJSON);
  // Multi-Asset-Margin-Modus aktivieren
  vJSON := sgcBinanceFutREST.ChangeMultiAssetsMode(True);
  Memo1.Lines.Add('MultiAssets: ' + vJSON);
  // BNB-Fee-Burn aktivieren
  vJSON := sgcBinanceFutREST.SetFeeBurn(True);
  Memo1.Lines.Add('FeeBurn: ' + vJSON);
  // API-Trading-Status prüfen
  vJSON := sgcBinanceFutREST.GetApiTradingStatus('BTCUSDT');
  Memo1.Lines.Add('TradingStatus: ' + vJSON);
  // Listen-Key-Lebenszyklus (Nur-REST-Ansatz)
  vJSON := sgcBinanceFutREST.CreateListenKey;
  Memo1.Lines.Add('ListenKey: ' + vJSON);
end;

3. Neue Spot-WebSocket-Streams

Die Klasse TsgcWS_API_Binance wurde um drei neue Stream-Typen erweitert, jeweils mit Subscribe- und Unsubscribe-Methoden.

Methode Stream Beschreibung
SubscribeAvgPrice / UnSubscribeAvgPrice <symbol>@avgPrice Echtzeit-Durchschnittspreis-Stream für ein Symbol.
SubscribeRollingWindowTicker <symbol>@ticker_<window> Rolling-Window-Statistiken mit konfigurierbarer Fenstergröße (1h, 4h, 1d).
SubscribeAllRollingWindowTickers !ticker_<window>@arr Rolling-Window-Statistiken für alle gehandelten Symbole bei einer bestimmten Fenstergröße.

Ein neuer Aufzählungstyp TsgcWSBinanceRollingWindowSize ermöglicht eine typsichere Angabe der Fenstergröße:

TsgcWSBinanceRollingWindowSize = (brw1h, brw4h, brw1d);
procedure TForm1.btnSubscribeClick(Sender: TObject);
begin
  if not sgcWebSocketClient1.Active then
    sgcWebSocketClient1.Active := True;
  // Durchschnittspreis-Updates für BTCUSDT abonnieren
  sgcBinance.SubscribeAvgPrice('btcusdt');
  // 1-Stunden-Rolling-Window-Ticker für ETHUSDT abonnieren
  sgcBinance.SubscribeRollingWindowTicker('ethusdt', brw1h);
  // Alle Ticker mit 4-Stunden-Rolling-Window abonnieren
  sgcBinance.SubscribeAllRollingWindowTickers(brw4h);
end;
procedure TForm1.btnUnsubscribeClick(Sender: TObject);
begin
  sgcBinance.UnSubscribeAvgPrice('btcusdt');
  sgcBinance.UnSubscribeRollingWindowTicker('ethusdt', brw1h);
  sgcBinance.UnSubscribeAllRollingWindowTickers(brw4h);
end;

4. Neue Futures-WebSocket-Streams

Die Klasse TsgcWS_API_Binance_Futures erhält den größten Satz neuer WebSocket- Stream-Subscriptions. Sie decken Continuous-Kontrakte, Composite-Indizes, Asset-Indizes, Index-Preise und Mark-Price-Klines ab.

Methode Stream Beschreibung
SubscribeContinuousKLine<pair>_<contract>@continuousKline_<interval>Kline-Stream für Continuous-Kontrakte. Erfordert Pair, Kontrakttyp und Intervall.
SubscribeCompositeIndex<symbol>@compositeIndexComposite-Index-Preis-Stream mit Komponenten-Aufschlüsselung.
SubscribeContractInfo!contractInfoKontraktinformations-Stream. Liefert Updates zu Listing, Delisting und Bracket-Änderungen.
SubscribeAssetIndex / SubscribeAllAssetIndex<symbol>@assetIndex / !assetIndex@arrAsset-Index-Preise für Multi-Asset-Margin-Berechnungen. Pro Symbol oder gesamter Markt.
SubscribeIndexPrice<pair>@indexPriceIndex-Preis-Stream für ein Handelspaar. Unterstützt optionalen Update-Speed-Parameter.
SubscribeIndexPriceKLine<pair>@indexPriceKline_<interval>Index-Preis-Kline-/Candlestick-Stream mit konfigurierbaren Intervallen.
SubscribeMarkPriceKLine<symbol>@markPriceKline_<interval>Mark-Price-Kline-Stream zur Nachverfolgung des Mark-Preises in Liquidationsberechnungen.
procedure TForm1.SubscribeFuturesStreams;
begin
  if not sgcWebSocketClient1.Active then
    sgcWebSocketClient1.Active := True;
  // Continuous Kline für BTCUSDT-Perpetual-Kontrakt, 1h-Intervall
  sgcBinanceFutures.SubscribeContinuousKLine('btcusdt',
    'perpetual', bci1h);
  // Composite-Index-Stream
  sgcBinanceFutures.SubscribeCompositeIndex('defiusdt');
  // Kontraktinfo-Updates (kein Symbol nötig)
  sgcBinanceFutures.SubscribeContractInfo;
  // Asset-Index für ein einzelnes Symbol
  sgcBinanceFutures.SubscribeAssetIndex('btcusd');
  // Alle Asset-Index-Preise
  sgcBinanceFutures.SubscribeAllAssetIndex;
  // Indexpreis mit Standard-Update-Speed
  sgcBinanceFutures.SubscribeIndexPrice('btcusdt');
  // Index-Preis-Kline, 15m-Intervall
  sgcBinanceFutures.SubscribeIndexPriceKLine('btcusdt', bci15m);
  // Mark-Price-Kline, 5m-Intervall
  sgcBinanceFutures.SubscribeMarkPriceKLine('btcusdt', bci5m);
end;

5. Vollständige funktionierende Beispiele

Beispiel 1: Spot REST + WebSocket kombiniert (VCL-Anwendung)

Ein typisches Muster: Die REST-API für das Platzieren von Orders und die WebSocket-API für Echtzeit-Marktdaten nutzen. Das folgende Beispiel zeigt das Setup beider über die Komponente 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
  // API-Zugangsdaten konfigurieren
  sgcBinance.Binance.ApiKey := 'dein-api-key';
  sgcBinance.Binance.ApiSecret := 'dein-api-secret';
  sgcBinance.Binance.TestNet := True;  // im Development das Testnet nutzen
  sgcBinance.Binance.UserStream := False;
end;
procedure TForm1.btnConnectClick(Sender: TObject);
begin
  sgcWebSocketClient1.Active := True;
  // Neue Streams abonnieren
  sgcBinance.SubscribeAvgPrice('btcusdt');
  sgcBinance.SubscribeRollingWindowTicker('btcusdt', brw1h);
end;
procedure TForm1.btnGetTickerClick(Sender: TObject);
begin
  // Neue REST-Endpoints über die integrierte REST_API-Property nutzen
  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
  // Smart-Order-Routing-Order testen
  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.

Beispiel 2: Futures REST + WebSocket (Konsolenanwendung)

Konsolenanwendungen sind ideal für Headless-Bots und Hintergrunddienste. Das folgende Beispiel zeigt die Nutzung der neuen Futures-Methoden im Konsolenkontext.

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 := 'dein-api-key';
      FutREST.BinanceOptions.ApiSecret := 'dein-api-secret';
      FutREST.BinanceOptions.TestNet := True;
      FutREST.FuturesContracts := bfchUSDT;
      // Neue Marktdaten-Methoden
      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-Konto-Endpoints
      vJSON := FutREST.GetAccountBalanceV3;
      WriteLn('V3 Balance: ', Copy(vJSON, 1, 200), '...');
      // Kontokonfiguration
      vJSON := FutREST.GetAccountConfig;
      WriteLn('Config: ', vJSON);
      vJSON := FutREST.GetSymbolConfig('BTCUSDT');
      WriteLn('SymbolConfig: ', vJSON);
      // Kommission und Gebührenverwaltung
      vJSON := FutREST.GetCommissionRate('BTCUSDT');
      WriteLn('Commission: ', vJSON);
      vJSON := FutREST.GetFeeBurn;
      WriteLn('FeeBurn: ', vJSON);
      // Listen-Key-Verwaltung
      vJSON := FutREST.CreateListenKey;
      WriteLn('ListenKey: ', vJSON);
    finally
      FutREST.Free;
    end;
  except
    on E: Exception do
      WriteLn(E.ClassName, ': ', E.Message);
  end;
end.

Beispiel 3: OTOCO-Order-Strategie

Der OTOCO-Order-Typ steht für den komplettesten automatisierten Trade-Lebenszyklus: Ein einziger Aufruf platziert eine Entry-Order, die nach dem Fill automatisch sowohl Take-Profit als auch Stop-Loss aufsetzt.

procedure TForm1.PlaceOTOCOStrategy;
var
  vResult: string;
begin
  // Strategie: ETHUSDT bei 3400 kaufen, Take-Profit bei 3600, Stop-Loss bei 3300
  vResult := sgcBinance.REST_API.NewOrderListOTOCO(
    'ETHUSDT',
    // Working-Order: Limit-Buy-Entry
    'LIMIT',              // workingType
    'BUY',                // workingSide
    0.1,                  // workingQuantity
    3400.0,               // workingPrice
    // Pending OCO (ausgelöst nach Entry-Fill)
    '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 erfolgreich platziert')
  else
    Memo1.Lines.Add('OTOCO-Fehler: ' + vResult);
end;

Zusammenfassung

Die folgende Tabelle fasst die Anzahl der neu hinzugefügten Methoden pro Klasse zusammen:

Komponente Klasse Neue Methoden
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 (+ passende UnSubscribe-Methoden)
Futures-WebSocket TsgcWS_API_Binance_Futures SubscribeContinuousKLine, SubscribeCompositeIndex, SubscribeContractInfo, SubscribeAssetIndex, SubscribeAllAssetIndex, SubscribeIndexPrice, SubscribeIndexPriceKLine, SubscribeMarkPriceKLine (+ passende UnSubscribe-Methoden)
Wichtig: Alle Trading-Methoden, die Orders platzieren, ändern oder stornieren, erfordern gültige ApiKey- und ApiSecret-Zugangsdaten. Es wird dringend empfohlen, vor dem Produktiveinsatz mit TestNet := True gegen das Binance-TestNet zu entwickeln und zu testen. Stelle außerdem sicher, dass die API-Key-Berechtigungen (Trading, Margin, Futures) zu den geplanten Operationen passen. Rückwärtskompatibilität: Alle Ergänzungen sind rückwärtskompatibel. Bestehende Methodensignaturen wurden mit Standard-Parameterwerten erweitert, sodass bereits kompilierter Code unverändert weiterläuft. Die neuen Parameter (aSelfTradePreventionMode, aStrategyId, aPriceMatch usw.) sind standardmäßig leer oder null, was die API zum Standardverhalten veranlasst.