콘텐츠로 이동

통신 모델

소개

FIX API는 세션 기반 통신을 사용합니다. 세션은 두 당사자 간의 통신으로 정의됩니다: 통신을 시작하는 당사자인 개시자(클라이언트)와 개시자로부터 연결 요청을 받는 당사자인 수락자(서버).

서버는 로그온 메시지를 사용하여 클라이언트 요청을 검증합니다.

FIX 세션 프로토콜

각 세션은 클라이언트와 cTrader 서버 간의 양방향 메시지를 유지합니다. 세션은 여러 물리적 연결을 포함할 수 있으며 시퀀스 번호를 사용하여 유지됩니다.

단일 세션 내의 모든 새로운 메시지는 1부터 시작하는 고유한 시퀀스 번호를 받습니다. 양 당사자는 순차적인 통신을 유지하기 위해 시퀀스 번호에 의존합니다. 누락된 메시지는 양 당사자 간의 양자 합의에 따라 재전송됩니다.

일반적인 세션 흐름:

  1. 클라이언트가 로그온 메시지로 세션을 시작합니다.
  2. 클라이언트가 서버와 애플리케이션 메시지를 교환합니다.
  3. 세션은 로그아웃 메시지로 종료됩니다.

cTrader FIX 프로토콜 메시지 카테고리

FIX 프로토콜에 정의된 대로 cTrader FIX 서버는 시스템과 애플리케이션의 두 가지 다른 데이터 레벨을 사용합니다.

이는 필요한 워크플로우를 지원하는 데 필요한 최소한의 메시지 세트이며, 비즈니스 요구 사항과 FIX 표준이 발전함에 따라 시간이 지나면서 변경될 수 있습니다.

시스템(관리) 메시지

  • 하트비트(클라이언트 ↔ cTrader) – 두 당사자 간의 통신 링크를 확인하는 데 사용됩니다.
  • 테스트 요청(클라이언트 ↔ cTrader) – 통신 링크의 상태를 테스트하는 데 사용됩니다.
  • 로그온(클라이언트 → cTrader) – 클라이언트 인증 메시지입니다.
  • 로그온(클라이언트 → cTrader) – 세션의 정상 종료입니다.
  • 재전송 요청(클라이언트 ↔ cTrader) – 특정 애플리케이션 메시지의 재전송을 요청합니다.
  • 거부(클라이언트 ↔ cTrader) – 세션 레벨 유효성 검사 실패입니다.
  • 시퀀스 재설정(클라이언트 ↔ cTrader) – 통신 문제가 발생한 경우 누락된 메시지를 복구하거나 누락된 메시지를 무시하기 위해 시퀀스를 재설정합니다.

애플리케이션 메시지

  • 시장 데이터 요청(클라이언트 → cTrader) – 시장 데이터에 대한 일반적인 요청입니다.
  • 시장 데이터 증분 새로 고침(클라이언트 ← cTrader) – 시장 데이터 요청 메시지에 대한 응답입니다.
  • 새 단일 주문(클라이언트 → cTrader) – 실행을 위해 중개인에게 주문을 전자적으로 제출하는 데 사용됩니다.
  • 실행 보고서(클라이언트 ← cTrader) – 확인, 체결 및 요청하지 않은 변경 사항과 같은 주문 상태 정보를 FIX 클라이언트에게 보내는 데 사용됩니다.
  • 비즈니스 메시지 거부(클라이언트 ← cTrader) – 세션 이외의 이유로 FIX 클라이언트 요청을 거부하는 데 사용됩니다.

FIX 메시지 구조

이 섹션에서는 FIX API 메시지가 어떻게 구성되는지 설명하고, FIX 메시지 형식을 설명하며, 사용자가 태그와 값 쌍 개념을 이해하는 데 도움을 줍니다.

각 메시지는 3개의 부분으로 구성되어야 합니다:

  • 헤더 – 각 관리 또는 애플리케이션 메시지 앞에는 표준 헤더가 붙습니다. 헤더는 메시지 유형, FIX 버전, 메시지 길이, 목적지, 시퀀스 번호, 출처 및 시간을 식별합니다.
  • 본문 – 메시지 본문의 내용은 헤더에 정의된 메시지 유형에 의해 지정됩니다.
  • 푸터 – 각 메시지(관리 또는 애플리케이션)는 표준 푸터로 종료됩니다. 푸터는 메시지를 구분하는 데 사용되며 CheckSum <10> 값의 3자리 문자 표현을 포함합니다.

