CEX.IO 是知名的加密货币交易所,通过 WebSocket API 提供实时行情和交易功能。TsgcWSAPI_Cex 组件为连接 CEX.IO 提供原生 Delphi 接口,支持订阅实时 Ticker、管理订单簿、下单和撤单,以及处理账户持仓——所有操作均通过持久 WebSocket 连接完成。
目录
概述
CEX.IO WebSocket API 提供两类功能:无需认证即可推送行情数据的公有频道,以及需要 API 密钥认证的用于交易和账户管理的私有方法。TsgcWSAPI_Cex 组件封装了这两类功能,使您只需一个 Delphi 组件即可处理从实时报价到订单执行的所有操作。
快速入门
要连接到 CEX.IO,可在窗体上放置 TsgcWebSocketClient 和 TsgcWSAPI_Cex 组件,或在代码中创建它们。将客户端赋给 API 组件,配置凭证,然后激活连接。
oClient := TsgcWebSocketClient.Create(nil);
oCex := TsgcWSAPI_Cex.Create(nil);
oCex.Client := oClient;
oCex.Cex.ApiKey := 'your_api_key';
oCex.Cex.ApiSecret := 'your_api_secret';
oClient.Active := True;
注意:Ticker 订阅等公有方法无需 API 凭证。仅当您需要使用下单或查询余额等私有(认证)方法时,才需设置 ApiKey 和 ApiSecret。
公有 WebSocket 方法
公有方法无需认证即可接收实时行情数据,非常适合构建仪表盘、图表工具或价格提醒系统。
| 方法 | 说明 |
|---|---|
SubscribeTickers |
订阅货币对(如 BTC/USD)的实时 Ticker 更新。 |
SubscribeChart |
订阅指定交易对的图表/K 线数据。 |
SubscribePair |
订阅指定交易对的更新。 |
UnSubscribePair |
取消订阅之前已订阅的交易对。 |
SubscribeOrderBook |
订阅交易对的订单簿快照和增量更新。 |
UnSubscribeOrderBook |
取消订阅订单簿更新。 |
订阅 Ticker
SubscribeTickers 方法为货币对开启实时价格数据流。第一个参数为基础货币,第二个参数为计价货币。
// Subscribe to BTC/USD ticker updates
oCex.SubscribeTickers('BTC', 'USD');
使用订单簿
订单簿订阅同时提供初始快照和后续增量更新。使用 SubscribeOrderBook 开始接收数据,不再需要时调用 UnSubscribeOrderBook。
// Subscribe to the BTC/USD order book
oCex.SubscribeOrderBook('BTC', 'USD');
// Later, unsubscribe when no longer needed
oCex.UnSubscribeOrderBook('BTC', 'USD');
私有 WebSocket 方法(需认证)
私有方法需通过 CEX.IO API 密钥和私钥进行认证。组件自动处理认证握手,但必须在调用任何私有方法之前先调用 Authenticate。
| 方法 | 说明 |
|---|---|
Authenticate |
使用 API 密钥和私钥对 WebSocket 会话进行认证。 |
GetTicker |
获取指定货币对的当前 Ticker。 |
GetBalance |
获取所有币种的账户余额。 |
Ping |
发送保活 ping 以维持 WebSocket 连接。 |
GetOpenOrders |
获取账户当前所有挂单。 |
PlaceOrder |
以指定数量和价格下新的买入或卖出订单。 |
CancelReplaceOrder |
原子性地撤销现有订单并以新订单替代。 |
GetOrderRequest |
按标识符获取指定订单的详情。 |
CancelOrderRequest |
按标识符撤销指定订单。 |
GetArchivedOrders |
获取历史(已完成/已撤销)订单。 |
OpenPosition |
开立新的保证金交易仓位。 |
GetPosition |
获取指定开仓持仓的详情。 |
GetOpenPositions |
获取当前所有开仓的保证金持仓。 |
ClosePosition |
平掉现有保证金交易仓位。 |
代码示例
以下示例演示完整流程:连接到 CEX.IO,订阅 Ticker,下买入订单,并获取账户余额。
oClient := TsgcWebSocketClient.Create(nil);
oCex := TsgcWSAPI_Cex.Create(nil);
oCex.Client := oClient;
oCex.Cex.ApiKey := 'your_api_key';
oCex.Cex.ApiSecret := 'your_api_secret';
oClient.Active := True;
// Subscribe to ticker
oCex.SubscribeTickers('BTC', 'USD');
// Place an order
oCex.PlaceOrder('BTC', 'USD', 0.01, 30000, ctBuy);
// Get balance
oCex.GetBalance;
下单
PlaceOrder 方法接受基础货币、计价货币、数量、价格和订单类型。订单类型参数使用 ctBuy 或 ctSell 枚举值。
// Place a buy order: 0.01 BTC at $30,000
oCex.PlaceOrder('BTC', 'USD', 0.01, 30000, ctBuy);
// Place a sell order: 0.05 ETH at $2,000
oCex.PlaceOrder('ETH', 'USD', 0.05, 2000, ctSell);
管理持仓
CEX.IO 通过持仓管理方法支持保证金交易。您可以直接通过 WebSocket 连接开仓、查询和平仓。
// Retrieve all open positions
oCex.GetOpenPositions;
// Close a specific position by ID
oCex.ClosePosition(positionId);
事件与回调
当从交易所接收到数据时,TsgcWSAPI_Cex 组件会触发事件。为处理程序分配 Ticker 更新、订单确认和余额信息等传入消息的处理逻辑。
| 事件 | 触发时机 |
|---|---|
OnCexMessage |
从 CEX.IO WebSocket 服务器接收到任何消息时。 |
OnCexConnect |
与 CEX.IO 的 WebSocket 连接建立时。 |
OnCexDisconnect |
WebSocket 连接关闭时。 |
OnCexError |
从交易所收到错误响应时。 |
配置与注意事项
API 凭证
从 CEX.IO 账户设置中获取 API 密钥和私钥。安全存储凭证,切勿在生产代码中硬编码。建议从加密配置文件或环境变量中加载。
连接管理
WebSocket 连接由 TsgcWebSocketClient 组件管理。设置 Active := True 进行连接,Active := False 断开连接。若通过客户端的重连属性进行配置,组件支持自动重连。
认证流程
调用任何私有方法之前必须完成认证。在连接建立后调用 Authenticate,或在 OnCexConnect 事件中处理。组件会自动根据 API 密钥和私钥生成所需的 HMAC 签名。
保活
定期调用 Ping 方法以保持认证会话活跃。CEX.IO 可能在超时后断开空闲会话。
