FXCM API Update sgcWebSockets

· 기능
Delphi에서의 FXCM Forex Trading API 통합

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 Trading Station Web에 로그인하고 계정 설정으로 이동한 후 새 API 토큰을 생성하세요. 실제 거래를 방지하기 위해 항상 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 클라이언트의 OnDisconnectOnError 이벤트를 모니터링하세요.

요청 제한

FXCM은 HTTP 요청에 대한 속도 제한을 적용해요. 루프에서 GetHistoricalDataTradingOrder 같은 메서드를 반복 호출하는 것을 피하세요. 실시간 데이터의 경우 HTTP 폴링보다 WebSocket 구독을 사용하는 것이 좋아요.

팁: 라이브 가격용 SubscribeMarketDataSubscribeTradingTables('OpenPosition'), SubscribeTradingTables('Account')를 결합하면 시장 상황과 포트폴리오 상태를 모두 보여주는 완전한 실시간 트레이딩 대시보드를 만들 수 있어요.