New Binance API Methods in sgcWebSockets

· Recursos

A biblioteca sgcWebSockets continua expandindo sua integração com a Binance com um conjunto significativo de novos métodos cobrindo a Spot REST API, a Futures REST API e os streams WebSocket. Este artigo fornece uma análise técnica de cada novo método, seus parâmetros e exemplos práticos em Delphi para você começar rapidamente.

Índice

  1. Novos Métodos da Spot REST API
  2. Dados de Mercado Spot: UI KLines, Rolling Window e Trading Day Tickers
  3. Gerenciamento de Ordens Spot: Ordens OCO, OTO, OTOCO e SOR
  4. Conta Spot: Comissão, Alocações, Limites de Taxa e Matches Impedidos
  5. Novos Métodos da Futures REST API
  6. Dados de Mercado Futures: KLines Contínuos, Premium Index e Mais
  7. Gerenciamento de Ordens Futures: Modificar, Lote e Ordens Forçadas
  8. Conta Futures: Endpoints V3, Configuração e Fee Burn
  9. Novos Streams WebSocket Spot
  10. Novos Streams WebSocket Futures
  11. Exemplos Completos Funcionais

1. Novos Métodos da Spot REST API

A classe TsgcHTTP_API_Binance_Rest foi estendida com novos endpoints de dados de mercado, tipos de ordem avançados e métodos de consulta de conta. Todos os métodos são acessíveis diretamente pelo componente REST ou através da propriedade REST_API de TsgcWS_API_Binance.

Endpoints de Dados de Mercado

Método Descrição Endpoint Binance
GetUIKLines Dados de kline/candlestick otimizados para apresentação em UI. Retorna dados em formato idêntico ao GetKLines, mas ajustado para renderização de gráficos. /api/v3/uiKlines
GetRollingWindowTicker Estatísticas de variação de preço em janela deslizante. Suporta tamanhos de janela configuráveis (ex: 1h, 4h, 1d), ao contrário do ticker fixo de 24h. /api/v3/ticker
GetTradingDayTicker Estatísticas de variação de preço calculadas ao longo do dia de negociação (UTC 00:00 até o momento atual). Suporta um ou múltiplos símbolos. /api/v3/ticker/tradingDay
GetPriceTickers Recupera tickers de preço para múltiplos símbolos em uma única requisição usando um array JSON de nomes de símbolos. /api/v3/ticker/price

GetUIKLines

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

A diferença entre GetKLines e GetUIKLines é sutil: a variante UI é otimizada pelo backend da Binance para renderização de gráficos e pode retornar limites de kline modificados para melhor apresentação visual. O formato da resposta é idêntico, tornando-o um substituto direto para qualquer caso de uso com gráficos.

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;

Este método estende o Get24hrTicker tradicional ao permitir tamanhos de janela personalizados. Os valores aceitos para aWindowSize incluem '1h', '4h' e '1d'. Se omitido, a janela padrão é usada.

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;

Tipos de Ordem Avançados

A Binance introduziu vários novos tipos de lista de ordens que vão além do OCO original. A biblioteca sgcWebSockets agora os suporta todos nativamente.

NewOrderListOCO (New OCO Format)

O novo formato OCO substitui o NewOCO legado e introduz configurações de preço acima/abaixo mais flexíveis. Cada parte do OCO pode ser configurada de forma independente com seu próprio tipo de ordem, stop price, trailing delta e time-in-force.

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 (One-Triggers-the-Other)

Uma lista de ordens OTO consiste em uma ordem ativa e uma ordem pendente. Quando a ordem ativa é executada, a ordem pendente é colocada automaticamente. Isso é útil para configurar ordens de entrada com ordens de acompanhamento automáticas.

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 (One-Triggers-an-OCO)

Combina a lógica OTO e OCO: uma ordem ativa aciona um par OCO (take-profit + stop-loss) quando executada. Isso permite estratégias totalmente automatizadas de entrada com plano de saída em uma única chamada de 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;

Smart Order Routing (SOR)

As ordens SOR permitem que a Binance otimize a execução roteando por múltiplos pools de liquidez. Dois novos métodos são fornecidos: NewSOROrder para execução real e TestSOROrder para validação sem efetuar o pedido.

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

Cancela atomicamente uma ordem existente e coloca uma nova. Isso é fundamental para estratégias que precisam modificar ordens sem o risco de ficar sem posição entre duas chamadas separadas de cancelar+colocar.

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;

Endpoints de Conta e Consulta

