통신 모델¶
소개 ¶
FIX API는 세션 기반 통신을 사용합니다. 세션은 두 당사자 간의 통신으로 정의됩니다: 통신을 시작하는 당사자인 개시자(클라이언트)와 개시자로부터 연결 요청을 받는 당사자인 수락자(서버).
서버는 로그온 메시지를 사용하여 클라이언트 요청을 검증합니다.
FIX 세션 프로토콜 ¶
각 세션은 클라이언트와 cTrader 서버 간의 양방향 메시지를 유지합니다. 세션은 여러 물리적 연결을 포함할 수 있으며 시퀀스 번호를 사용하여 유지됩니다.
단일 세션 내의 모든 새로운 메시지는 1부터 시작하는 고유한 시퀀스 번호를 받습니다. 양 당사자는 순차적인 통신을 유지하기 위해 시퀀스 번호에 의존합니다. 누락된 메시지는 양 당사자 간의 양자 합의에 따라 재전송됩니다.
일반적인 세션 흐름:
- 클라이언트가 로그온 메시지로 세션을 시작합니다.
- 클라이언트가 서버와 애플리케이션 메시지를 교환합니다.
- 세션은 로그아웃 메시지로 종료됩니다.
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"을 접두사로 붙여 세 자리 숫자를 얻습니다. |