Coinbase Advanced Trade 是全球最广泛使用的加密货币交易所之一的专业交易平台。适用于 Delphi 的 TsgcWSAPI_Coinbase 组件提供对 WebSocket 和 REST API 的完整访问,支持实时行情流、订单管理、账户监控和期货余额追踪,所有功能均通过统一的 Delphi 接口实现。
目录
- 概述
- 配置
- WebSocket API
- REST API - 账户
- REST API - 产品与行情数据
- REST API - 订单
- REST API - 成交记录
- REST API - 持仓
- 完整代码示例
- 注意事项与最佳实践
概述
Coinbase Advanced Trade API 取代了旧版 Coinbase Pro API,为专业加密货币交易提供现代化接口,支持多种加密资产的现货交易和期货合约。API 使用两种传输机制:
| 传输方式 | 使用场景 | 认证 |
|---|---|---|
| WebSocket | 实时流式传输行情数据、用户事件和期货余额 | 私有频道必须,公有频道可选 |
| REST | 账户查询、下单、产品数据和成交记录获取 | 所有私有端点必须 |
配置
使用 API 凭证配置 TsgcWSAPI_Coinbase 组件以访问私有端点。公有行情数据端点无需认证即可访问。
| 属性 | 类型 | 说明 |
|---|---|---|
Coinbase.ApiKey |
String | 您的 Coinbase Advanced Trade API 密钥 |
Coinbase.ApiSecret |
String | 您的 Coinbase Advanced Trade API 私钥,用于请求签名 |
var
oClient: TsgcWebSocketClient;
oCoinbase: TsgcWSAPI_Coinbase;
begin
oClient := TsgcWebSocketClient.Create(nil);
oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
oCoinbase.Client := oClient;
// Configure API credentials
oCoinbase.Coinbase.ApiKey := 'your_api_key';
oCoinbase.Coinbase.ApiSecret := 'your_api_secret';
// Connect to Coinbase
oClient.Active := True;
end;
WebSocket API
WebSocket API 提供行情数据和私有账户事件的实时流式频道。公有频道无需认证即可提供全市场数据,私有频道则流式推送账户专属事件。
公有频道
| 方法 | 说明 |
|---|---|
SubscribeHeartBeat / UnSubscribeHeartBeat |
通过定期心跳消息监控指定产品的连接健康状态 |
SubscribeStatus / UnSubscribeStatus |
产品状态更新,包括交易状态和拍卖信息 |
SubscribeTicker / UnSubscribeTicker |
实时 Ticker 数据,包括价格、24 小时成交量和最优买卖价 |
SubscribeTickerBatch / UnSubscribeTickerBatch |
以较低频率批量推送 Ticker 更新,降低带宽占用 |
SubscribeLevel2 / UnSubscribeLevel2 |
完整的 Level 2 订单簿快照和增量更新 |
SubscribeCandles / UnSubscribeCandles |
用于图表展示的实时 OHLCV K 线数据 |
SubscribeMarketTrades / UnSubscribeMarketTrades |
指定产品在交易所执行的所有成交实时推送 |
私有频道
| 方法 | 说明 |
|---|---|
SubscribeUser / UnSubscribeUser |
订单(新建、成交、撤销)和账户活动的实时更新 |
SubscribeFuturesBalanceSummary / UnSubscribeFuturesBalanceSummary |
期货账户余额、保证金和强平价格的实时更新 |
// Subscribe to real-time ticker for BTC-USD
oCoinbase.SubscribeTicker('BTC-USD');
// Subscribe to Level 2 order book updates
oCoinbase.SubscribeLevel2('BTC-USD');
// Subscribe to candle data for charting
oCoinbase.SubscribeCandles('ETH-USD');
// Subscribe to live market trades
oCoinbase.SubscribeMarketTrades('BTC-USD');
// Subscribe to private user channel (requires API key)
oCoinbase.SubscribeUser('BTC-USD');
// Subscribe to futures balance updates
oCoinbase.SubscribeFuturesBalanceSummary;
REST API - 账户
账户端点用于查询您的 Coinbase 投资组合。每个账户代表投资组合中的单一币种或资产,包含可用余额和锁定余额。
| 方法 | 说明 |
|---|---|
ListAccounts |
返回投资组合中所有账户及余额的分页列表 |
GetAccount |
按 UUID 返回单个账户的详情 |
// List all accounts in your portfolio
ShowMessage(oCoinbase.REST_API.ListAccounts);
// Get details for a specific account by UUID
ShowMessage(oCoinbase.REST_API.GetAccount('account-uuid-here'));
REST API - 产品与行情数据
产品端点提供行情数据,包括可用交易对、订单簿快照、历史 K 线数据、近期成交和当前服务器时间。这些均为公有端点,无需认证。
| 方法 | 说明 |
|---|---|
GetPublicProducts |
返回所有可用产品(交易对)及其详情的列表 |
GetPublicProduct |
按 ID 返回单个产品的详情(如 BTC-USD) |
GetPublicProductBook |
返回指定产品的当前订单簿 |
GetPublicProductCandles |
返回指定日期范围和粒度的产品 OHLCV K 线数据 |
GetTrades |
返回指定产品的近期成交记录 |
GetTime |
返回当前 Coinbase 服务器时间 |
K 线粒度选项
| 值 | 说明 |
|---|---|
ONE_MINUTE |
1 分钟 K 线 |
FIVE_MINUTE |
5 分钟 K 线 |
FIFTEEN_MINUTE |
15 分钟 K 线 |
THIRTY_MINUTE |
30 分钟 K 线 |
ONE_HOUR |
1 小时 K 线 |
TWO_HOUR |
2 小时 K 线 |
SIX_HOUR |
6 小时 K 线 |
ONE_DAY |
日 K 线 |
// Get all available products
ShowMessage(oCoinbase.REST_API.GetPublicProducts);
// Get details for BTC-USD
ShowMessage(oCoinbase.REST_API.GetPublicProduct('BTC-USD'));
// Get hourly candles for January 2024
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// Get recent trades
ShowMessage(oCoinbase.REST_API.GetTrades('BTC-USD'));
REST API - 订单
订单端点提供完整的订单生命周期管理,支持下新单(市价、限价或止损)、查询现有订单、撤销订单以及执行前预览订单结果。
| 方法 | 说明 |
|---|---|
PlaceNewOrder |
以完整参数控制下新单 |
PlaceMarketOrder |
下市价单的便捷方法(以当前价格买入或卖出) |
PlaceLimitOrder |
以指定价格下限价单的便捷方法 |
PlaceStopOrder |
在指定价格触发的止损单便捷方法 |
ListOrders |
返回订单的分页列表,可按状态或产品过滤 |
GetOrder |
按 ID 返回单个订单的详情 |
CancelOrder |
按 ID 撤销一个或多个挂单 |
EditOrder |
修改现有订单(如更改价格或数量) |
EditOrderPreview |
预览订单修改结果而不实际执行 |
PreviewOrder |
预览新订单结果而不实际下单(估算手续费、滑点) |
// Place a market buy order for 0.001 BTC
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
// Place a limit buy order at $40,000
ShowMessage(oCoinbase.REST_API.PlaceLimitOrder(cosBuy, 'BTC-USD', 0.001, 40000));
// List all open orders
ShowMessage(oCoinbase.REST_API.ListOrders);
// Cancel an order by ID
oCoinbase.REST_API.CancelOrder('order-id-here');
提示:在下实盘订单前使用 PreviewOrder 查看估算手续费和执行结果,无需承担真实资金风险。这对于最终成交价取决于订单簿深度的市价单尤为有用。
REST API - 成交记录
成交记录代表构成已完成或部分成交订单的各次执行。若一笔订单与订单簿中的多笔挂单撮合,可能产生多条成交记录。可按订单 ID、产品 ID 或成交 ID 查询。
| 方法 | 说明 |
|---|---|
GetFillsByOrderId |
返回指定订单的所有成交记录 |
GetFillsByProductId |
返回指定产品(如 BTC-USD)的所有成交记录 |
GetFillsByTradeId |
返回指定成交 ID 的成交详情 |
// Get fills for a specific order
ShowMessage(oCoinbase.REST_API.GetFillsByOrderId('order-id-here'));
// Get all fills for BTC-USD
ShowMessage(oCoinbase.REST_API.GetFillsByProductId('BTC-USD'));
REST API - 持仓
持仓端点用于管理期货持仓,支持平掉未平仓的期货持仓。
| 方法 | 说明 |
|---|---|
ClosePosition |
平掉指定产品的未平仓期货持仓 |
完整代码示例
以下示例演示完整流程:连接到 Coinbase、列出账户、获取历史 K 线数据、订阅实时 Ticker 并下市价单。
var
oClient: TsgcWebSocketClient;
oCoinbase: TsgcWSAPI_Coinbase;
begin
// Create and configure the WebSocket client
oClient := TsgcWebSocketClient.Create(nil);
oCoinbase := TsgcWSAPI_Coinbase.Create(nil);
oCoinbase.Client := oClient;
// Configure API credentials
oCoinbase.Coinbase.ApiKey := 'your_api_key';
oCoinbase.Coinbase.ApiSecret := 'your_api_secret';
// Connect to Coinbase
oClient.Active := True;
// REST: List all accounts in your portfolio
ShowMessage(oCoinbase.REST_API.ListAccounts);
// REST: Get hourly candles for BTC-USD
ShowMessage(oCoinbase.REST_API.GetPublicProductCandles(
'BTC-USD', '2024-01-01', '2024-01-31', 'ONE_HOUR'));
// WebSocket: Subscribe to real-time ticker
oCoinbase.SubscribeTicker('BTC-USD');
// REST: Place a market buy order for 0.001 BTC
ShowMessage(oCoinbase.REST_API.PlaceMarketOrder(cosBuy, 'BTC-USD', 0.001));
end;
注意事项与最佳实践
API 密钥权限
在 Coinbase 开发者平台生成 API 密钥时,遵循最小权限原则。只读仪表盘只需启用 View 权限;交易机器人添加 Trade 权限,除非应用需要在账户间转移资金,否则不要启用 Transfer。
订单方向常量
下单时,使用 Delphi 枚举常量指定订单方向:
| 常量 | 说明 |
|---|---|
cosBuy |
买入订单(获取基础货币) |
cosSell |
卖出订单(卖出基础货币) |
Ticker 与 TickerBatch 对比
当需要实时获取每次价格更新(如订单执行引擎)时使用 SubscribeTicker;当只需周期性快照(如仪表盘)时使用 SubscribeTickerBatch——以较低频率推送相同数据,节省带宽和处理开销。
频率限制
Coinbase Advanced Trade 对 REST API 调用实施频率限制,限制因端点类别(公有/私有、读/写)而异。避免在紧密循环中轮询 REST 端点;改用 WebSocket 订阅获取实时数据,将 REST 调用留给按需查询和订单操作。
提示:构建健壮的交易应用时,将SubscribeUser 频道(实时订单状态更新)与 SubscribeTicker(实时市场价格)结合使用。通过 REST 的 PlaceMarketOrder 或 PlaceLimitOrder 执行交易,并通过用户频道确认执行结果,而非轮询 GetOrder。