Method Description
GetAccountInformation(aOmitZeroBalances) Estendido com o parâmetro aOmitZeroBalances. Quando definido como True, ativos com saldo zero são excluídos da resposta.
GetOrderRateLimitUsage Retorna a contagem atual de ordens e o uso do limite de taxa, essencial para manter-se dentro dos limites da API em cenários de alta frequência.
GetPreventedMatches Consulta matches de auto-negociação impedidos. Suporta filtragem por símbolo, ID de ordem ou ID de match impedido com paginação.
GetAllocations Recupera alocações de ordens SOR, mostrando como uma ordem foi distribuída pelos pools.
GetAccountCommission Retorna a taxa de comissão maker/taker para um símbolo específico.
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;
Nota: Os métodos NewOrder e TestNewOrder também foram estendidos com novos parâmetros opcionais: aSelfTradePreventionMode, aStrategyId e aStrategyType. O método CancelOrder agora aceita um parâmetro aCancelRestrictions para cancelamento condicional. Essas adições são retrocompatíveis — o código existente continuará funcionando sem alterações.

2. Novos Métodos da Futures REST API

A classe TsgcHTTP_API_Binance_Futures_Rest recebeu o maior conjunto de novos métodos, cobrindo dados de mercado, gerenciamento de ordens, configuração de conta e gerenciamento de streams. Todos os métodos funcionam com futuros USDT-M e COIN-M, controlados pela propriedade FuturesContracts.

Dados de Mercado Futures

Method Description
GetContinuousKLinesDados de kline/candlestick para um contrato contínuo. Requer par, tipo de contrato (ex: 'PERPETUAL', 'CURRENT_QUARTER') e intervalo.
GetIndexPriceKLinesDados de kline baseados no preço do índice de um par de negociação.
GetMarkPriceKLinesDados de kline baseados no mark price de um símbolo.
GetPremiumIndexKLinesDados de kline do índice premium para cálculo de basis e análise de taxa de financiamento.
GetFundingInfoRetorna informações de taxa de financiamento para todos os símbolos, incluindo intervalo de financiamento e taxas máximas/mínimas.
GetPriceTickerV2Ticker de preço V2 com formato de resposta melhorado.
GetIndexInfoRetorna o preço do índice e dados dos componentes para um símbolo de índice composto.
GetAssetIndexPreços do índice de ativos para cálculos de margem no modo multi-ativo.
GetConstituentsConsulta os componentes e seus pesos para um índice composto específico.
GetDeliveryPricePreços históricos de entrega para contratos trimestrais/bimestrais.
GetBasisDados de basis (spread entre preços de futuros e spot) para um par e tipo de contrato específicos.
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;

Gerenciamento de Ordens Futures

Os novos métodos de ordens Futures fornecem ordens de teste, modificação de ordens, processamento em lote e consultas de liquidação.

Method Description
TestNewOrderValida uma nova ordem de futuros sem efetivá-la. Espelha a assinatura de NewOrder.
ModifyOrderModifica o preço, a quantidade ou o modo de correspondência de preço de uma ordem aberta existente.
NewBatchOrdersColoca até 5 ordens em uma única requisição via um array JSON de objetos de ordem.
ModifyBatchOrdersModifica até 5 ordens existentes em uma única requisição.
CancelBatchOrdersCancela múltiplas ordens por lista de IDs de ordem ou lista de IDs de ordem do cliente.
GetOrderAmendmentRecupera o histórico de emendas (modificações) de uma ordem.
CountdownCancelAllDefine um temporizador de contagem regressiva (em milissegundos) após o qual todas as ordens abertas de um símbolo são canceladas.
GetForceOrdersConsulta ordens de liquidação forçada com filtragem opcional.
GetADLQuantileRecupera a estimativa de quantil ADL (Desalavancagem Automática) para posições.

A assinatura de NewOrder para Futures também foi estendida com novos parâmetros: aPriceMatch, aSelfTradePreventionMode, aGoodTillDate e 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;

Conta e Configuração Futures

Vários endpoints de conta V3 foram adicionados juntamente com métodos de configuração e gerenciamento de taxas.

Method Description
GetAccountBalanceV3Saldo de conta V3 com suporte aprimorado a margem multi-ativo.
GetAccountInformationV3Detalhes de conta V3, incluindo modo de margem multi-ativo e níveis de taxa atualizados.
GetPositionInformationV3Dados de posição V3 com campos de precisão adicionais.
GetCommissionRateRetorna a taxa de comissão maker/taker atual para um símbolo de futuros específico.
GetAccountConfigConfiguração no nível da conta: nível de taxa, modo de posição, modo de margem multi-ativo.
GetSymbolConfigConfiguração por símbolo: alavancagem, tipo de margem e modo de posição.
GetOrderRateLimitStatus atual do limite de taxa de ordens por símbolo.
GetApiTradingStatusStatus de negociação da API e indicadores que podem acionar restrições de negociação.
ChangeMultiAssetsModeHabilita ou desabilita o modo de margem multi-ativo para futuros USDT-M.
GetMultiAssetsModeConsulta a configuração atual do modo de margem multi-ativo.
SetFeeBurnHabilita ou desabilita o BNB fee burn (pagar taxas com BNB com desconto).
GetFeeBurnConsulta a configuração atual do fee burn.

Gerenciamento de Listen Key

