Bitmex API 업데이트 sgcWebSockets

· 기능
Delphi를 위한 BitMEX WebSocket 및 REST API 통합

BitMEX는 선물 및 영구 계약의 레버리지 거래를 전문으로 하는 선도적인 암호화폐 파생상품 거래소예요. TsgcWSAPI_Bitmex 컴포넌트는 Delphi 개발자에게 WebSocket 및 REST API 접근을 모두 제공하여 단일 컴포넌트로 실시간 시장 데이터 스트리밍, 주문 실행, 포지션 관리, 포괄적인 계정 운영을 가능하게 해요.

목차

개요

WebSocket만 지원하는 많은 거래소 컴포넌트와 달리 TsgcWSAPI_Bitmex 컴포넌트는 이중 인터페이스 방식을 제공해요. WebSocket API는 토픽 기반 구독을 통해 거래, 호가창 업데이트, 시세, 계정 데이터의 실시간 스트리밍을 제공해요. REST API(REST_API 속성으로 접근)는 주문, 포지션 관리, 시장 데이터 조회를 위한 동기식 요청-응답 메서드를 제공해요. 이 조합은 실시간 데이터 피드와 정밀한 주문 실행이 모두 필요한 완전한 거래 애플리케이션을 구축하는 데 이상적이에요.

시작하기

TsgcWebSocketClientTsgcWSAPI_Bitmex 컴포넌트를 생성하고, 연결하여 자격 증명을 설정해요. WebSocket 연결은 클라이언트를 통해 활성화되고 REST API는 REST_API 속성으로 접근해요.

oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
참고: 공개 WebSocket 구독과 공개 REST 엔드포인트는 API 자격 증명이 필요하지 않아요. 인증은 개인 토픽(execution, margin, order, position)과 거래/포지션 REST 메서드에만 필요해요.

WebSocket API

BitMEX WebSocket API는 토픽 기반 구독 모델을 사용해요. 토픽에 구독하면(선택적으로 instrument로 필터링) 지속적인 업데이트 스트림을 받아요. 컴포넌트는 세 가지 핵심 WebSocket 메서드를 제공해요.

메서드 설명
Subscribe 토픽 스트림을 구독해요. instrument 심볼로 선택적으로 필터링할 수 있어요.
Unsubscribe 이전에 구독한 토픽 스트림을 구독 취소해요.
Authenticate 개인 토픽 접근을 위해 WebSocket 세션을 인증해요.

사용 가능한 토픽

토픽은 수신할 데이터의 유형을 정의해요. 여러 토픽에 동시에 구독할 수 있어요. 구독 형식은 topic:symbol이며 심볼 필터는 선택사항이에요.

토픽 인증 필요 설명
trade 아니오 거래소의 실시간 거래 체결 정보예요.
instrument 아니오 펀딩 비율 및 결제 정보를 포함한 instrument 데이터예요.
orderBookL2 아니오 증분 업데이트가 포함된 전체 Level 2 호가창이에요.
quote 아니오 최상위 최적 매수/매도 호가예요.
execution 계정의 거래 체결 및 채움 정보예요.
margin 계정 마진 잔고 및 사용 가능 잔고 업데이트예요.
order 미체결 주문 및 주문 상태 업데이트예요.
position 미체결 포지션 및 미실현 손익 업데이트예요.

WebSocket 구독 예제

// Subscribe to XBTUSD trades
oBitmex.Subscribe('trade:XBTUSD');
// Subscribe to the Level 2 order book
oBitmex.Subscribe('orderBookL2:XBTUSD');
// Subscribe to best bid/ask quotes
oBitmex.Subscribe('quote:XBTUSD');
// Authenticate for private topics
oBitmex.Authenticate;
// Subscribe to your order updates (requires auth)
oBitmex.Subscribe('order');
// Subscribe to your position updates (requires auth)
oBitmex.Subscribe('position');
// Unsubscribe from trades
oBitmex.Unsubscribe('trade:XBTUSD');

REST API: 시장 데이터

REST API는 컴포넌트의 REST_API 속성으로 접근해요. 시장 데이터 메서드는 애플리케이션에서 파싱할 수 있는 JSON 문자열을 반환해요. 요청된 데이터를 즉시 반환하는 동기식 호출이에요.