FIX 메시지 형식

FIX 메시지는 필드의 집합입니다. 각 필드는 {tag}={value} 형식의 태그-값 쌍입니다. 예를 들어, 54=2는 주문 유형이 매도임을 의미합니다.

태그

  • FIX는 미리 정의된 태그를 사용합니다.
  • 각 태그는 특정 필드를 나타냅니다.
  • 각 태그에는 미리 정의된 번호가 할당됩니다.
  • cTrader FIX 사양은 필드 목록과 해당 태그 번호를 제공합니다.

  • 값은 할당된 태그의 값을 나타냅니다.
  • 값은 정수, 부동 소수점, 문자, 시간, 날짜, 데이터 또는 문자열 중 하나만 될 수 있습니다.

cTrader FIX API 내의 모든 메시지는 8=FIX.x.y로 시작하며, 여기서 x.y는 FIX 프로토콜의 버전입니다. 모든 메시지의 끝에는 10=xyz 필드가 있어야 하며, 여기서 xyz는 체크섬이라고 불리는 메시지의 모든 이진 값의 합을 나타냅니다.

체크섬은 수신자가 메시지의 일부가 누락되었는지 알 수 있게 함으로써 특히 패킷 손실과 같은 전송 문제를 식별하는 데 도움이 됩니다.

cTrader/cServer로 보내는 FIX 메시지에서 Symbol(55) 태그를 사용하는 경우, FIX 심벌 ID를 지정해야 합니다. 이 값은 중개인마다 다를 수 있습니다. 해당 중개인의 cTrader 애플리케이션의 심벌 정보 창에서 FIX 심벌 ID 필드를 찾을 수 있습니다.

메시지 예시

8=FIX.4.4|9=126|35=A|34=1|49=theBroker.12345|57=TRADE|50=any_string|52=20170117-08:03:04|56=CSERVER|98=0|108=30|553=12345|554=passw0rd!|10=131|
태그 # 태그 이름 설명
8 BeginString 4.4 FIX 버전
9 BodyLength 102 메시지 본문 길이는 102자입니다
35 MsgType A 메시지 유형은 로그온입니다
34 MsgSeqNum 1 메시지 시퀀스 번호는 1입니다
49 SenderCompI D broker.1047 거래 당사자의 ID로, "broker"는 cTrader에서 제공한 고유한 BrokerUID이고 "1047"은 거래 계정의 숫자 식별자입니다.
57 TargetSubID TRADE 추가 세션 한정자. 가능한 값은 "QUOTE", "TRADE"입니다.
50 SenderSubID QUOTE 특정 메시지 발신자를 식별하는 데 사용되는 할당된 값
52 SendingTime 20131129- 15:40:10.276 메시지 전송 시간은 2013년 11월 29일(YYYYMMDD) 15시 40분 10초 276밀리초입니다
56 TargetCompID CSERVER 메시지 대상은 CSERVER입니다. cTrader FIX API 내에서 유일하게 유효한 값입니다.
98 EncryptMethod 0 현재 유일하게 유효한 값은 "0"(제로)= NONE_OTHER(암호화가 사용되지 않음)입니다
108 HeartBtInt 30 초 단위의 하트비트 간격. 값은 "config.properties" 파일(클라이언트 측)에서 SERVER.POLLING.INTERVAL'로 설정됩니다. 30초가 기본 간격 값입니다. HeartBtInt가 0으로 설정되면 하트비트 메시지가 필요하지 않습니다.
553 Username 1047 숫자 사용자 ID
554 Password MyPassword1 사용자 비밀번호
10 CheckSum 000 체크섬을 계산하는 방법은 다음과 같습니다: 체크섬 필드 자체를 제외하고 메시지의 모든 바이트를 합산한 다음, 이를 256으로 나눈 나머지로 변환하고 "0"을 접두사로 붙여 세 자리 숫자를 얻습니다.