sgcWebSockets 库持续扩展其 Binance 集成功能,此次新增了大量方法,覆盖现货 REST API、合约 REST API 以及 WebSocket 数据流。本文从技术角度对每个新方法、其参数及实用的 Delphi 代码示例进行详细说明,帮助您快速上手。
目录
- 现货 REST API 新方法
- 现货行情数据:UI K线、滚动窗口与交易日行情
- 现货订单管理:OCO、OTO、OTOCO 与 SOR 订单
- 现货账户:手续费、分配记录、频率限制与阻止的撮合
- 合约 REST API 新方法
- 合约行情数据:连续合约 K 线、溢价指数等
- 合约订单管理:修改、批量与强制平仓订单
- 合约账户:V3 接口、配置与手续费抵扣
- 现货 WebSocket 数据流新增
- 合约 WebSocket 数据流新增
- 完整示例
1. 现货 REST API 新方法
TsgcHTTP_API_Binance_Rest 类新增了行情数据接口、高级订单类型和账户查询方法。所有方法均可通过 REST 组件直接调用,或通过 TsgcWS_API_Binance 的 REST_API 属性访问。
行情数据接口
| 方法 | 说明 | Binance 接口 |
|---|---|---|
GetUIKLines |
针对 UI 展示优化的 K 线数据,格式与 GetKLines 相同,但经 Binance 后端针对图表渲染进行了调优。 |
/api/v3/uiKlines |
GetRollingWindowTicker |
滚动窗口价格变动统计,支持自定义窗口大小(如 1h、4h、1d),与固定 24 小时行情不同。 | /api/v3/ticker |
GetTradingDayTicker |
基于交易日(UTC 00:00 至当前)计算的价格变动统计,支持单个或多个交易对。 | /api/v3/ticker/tradingDay |
GetPriceTickers |
通过 JSON 数组一次性获取多个交易对的价格行情。 | /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 后端专为图表渲染进行优化,可能会对 K 线边界进行调整以改善视觉呈现。响应格式完全相同,可作为图表场景的直接替代。
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 用于在不实际下单的情况下进行验证。
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
原子性地取消现有订单并提交新订单。对于需要修改订单且不希望在分开的取消和下单操作之间出现持仓缺口的策略而言,此方法至关重要。
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. 合约 REST API 新方法
TsgcHTTP_API_Binance_Futures_Rest 类新增了最多方法,涵盖行情数据、订单管理、账户配置和数据流管理。所有方法均支持 USDT 本位合约和币本位合约,通过 FuturesContracts 属性进行控制。
合约行情数据
| 方法 | 说明 |
|---|---|
GetContinuousKLines | 连续合约的 K 线数据,需指定交易对、合约类型(如 'PERPETUAL'、'CURRENT_QUARTER')及时间间隔。 |
GetIndexPriceKLines | 基于交易对指数价格的 K 线数据。 |
GetMarkPriceKLines | 基于标记价格的 K 线数据。 |
GetPremiumIndexKLines | 溢价指数 K 线数据,用于基差计算和资金费率分析。 |
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;
合约订单管理
新增的合约订单方法提供测单、订单修改、批量处理和强制平仓查询功能。
| 方法 | 说明 |
|---|---|
TestNewOrder | 验证新合约订单而不实际下单,参数签名与 NewOrder 相同。 |
ModifyOrder | 修改已有未成交订单的价格、数量或价格匹配模式。 |
NewBatchOrders | 通过 JSON 数组在单次请求中最多提交 5 笔订单。 |
ModifyBatchOrders | 在单次请求中最多修改 5 笔已有订单。 |
CancelBatchOrders | 通过订单 ID 列表或客户订单 ID 列表批量取消订单。 |
GetOrderAmendment | 获取指定订单的修改(变更)历史。 |
CountdownCancelAll | 设置倒计时(毫秒),到期后自动取消指定交易对的所有未成交订单。 |
GetForceOrders | 查询强制平仓订单,支持可选过滤条件。 |
GetADLQuantile | 获取持仓的自动减仓(ADL)分位数估算值。 |
合约 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;
合约账户与配置
新增了多个 V3 账户接口以及配置和手续费管理方法。
| 方法 | 说明 |
|---|---|
GetAccountBalanceV3 | V3 账户余额,改进了多资产保证金支持。 |
GetAccountInformationV3 | V3 账户详情,包含多资产保证金模式及更新的费率等级。 |
GetPositionInformationV3 | V3 持仓数据,附加精度字段。 |
GetCommissionRate | 返回指定合约交易对当前的挂单/吃单手续费费率。 |
GetAccountConfig | 账户级别配置:费率等级、持仓模式、多资产保证金模式。 |
GetSymbolConfig | 逐交易对配置:杠杆倍数、保证金类型和持仓模式。 |
GetOrderRateLimit | 逐交易对的当前订单频率限制状态。 |
GetApiTradingStatus | API 交易状态及可能触发交易限制的指标。 |
ChangeMultiAssetsMode | 启用或禁用 USDT 本位合约的多资产保证金模式。 |
GetMultiAssetsMode | 查询当前多资产保证金模式设置。 |
SetFeeBurn | 启用或禁用 BNB 手续费抵扣(享受折扣)。 |
GetFeeBurn | 查询当前手续费抵扣设置。 |
Listen Key 管理
三个专用方法现可通过 REST 直接管理合约用户数据流的 Listen Key 生命周期,独立于 WebSocket 组件:
| 方法 | 说明 |
|---|---|
CreateListenKey | 为用户数据流生成新的 Listen Key(POST)。 |
KeepAliveListenKey | 延长 Listen Key 的有效期(PUT),需每 60 分钟调用一次。 |
CloseListenKey | 使 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. 现货 WebSocket 数据流新增
TsgcWS_API_Binance 类新增了三种数据流类型,各自提供订阅和取消订阅方法。
| 方法 | 数据流 | 说明 |
|---|---|---|
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. 合约 WebSocket 数据流新增
TsgcWS_API_Binance_Futures 类新增了最多的 WebSocket 订阅,涵盖连续合约、合成指数、资产指数、指数价格和标记价格 K 线。
| 方法 | 数据流 | 说明 |
|---|---|---|
SubscribeContinuousKLine | <pair>_<contract>@continuousKline_<interval> | 连续合约的 K 线数据流,需指定交易对、合约类型和时间间隔。 |
SubscribeCompositeIndex | <symbol>@compositeIndex | 含成分细分的合成指数价格数据流。 |
SubscribeContractInfo | !contractInfo | 合约信息数据流,在上市、下架和档位变更时推送更新。 |
SubscribeAssetIndex / SubscribeAllAssetIndex | <symbol>@assetIndex / !assetIndex@arr | 多资产保证金计算所需的资产指数价格,支持单交易对或全市场。 |
SubscribeIndexPrice | <pair>@indexPrice | 指定交易对的指数价格数据流,支持可选更新速度参数。 |
SubscribeIndexPriceKLine | <pair>@indexPriceKline_<interval> | 可配置时间间隔的指数价格 K 线数据流。 |
SubscribeMarkPriceKLine | <symbol>@markPriceKline_<interval> | 标记价格 K 线数据流,用于追踪强制平仓所用的标记价格。 |
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. 完整示例
示例一:现货 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.
示例二:合约 REST + WebSocket(控制台应用)
控制台应用非常适合无界面机器人和后台服务。以下示例演示了在控制台环境中使用新合约方法。
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.
示例三: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;
汇总
下表汇总了各类组件新增方法数量:
| 组件 | 类名 | 新增方法 |
|---|---|---|
| 现货 REST API | TsgcHTTP_API_Binance_Rest |
GetUIKLines、GetRollingWindowTicker、GetTradingDayTicker、NewOrderListOCO、NewOrderListOTO、NewOrderListOTOCO、NewSOROrder、TestSOROrder、CancelReplaceOrder、GetOrderRateLimitUsage、GetPreventedMatches、GetAllocations、GetAccountCommission |
| 合约 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 | TsgcWS_API_Binance |
SubscribeAvgPrice、SubscribeRollingWindowTicker、SubscribeAllRollingWindowTickers(及对应的 UnSubscribe 方法) |
| 合约 WebSocket | TsgcWS_API_Binance_Futures |
SubscribeContinuousKLine、SubscribeCompositeIndex、SubscribeContractInfo、SubscribeAssetIndex、SubscribeAllAssetIndex、SubscribeIndexPrice、SubscribeIndexPriceKLine、SubscribeMarkPriceKLine(及对应的 UnSubscribe 方法) |
重要提示: 所有涉及下单、修改或取消订单的交易方法均需有效的 ApiKey 和 ApiSecret 凭证。强烈建议在上线前通过设置 TestNet := True 在 Binance 测试网进行开发和测试,并确保 API 密钥权限(交易、保证金、合约)与您要执行的操作一致。
向下兼容: 所有新增内容均向下兼容。现有方法签名通过默认参数值进行扩展,因此此前编译的代码无需任何修改即可继续正常使用。新增参数(aSelfTradePreventionMode、aStrategyId、aPriceMatch 等)默认为空值或零值,API 将使用其标准行为。