메서드 설명
GetInstruments 거래소에서 사용 가능한 모든 instrument 목록을 조회해요.
GetInstrumentsActive 활발하게 거래되는 instrument만 조회해요.
GetOrderBook instrument의 현재 호가창 스냅샷을 조회해요.
GetQuotes 최근 호가(매수/매도) 데이터를 조회해요.
GetTrades 최근 공개 거래 데이터를 조회해요.
GetExecutions 계정의 원시 체결 데이터를 조회해요.
GetExecutionsTradeHistory 계정의 거래 체결 내역을 조회해요.
// Get the order book for XBTUSD
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// Get all active instruments
ShowMessage(oBitmex.REST_API.GetInstrumentsActive);
// Get recent trades
ShowMessage(oBitmex.REST_API.GetTrades('XBTUSD'));
// Get recent quotes
ShowMessage(oBitmex.REST_API.GetQuotes('XBTUSD'));

REST API: 거래

거래 메서드를 사용하면 주문을 내고, 수정하고, 취소할 수 있어요. REST API는 시장, 지정가, 스톱, 스톱-지정가 주문을 포함한 여러 주문 유형을 지원해요. 모든 거래 메서드는 인증이 필요해요.

메서드 설명
PlaceOrder 전체 매개변수 제어로 새 주문을 해요.
PlaceMarketOrder 최적가로 즉시 체결되는 시장 주문을 해요.
PlaceLimitOrder 지정된 가격에 지정가 주문을 해요.
PlaceStopOrder 스톱 가격에서 트리거되는 스톱(시장) 주문을 해요.
PlaceStopLimitOrder 트리거 가격과 지정가 가격이 모두 있는 스톱-지정가 주문을 해요.
AmendOrder 기존 주문의 가격, 수량, 기타 매개변수를 수정해요.
CancelOrder 식별자로 특정 주문을 취소해요.
CancelAllOrders 모든 미체결 주문을 한 번에 취소해요.
CancelAllOrdersAfter 타임아웃 후 모든 주문을 취소하는 데드맨 스위치를 설정해요.
GetOrders 모든 주문을 조회해요. 선택적으로 상태로 필터링할 수 있어요.

주문 실행 예제

// Place a limit order: Buy 100 contracts of XBTUSD at $30,000
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));
// Place a market order: Sell 50 contracts of XBTUSD
ShowMessage(oBitmex.REST_API.PlaceMarketOrder(bmsSell, 'XBTUSD', 50));
// Place a stop order: triggers when price reaches $28,000
ShowMessage(oBitmex.REST_API.PlaceStopOrder(bmsSell, 'XBTUSD', 100, 28000));
// Place a stop-limit order: triggers at $28,000, limit price $27,500
ShowMessage(oBitmex.REST_API.PlaceStopLimitOrder(bmsSell, 'XBTUSD', 100, 28000, 27500));
// Cancel a specific order
ShowMessage(oBitmex.REST_API.CancelOrder('order-id-here'));
// Cancel all open orders
ShowMessage(oBitmex.REST_API.CancelAllOrders);
참고: CancelAllOrdersAfter 메서드는 데드맨 스위치 역할을 해요. 지정된 타임아웃 내에 갱신되지 않으면 모든 주문을 취소해요. 애플리케이션이 연결을 잃을 경우 무분별한 주문을 방지하는 안전 메커니즘으로 유용해요.

REST API: 포지션

포지션 관리 메서드를 사용하면 레버리지 및 마진 설정을 포함한 미체결 포지션을 조회, 청산, 구성할 수 있어요.

메서드 설명
GetPosition instrument의 현재 포지션을 조회해요.
ClosePosition 청산 시장 주문을 통해 미체결 포지션을 청산해요.
SetPositionIsolate 포지션에 대해 교차 마진과 격리 마진 모드를 전환해요.
SetPositionLeverage 포지션의 레버리지 배수를 설정해요.
SetPositionRiskLimit 포지션의 위험 한도를 설정해요.
SetPositionTransferMargin 격리 포지션에서 마진을 이전해요.

포지션 관리 예제