Três métodos dedicados agora gerenciam o ciclo de vida da listen key do stream de dados do usuário Futures diretamente via REST, independentemente do componente WebSocket:

Method Description
CreateListenKeyGera uma nova listen key para o stream de dados do usuário (POST).
KeepAliveListenKeyEstende a validade de uma listen key (PUT). Deve ser chamado a cada 60 minutos.
CloseListenKeyInvalida e fecha uma listen key (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. Novos Streams WebSocket Spot

A classe TsgcWS_API_Binance foi estendida com três novos tipos de stream, cada um com métodos de inscrição e cancelamento de inscrição.

Método Stream Descrição
SubscribeAvgPrice / UnSubscribeAvgPrice <symbol>@avgPrice Stream de preço médio em tempo real para um símbolo.
SubscribeRollingWindowTicker <symbol>@ticker_<window> Estatísticas de janela deslizante com tamanho de janela configurável (1h, 4h, 1d).
SubscribeAllRollingWindowTickers !ticker_<window>@arr Estatísticas de janela deslizante para todos os símbolos negociados em um tamanho de janela específico.

Um novo tipo de enumeração TsgcWSBinanceRollingWindowSize é fornecido para especificação segura de tamanho de janela:

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. Novos Streams WebSocket Futures

A classe TsgcWS_API_Binance_Futures recebe o maior conjunto de novas assinaturas de stream WebSocket. Elas cobrem contratos contínuos, índices compostos, índices de ativos, preços de índice e klines de mark price.

Método Stream Descrição
SubscribeContinuousKLine<pair>_<contract>@continuousKline_<interval>Stream de kline para contratos contínuos. Requer par, tipo de contrato e intervalo.
SubscribeCompositeIndex<symbol>@compositeIndexStream de preço de índice composto com detalhamento dos componentes.
SubscribeContractInfo!contractInfoStream de informações de contrato. Envia atualizações sobre listagem, cancelamento de listagem e alterações de faixas.
SubscribeAssetIndex / SubscribeAllAssetIndex<symbol>@assetIndex / !assetIndex@arrPreços do índice de ativos para cálculos de margem multi-ativo. Por símbolo ou mercado completo.
SubscribeIndexPrice<pair>@indexPriceStream de preço de índice para um par de negociação. Suporta parâmetro opcional de velocidade de atualização.
SubscribeIndexPriceKLine<pair>@indexPriceKline_<interval>Stream de kline/candlestick de preço de índice com intervalos configuráveis.
SubscribeMarkPriceKLine<symbol>@markPriceKline_<interval>Stream de kline de mark price para rastrear o mark price usado nos cálculos de liquidação.
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. Exemplos Completos Funcionais

Exemplo 1: Spot REST + WebSocket Combinados (Aplicação VCL)

Um padrão típico é usar a REST API para colocar ordens e a WebSocket API para dados de mercado em tempo real. O exemplo a seguir demonstra como configurar ambos através do componente 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.

Exemplo 2: Futures REST + WebSocket (Aplicação Console)

Aplicações console são ideais para bots sem interface e serviços em segundo plano. O exemplo a seguir demonstra o uso dos novos métodos Futures em um contexto de console.

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.

Exemplo 3: Estratégia de Ordem OTOCO

O tipo de ordem OTOCO representa o ciclo de vida de negociação automatizado mais completo: uma única chamada coloca uma ordem de entrada que, uma vez executada, configura automaticamente tanto um take-profit quanto um stop-loss.

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;

Resumo

A tabela a seguir resume a quantidade de novos métodos adicionados a cada classe:

Componente Classe Novos Métodos
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
WebSocket Spot TsgcWS_API_Binance SubscribeAvgPrice, SubscribeRollingWindowTicker, SubscribeAllRollingWindowTickers (+ matching UnSubscribe methods)
WebSocket Futures TsgcWS_API_Binance_Futures SubscribeContinuousKLine, SubscribeCompositeIndex, SubscribeContractInfo, SubscribeAssetIndex, SubscribeAllAssetIndex, SubscribeIndexPrice, SubscribeIndexPriceKLine, SubscribeMarkPriceKLine (+ matching UnSubscribe methods)
Importante: Todos os métodos de negociação que colocam, modificam ou cancelam ordens exigem credenciais válidas ApiKey e ApiSecret. É altamente recomendado desenvolver e testar na Binance TestNet definindo TestNet := True antes de ir para produção. Certifique-se também de que as permissões da chave de API (trading, margem, futuros) correspondam às operações que você pretende realizar. Compatibilidade com versões anteriores: Todas as adições são retrocompatíveis. As assinaturas de métodos existentes foram estendidas com valores de parâmetros padrão, então o código compilado anteriormente continua funcionando sem modificações. Os novos parâmetros (aSelfTradePreventionMode, aStrategyId, aPriceMatch, etc.) têm como padrão valores vazios ou zero que fazem a API usar seu comportamento padrão.