FXCM API는 세계 최대 소매 외환 브로커 중 하나에 프로그래밍 방식으로 접근할 수 있어요. 실시간 시장 데이터 스트리밍, 주문 실행, 과거 캔들 조회를 지원해요. Delphi용 TsgcWSAPI_FXCM 컴포넌트는 FXCM의 WebSocket(socket.io)과 HTTP 인터페이스를 단일 사용하기 쉬운 클래스로 래핑해요. 저수준 프로토콜 세부 사항을 처리하지 않고도 자동화 트레이딩 시스템, 시장 스캐너, 포트폴리오 대시보드를 만들 수 있어요.
목차
개요 및 아키텍처
FXCM은 실시간 스트리밍용 지속 WebSocket 연결(socket.io 기반)과 요청/응답 작업용 표준 HTTP 엔드포인트를 결합한 하이브리드 프로토콜을 통해 트레이딩 플랫폼을 제공해요. TsgcWSAPI_FXCM 컴포넌트는 두 전송 계층을 통합 Delphi 인터페이스 뒤에 추상화하므로, 기본 호출이 WebSocket인지 HTTP인지와 관계없이 단일 컴포넌트와 상호작용해요.
API는 세 가지 주요 기능 영역을 지원해요:
| 영역 | 설명 | 전송 |
|---|---|---|
| 시장 데이터 | 실시간 가격 스트리밍 및 종목 검색 | WebSocket + HTTP |
| 트레이딩 테이블 | 계정 상태, 포지션, 주문, 제안 | WebSocket + HTTP |
| 주문 실행 | 트레이딩 주문 배치, 수정, 청산 | HTTP |
설정
FXCM API에 연결하기 전에 TsgcWSAPI_FXCM 컴포넌트에서 두 가지 필수 속성을 설정해야 해요:
| 속성 | 타입 | 설명 |
|---|---|---|
FXCM.AccessToken |
String | FXCM Trading Station Web에서 얻은 API 액세스 토큰 |
FXCM.Demo |
Boolean | 데모 환경의 경우 True, 라이브 트레이딩의 경우 False로 설정해요 |
FXCM.Demo := True로 개발을 시작하세요.
시작하기
FXCM 컴포넌트 설정은 세 단계만 필요해요: WebSocket 클라이언트 생성, API 컴포넌트 연결, 자격 증명 설정이에요. 클라이언트가 활성화되면 컴포넌트가 socket.io 핸드셰이크와 HTTP 베어러 토큰 인증을 자동으로 처리해요.
var
oClient: TsgcWebSocketClient;
oFXCM: TsgcWSAPI_FXCM;
begin
oClient := TsgcWebSocketClient.Create(nil);
oFXCM := TsgcWSAPI_FXCM.Create(nil);
oFXCM.Client := oClient;
oFXCM.FXCM.AccessToken := 'your_access_token';
oFXCM.FXCM.Demo := True;
oClient.Active := True;
end;
시장 데이터 메서드
시장 데이터 메서드를 사용하면 사용 가능한 종목을 검색하고, 실시간 가격 업데이트를 구독하고, 활성 구독을 관리할 수 있어요.
| 메서드 | 설명 |
|---|---|
GetSymbols |
사용 가능한 모든 트레이딩 종목(통화쌍, CFD 등) 목록을 반환해요 |
SubscribeMarketData |
지정된 종목의 실시간 가격 업데이트를 구독해요 |
UnSubscribeMarketData |
지정된 종목의 실시간 가격 업데이트 수신을 중지해요 |
UpdateSubscriptions |
현재 구독 중인 종목만 표시하도록 제안 테이블을 필터링해요 |
시장 데이터 구독
연결 후 GetSymbols를 호출해 사용 가능한 종목을 확인하고, 스트리밍 매수/매도 가격을 위해 원하는 종목을 구독해요:
// Retrieve all available trading symbols
ShowMessage(oFXCM.GetSymbols);
// Subscribe to real-time EUR/USD price updates
oFXCM.SubscribeMarketData('EUR/USD');
// Subscribe to additional pairs
oFXCM.SubscribeMarketData('GBP/USD');
oFXCM.SubscribeMarketData('USD/JPY');
// Filter the offer table to show only subscribed symbols
oFXCM.UpdateSubscriptions;
트레이딩 테이블 메서드
FXCM은 계정 데이터를 트레이딩 테이블로 구성해요. 상태가 변경될 때 지속적인 업데이트를 받도록 구독하거나 현재 상태의 일회성 스냅샷을 요청할 수 있어요.
사용 가능한 트레이딩 테이블
| 테이블 이름 | 설명 |
|---|---|
| Offer | 각 종목의 현재 매수/매도 가격, 최고/최저가, 거래 세션 정보 |
| OpenPosition | 손익, 마진, 진입 가격이 포함된 모든 현재 오픈 포지션 |
| ClosedPosition | 실현 손익이 포함된 최근 청산된 포지션 |
| Order | 대기 중인 진입 주문과 파라미터 |
| Summary | 종목별 집계된 포지션 요약 |
| LeverageProfile | 종목 및 계정별 레버리지 설정 |
| Account | 계정 잔액, 자산, 사용된 마진, 사용 가능한 마진 |
| Properties | 계정 수준 설정 및 트레이딩 속성 |
구독 및 스냅샷 메서드
| 메서드 | 설명 |
|---|---|
SubscribeTradingTables |
지정된 트레이딩 테이블의 지속적인 업데이트를 구독해요 |
UnSubscribeTradingTables |
지정된 트레이딩 테이블의 업데이트 수신을 중지해요 |
SnapshotTradingTables |
트레이딩 테이블의 현재 상태에 대한 일회성 스냅샷을 조회해요 |
// Subscribe to real-time updates for open positions
oFXCM.SubscribeTradingTables('OpenPosition');
// Subscribe to account balance updates
oFXCM.SubscribeTradingTables('Account');
// Get a one-time snapshot of all pending orders
ShowMessage(oFXCM.SnapshotTradingTables('Order'));
// Stop receiving position updates
oFXCM.UnSubscribeTradingTables('OpenPosition');
트레이딩 주문
TradingOrder 메서드는 FXCM HTTP API를 통해 주문 배치, 수정, 청산을 위한 통합 인터페이스를 제공해요. 모든 주문 작업은 이 단일 메서드를 통해 수행되며, 다른 파라미터가 수행할 작업을 제어해요.
| 메서드 | 설명 |
|---|---|
TradingOrder |
제공된 파라미터에 따라 새 주문 배치, 기존 주문 수정, 또는 오픈 포지션 청산을 수행해요 |
TradingOrder 메서드는 HTTP를 통해 요청을 보내요. 주문 제출 후 항상 트레이딩 테이블(OpenPosition, Order)에서 업데이트된 상태를 확인해 실행 결과를 확인하세요.
과거 데이터
GetHistoricalData 메서드는 지정된 시간 프레임에서 사용 가능한 모든 종목에 대한 OHLC(시가, 고가, 저가, 종가) 캔들 데이터를 조회해요. 전략 백테스팅, 차트 작성, 기술 분석에 필수적이에요.
| 메서드 | 파라미터 | 설명 |
|---|---|---|
GetHistoricalData |
Symbol, TimeFrame, NumPeriods | 지정된 시간 프레임과 기간 수에 대해 주어진 종목의 캔들 데이터를 조회해요 |
지원되는 시간 프레임
| 값 | 설명 |
|---|---|
m1 |
1분 캔들 |
m5 |
5분 캔들 |
m15 |
15분 캔들 |
m30 |
30분 캔들 |
H1 |
1시간 캔들 |
H4 |
4시간 캔들 |
D1 |
일별 캔들 |
W1 |
주별 캔들 |
M1 |
월별 캔들 |
// Get the last 100 five-minute candles for EUR/USD
ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
// Get the last 50 daily candles for GBP/USD
ShowMessage(oFXCM.GetHistoricalData('GBP/USD', 'D1', 50));
완전한 코드 예시
다음 예시는 완전한 워크플로를 보여줘요: FXCM 데모 환경 연결, 사용 가능한 종목 조회, 실시간 시장 데이터 구독, 과거 캔들 데이터 가져오기예요.
var
oClient: TsgcWebSocketClient;
oFXCM: TsgcWSAPI_FXCM;
begin
// Create and configure the WebSocket client
oClient := TsgcWebSocketClient.Create(nil);
oFXCM := TsgcWSAPI_FXCM.Create(nil);
oFXCM.Client := oClient;
// Configure FXCM credentials
oFXCM.FXCM.AccessToken := 'your_access_token';
oFXCM.FXCM.Demo := True;
// Connect to FXCM
oClient.Active := True;
// Get all available symbols
ShowMessage(oFXCM.GetSymbols);
// Subscribe to real-time market data for EUR/USD
oFXCM.SubscribeMarketData('EUR/USD');
// Get the last 100 five-minute candles
ShowMessage(oFXCM.GetHistoricalData('EUR/USD', 'm5', 100));
end;
참고 사항 및 모범 사례
데모 대 라이브 환경
항상 FXCM.Demo := True로 개발하고 테스트하세요. 데모 환경은 라이브 환경과 동일한 API 표면과 데이터 형식을 제공하지만 가상 자금을 사용해요. 철저한 테스트 후에만 FXCM.Demo := False로 전환하세요.
연결 관리
기본 socket.io 연결은 세션을 유지하기 위해 주기적으로 하트비트를 보내요. 연결이 끊기면 컴포넌트가 자동으로 재연결을 시도해요. 네트워크 중단을 처리하려면 WebSocket 클라이언트의 OnDisconnect와 OnError 이벤트를 모니터링하세요.
요청 제한
FXCM은 HTTP 요청에 대한 속도 제한을 적용해요. 루프에서 GetHistoricalData나 TradingOrder 같은 메서드를 반복 호출하는 것을 피하세요. 실시간 데이터의 경우 HTTP 폴링보다 WebSocket 구독을 사용하는 것이 좋아요.
SubscribeMarketData와 SubscribeTradingTables('OpenPosition'), SubscribeTradingTables('Account')를 결합하면 시장 상황과 포트폴리오 상태를 모두 보여주는 완전한 실시간 트레이딩 대시보드를 만들 수 있어요.
