Coinbase Advanced Trade는 세계에서 가장 널리 사용되는 암호화폐 거래소 중 하나의 전문 트레이딩 플랫폼이에요. Delphi용 TsgcWSAPI_Coinbase 컴포넌트는 WebSocket과 REST API 모두에 완전한 접근을 제공하여 통합된 Delphi 인터페이스에서 실시간 시장 데이터 스트리밍, 주문 관리, 계좌 모니터링, 선물 잔고 추적이 가능해요.
Table of Contents
- 개요
- 설정
- WebSocket API
- REST API - 계좌
- REST API - 상품 및 시장 데이터
- REST API - 주문
- REST API - 체결
- REST API - 포지션
- 전체 코드 예제
- 참고 사항 및 모범 사례
개요
Coinbase Advanced Trade API는 기존 Coinbase Pro API를 대체하며 전문 암호화폐 거래를 위한 현대적인 인터페이스를 제공해요. 다양한 암호화폐 자산의 현물 거래와 선물 계약을 모두 지원해요. API는 두 가지 전송 방식을 사용해요:
| 전송 방식 | 용도 | 인증 |
|---|---|---|
| WebSocket | 시장 데이터, 사용자 이벤트, 선물 잔고의 실시간 스트리밍 | 비공개 채널에 필요, 공개 채널은 선택 사항 |
| REST | 계좌 조회, 주문 접수, 상품 데이터, 체결 조회 | 모든 비공개 엔드포인트에 필요 |
설정
비공개 엔드포인트에 접근하려면 TsgcWSAPI_Coinbase 컴포넌트에 API 인증 정보를 설정하세요. 공개 시장 데이터 엔드포인트는 인증 없이 접근할 수 있어요.
| 속성 | 유형 | 설명 |
|---|---|---|
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는 시장 데이터와 비공개 계좌 이벤트를 위한 실시간 스트리밍 채널을 제공해요. 공개 채널은 인증 없이 시장 전체 데이터를 제공하고, 비공개 채널은 계좌별 이벤트를 스트리밍해요.
공개 채널
| Method | Description |
|---|---|
SubscribeHeartBeat / UnSubscribeHeartBeat |
지정된 상품에 대한 주기적 하트비트 메시지로 연결 상태를 모니터링해요 |
SubscribeStatus / UnSubscribeStatus |
거래 상태와 경매 정보를 포함한 상품 상태 업데이트예요 |
SubscribeTicker / UnSubscribeTicker |
가격, 24시간 거래량, 최우선 매수/매도호가를 포함한 실시간 티커 데이터예요 |
SubscribeTickerBatch / UnSubscribeTickerBatch |
대역폭 절약을 위해 낮은 빈도로 제공되는 일괄 티커 업데이트예요 |
SubscribeLevel2 / UnSubscribeLevel2 |
전체 레벨 2 호가창 스냅샷과 증분 업데이트예요 |
SubscribeCandles / UnSubscribeCandles |
차트 작성을 위한 실시간 OHLCV 캔들 데이터예요 |
SubscribeMarketTrades / UnSubscribeMarketTrades |
지정된 상품에 대해 거래소에서 체결된 모든 거래의 실시간 피드예요 |
비공개 채널
| Method | Description |
|---|---|
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 포트폴리오를 조회할 수 있어요. 각 계좌는 포트폴리오에서 사용 가능 잔고와 보유 잔고가 있는 단일 통화 또는 자산을 나타내요.
| Method | Description |
|---|---|
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 - 상품 및 시장 데이터
상품 엔드포인트는 이용 가능한 거래 쌍, 호가창 스냅샷, 과거 캔들 데이터, 최근 거래, 현재 서버 시간을 포함한 시장 데이터를 제공해요. 모두 공개 엔드포인트이므로 인증이 필요 없어요.
| Method | Description |
|---|---|
GetPublicProducts |
모든 이용 가능한 상품(거래 쌍)과 세부 정보를 목록으로 반환해요 |
GetPublicProduct |
ID(예: BTC-USD)로 단일 상품의 세부 정보를 반환해요 |
GetPublicProductBook |
지정된 상품의 현재 호가창을 반환해요 |
GetPublicProductCandles |
날짜 범위와 세분도에 따른 상품의 OHLCV 캔들 데이터를 반환해요 |
GetTrades |
지정된 상품의 최근 거래를 반환해요 |
GetTime |
현재 Coinbase 서버 시간을 반환해요 |
캔들 세분도 옵션
| Value | Description |
|---|---|
ONE_MINUTE |
1분 캔들 |
FIVE_MINUTE |
5분 캔들 |
FIFTEEN_MINUTE |
15분 캔들 |
THIRTY_MINUTE |
30분 캔들 |
ONE_HOUR |
1시간 캔들 |
TWO_HOUR |
2시간 캔들 |
SIX_HOUR |
6시간 캔들 |
ONE_DAY |
일간 캔들 |
// 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 - 주문
주문 엔드포인트는 완전한 주문 생명주기 관리를 제공해요. 새 주문(시장가, 지정가, 스탑)을 접수하거나 기존 주문을 조회하고, 주문을 취소하거나 실행 전에 주문 결과를 미리 볼 수 있어요.
| Method | Description |
|---|---|
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로 체결을 조회할 수 있어요.
| Method | Description |
|---|---|
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 - 포지션
포지션 엔드포인트는 선물 포지션을 관리하는 데 사용해요. 미결 선물 포지션을 청산할 수 있어요.
| Method | Description |
|---|---|
ClosePosition |
지정된 상품의 미결 선물 포지션을 청산해요 |
전체 코드 예제
다음 예제는 Coinbase 연결, 계좌 목록 조회, 과거 캔들 데이터 조회, 실시간 티커 구독, 시장가 주문 접수 등 전체 워크플로를 보여줘요.
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 키를 생성할 때 최소 권한 원칙을 따르세요. 읽기 전용 대시보드에는 보기 권한만 활성화하세요. 거래 봇에는 거래 권한을 추가하되, 애플리케이션이 계좌 간 자금 이동이 필요하지 않으면 이체는 비활성화로 두세요.
주문 방향 상수
주문을 접수할 때 주문 방향에 Delphi 열거 상수를 사용하세요:
| Constant | Description |
|---|---|
cosBuy |
매수 주문 (기본 통화 취득) |
cosSell |
매도 주문 (기본 통화 판매) |
Ticker vs. TickerBatch
모든 가격 업데이트가 실시간으로 필요할 때(예: 주문 실행 엔진)는 SubscribeTicker를 사용하세요. 주기적 스냅샷만 필요할 때(예: 대시보드)는 SubscribeTickerBatch를 사용하세요. 같은 데이터를 낮은 빈도로 제공하여 대역폭과 처리 부하를 절약해요.
속도 제한
Coinbase Advanced Trade는 REST API 호출에 속도 제한을 적용해요. 제한은 엔드포인트 범주(공개 vs. 비공개, 읽기 vs. 쓰기)에 따라 다양해요. 좁은 루프에서 REST 엔드포인트를 폴링하지 말고, 실시간 데이터에는 WebSocket 구독을 사용하고 REST 호출은 온디맨드 조회와 주문 작업에만 사용하세요.
팁: 견고한 거래 애플리케이션을 위해 실시간 주문 상태 업데이트에는SubscribeUser 채널을, 실시간 시장 가격에는 SubscribeTicker를 조합해서 사용하세요. 거래 실행에는 REST PlaceMarketOrder 또는 PlaceLimitOrder 메서드를 사용하고, GetOrder를 폴링하는 대신 사용자 채널을 통해 실행을 확인하세요.