// Get current position for XBTUSD
ShowMessage(oBitmex.REST_API.GetPosition('XBTUSD'));
// Set leverage to 10x
ShowMessage(oBitmex.REST_API.SetPositionLeverage('XBTUSD', 10));
// Switch to isolated margin mode
ShowMessage(oBitmex.REST_API.SetPositionIsolate('XBTUSD', True));
// Close the position at market price
ShowMessage(oBitmex.REST_API.ClosePosition('XBTUSD'));

코드 예제

다음 예제는 WebSocket 구독과 REST API 호출을 결합한 완전한 워크플로를 보여줘요: 연결, 실시간 거래 구독, 호가창 조회, 지정가 주문.

oClient := TsgcWebSocketClient.Create(nil);
oBitmex := TsgcWSAPI_Bitmex.Create(nil);
oBitmex.Client := oClient;
oBitmex.Bitmex.ApiKey := 'your_api_key';
oBitmex.Bitmex.ApiSecret := 'your_api_secret';
oClient.Active := True;
// Subscribe to trades
oBitmex.Subscribe('trade:XBTUSD');
// REST: Get order book
ShowMessage(oBitmex.REST_API.GetOrderBook('XBTUSD'));
// REST: Place a limit order
ShowMessage(oBitmex.REST_API.PlaceLimitOrder(bmsBuy, 'XBTUSD', 100, 30000));

설정 및 참고 사항

API 자격 증명

BitMEX 계정 설정에서 API 키와 시크릿을 생성해요. 특정 권한(주문, 출금 등)으로 키를 만들 수 있어요. 거래 봇의 경우 필요한 권한만 있는 키를 만들고 꼭 필요하지 않으면 출금 권한 활성화를 피해요.

테스트넷 지원

BitMEX는 개발 및 테스트를 위해 testnet.bitmex.com에서 테스트넷 환경을 제공해요. 라이브 배포 전에 시뮬레이션 자금으로 통합을 테스트하기 위해 컴포넌트를 테스트넷 엔드포인트를 사용하도록 구성해요. Bitmex 속성 그룹에 프로덕션과 테스트넷 환경 간 선택 설정이 포함돼요.

중요: 프로덕션에 배포하기 전에 항상 BitMEX 테스트넷에서 거래 로직을 테스트해요. 테스트넷 API 키는 테스트넷 인터페이스에서 별도로 생성되며 프로덕션 키와 호환되지 않아요.

주문 방향 열거형

거래 메서드는 주문 방향을 지정하기 위해 bmsBuybmsSell 열거형 값을 사용해요. BitMEX 컴포넌트에 특화된 값이에요.

WebSocket vs REST 사용

낮은 지연 시간이 중요한 실시간 데이터 스트리밍(실시간 가격 표시, 호가창 시각화, 체결 모니터링)에는 WebSocket 구독을 사용해요. 주문, 포지션 조회, 과거 데이터 가져오기 같은 온디맨드 작업에는 REST API를 사용해요. 두 인터페이스는 서로 보완하여 동시에 사용할 수 있어요.

속도 제한

BitMEX는 REST API 호출에 속도 제한을 적용해요. 제한은 엔드포인트마다 다르지만 대부분의 거래 엔드포인트는 분당 60개 요청, 주문 수정 및 취소는 분당 30개 요청이에요. 일시적으로 차단되는 것을 방지하기 위해 응답의 속도 제한 헤더를 모니터링해요. WebSocket 구독은 REST 속도 제한의 영향을 받지 않아요.

Instrument 심볼

BitMEX는 자체 instrument 심볼 형식을 사용해요. 영구 Bitcoin 계약은 XBTUSD이고 선물 계약에는 만료일 접미사(예: XBTM25)가 포함돼요. GetInstrumentsActive를 사용하여 현재 거래 가능한 모든 instrument와 심볼을 확인해요.

팁: CancelAllOrdersAfter 메서드와 애플리케이션의 주기적인 타이머를 결합하여 안전망으로 사용해요. 애플리케이션이 충돌하거나 연결을 잃으면 지정된 타임아웃 후 모든 주문이 자동으로 취소되어 예상치 못한 시장 움직임으로부터 보호해요.