재무 정보 eXchange

Financial Information eXchange

FINC(Financial Information eXchange) 프로토콜은 증권 거래 및 시장과 관련된 정보의 국제 실시간 교환을 위해 1992년에 시작된 전자 통신 프로토콜이다. 나스닥에서만 연간 수조 달러가 거래되는 상황에서 금융서비스업체들은 금융시장에 대한 속도를 높이기 위해 직접시장접근(DMA)을 채택하고 있다. 거래 애플리케이션의 제공을 관리하고 지연 시간을 점점 더 낮게 유지하려면 FIX 프로토콜을 이해해야 한다.

역사

FIX 프로토콜 사양은 원래 1992년 로버트 "밥" 라무룩스와 크리스 모스타트가 피델리티 인베스트먼트살로몬 브라더스 간의 주식 거래 데이터의 전자적 통신을 가능하게 하기 위해 작성한 것이다. FIX는 처음에 브로커-딜러들과 그들의 기관 고객들 사이의 정보를 다루었다. 당시 이 정보는 전화로 구두로 전달됐다. 피델리티는 그들의 브로커-딜러들로부터 받은 정보가 잘못된 거래자에게 전달되거나, 당사자들이 전화를 끊을 때 간단히 분실될 수 있다는 것을 깨달았다. 그것은 그러한 커뮤니케이션이 기계 판독이 가능한 데이터로 대체되기를 원했다. 이 데이터는 트레이더들 사이에서 공유되고, 분석되고, 작용하고, 저장될 수 있다. 예를 들어 브로커-딜러들은 관심 표시(IOI)로 전화를 걸어 한 블록의 주식을 사거나 팔도록 한다. FIX 이니셔티브는 IOI와 같은 새로운 메시지를 만들었다.

FISC 트레이딩 커뮤니티에 따르면 FISC는 글로벌 주식시장에서 사전 거래 및 무역 커뮤니케이션의 사실상의 메시징 표준이 되었으며, 직거래 처리를 지원하기 위한 사후 거래 공간으로 확장하는 것은 물론, 외환, 고정 수입, 파생상품 시장으로의 확장을 지속하고 있다.[1]

FIX 트레이딩 커뮤니티

FIX Trade Community는 FIX Protocol 메시징 언어를 포함한 표준의 사용 증가, 운영 효율성 제공, 투명성 증대, 그리고 글로벌 금융 시장 전반의 다중 자산 거래에 영향을 미치는 비즈니스 및 규제 문제를 해결하기 위한 임무를 가진 비영리 산업 주도 표준 기관이다. 모든 [2]시장 참여자의 비용 및 위험 감소

사용자

FIX는 금융시장매도측(브로커/딜러점)뿐만 아니라 매수측(기관) 모두 널리 사용되고 있다. 이용자 중에는 뮤추얼펀드, 투자은행, 브로커, 증권거래소, ECN 등이 있다. 주요 FIX 사용자 목록은 FIX Trade Community Organization을 참조하십시오.

FIX는 거래 전 통신과 거래 실행을 위한 표준 전자 프로토콜이 되었다. 주로 프론트 오피스 지역의 주식 거래에 이용되지만 채권, 파생상품, FX 거래도 가능하다. SWIFT백오피스 메시징의 표준인 반면 FISC는 프런트 오피스 메시징의 표준이라고 말할 수 있다. 그러나 오늘날 FIX Protocol Ltd.의 멤버십은 사실상 모든 자산 등급에 대해 모든 시장에서 FIX를 블록 트레이드 할당 및 다른 거래 과정 단계로 확장하고 있다.

기술 사양

원래 FIX 표준은 단일 기술 사양에 응용 계층 의미론, 메시지 인코딩, 세션 계층을 포함하는 단일형이었다. 그것은 FIX 버전 4.2를 통해 획일적으로 유지되었다.[3] 이후 메시지 인코딩과 세션 레이어 사양은 별도의 문서로 분리되기 시작했고, 궁극적으로 FIX는 관련 기술 표준의 계열로 진화했다.[4]

메시지 인코딩

OSI 모델(Open Systems Interconnect Model)에서 Presentation Layer라고 불리는 메시지 인코딩은 메시지의 유선 형식을 담당한다.

태그 값 인코딩(클래식 FIX)

원래 FIX 메시지 인코딩은 tagvalue 인코딩으로 알려져 있다. 각 필드는 고유한 숫자 태그와 값으로 구성된다. 태그는 의미론적으로 필드를 식별한다. 그러므로 메시지는 스스로 설명하는 것이다. 태그값 인코딩은 ASCII 코드를 사용하는 문자 기반이다.

FIX tagvalue 메시지 형식

메시지 필드는 ASCII 01 <헤더의 시작> 문자를 사용하여 구분한다. 그들은 머리글, 몸체, 트레일러로 구성되어 있다.

FIX.4.4까지 헤더에는 다음과 같은 3개의 필드가 포함되었다.BeginString), 9 (BodyLength(), 및 35(MsgType) 태그.

FIXT.1.1 / FIXT.5.0에서 헤더에는 5개의 필수 필드와 8개의 선택적 필드가 있다.BeginString), 9 (BodyLength), 35 (MsgType), 49 (SenderCompID), 56 (TargetCompID) 및 1128 (ApplVerID - 존재하는 경우 6번째 위치에 있어야 함).

메시지 본문의 내용은 (태그 35, MsgType) 헤더에 정의된 메시지 유형.

메시지의 마지막 필드는 태그 10, Fix Message Checksum 입니다. 항상 세 자리수(예: 세 자리수)로 표현된다. 10=002).

헤더+바디+트레일러 : FIX 콘텐츠

FIX 메시지 예: 실행 보고서(파이프 문자는 SOH 문자를 나타내기 위해 사용됨)

8=FIX.4.2   9=178   35=8   49=PHLX   56=PERS   52=20071123-05:30:00.000   11=ATOMNOCCC9990900   20=3   150=E   39=E   55=MSFT   167=CS   54=1   38=15   40=2   44=15   58=PHLX EQUITY TESTING   59=0   47=C   32=0   31=0   151=15   14=0   6=0   10=128    

위의 FIXMessage Body 길이 9가 올바르고 오픈 소스 FIX 구현인 QuickFIX에서 사용할 수 있는 소스를 사용하여 체크섬 10을 체크아웃했다.

FIX 메시지는 여러 필드에서 형성되며, 각 필드는 구분 기호 SOH(0x01)로 다음 필드와 구분되는 태그 값 쌍이다. 태그는 필드의 의미를 나타내는 정수다. 값은 특정 태그에 대해 특정 의미를 갖는 바이트 배열(예: 태그 48은 보안임)ID, 보안을 식별하는 문자열, 태그 22는 IDSource, 사용 중인 식별자 클래스를 나타내는 정수). 값은 일반 텍스트로 하거나 순수한 이진수로 인코딩될 수 있다(이 경우 값은 길이 필드가 선행한다). FIX 프로토콜은 대부분의 태그에 대한 의미를 정의하지만, 동의하는 당사자 간에 사적인 사용을 위한 일련의 태그를 남겨둔다.

FIX 프로토콜은 또한 특정 메시지를 만드는 필드 집합을 정의한다. 필드 집합 내에서 일부는 필수사항이고 다른 일부는 선택사항이다. 메시지 내 필드의 순서는 일반적으로 중요하지 않지만, 반복 그룹은 카운트가 선행하고 암호화된 필드는 길이가 선행한다. 메시지는 머리, 몸, 꼬리 세 부분으로 나뉜다. 필드는 올바른 섹션 내에 있어야 하며 각 섹션 내에서 필드는 하나의 메시지가 다음 메시지로 실행되지 않도록 하는 구분자로 작용할 수 있으므로 위치가 중요할 수 있다. 모든 FIX 메시지의 마지막 필드는 태그 10(체크섬)이다.

메시지 그룹에는 크게 admin과 application이라는 두 가지 그룹이 있다. 관리 메시지는 FIX 세션의 기본 사항을 처리한다. 세션 시작 및 종료와 누락된 메시지 복구를 허용한다. 신청 메시지는 주문 요청이나 현재 상태에 대한 정보 및 그 이후의 주문 실행과 같은 무역 관련 정보의 송수신을 다룬다.

헤더
몸길이

몸길이는 태그 35(포함)에서 시작하여 태그 10(제외)까지 이르는 문자 수입니다. SOH 구분 기호는 몸길이로 계산한다.
예: (SOH가 ''로 대체됨)

8=FIX.4.2 9=65 35=A 49=SERVER 56=CLIENT 34=177 52=20090107-18:16 98=0 108=30 10=062 0 + 5 + 10 + 10 + 10 + 7 + 0 = 65

신체 길이는 65이다.
태그=값의 끝에 있는 SOH 구분 기호는 태그에 속한다.

트레일러: 체크섬

FIX 메시지의 체크섬은 항상 메시지의 마지막 필드다. 3자로 구성되어 있으며 10번 태그가 있다.[5] 체크섬 필드 자체를 제외한 메시지 내 모든 문자의 ASCII 값을 합산하고, 그 결과 합계에 대해 modulo 256을 수행하여 주어진다.[6] 예를 들어 위의 메시지에서 모든 ASCII 값(ASCII 표에 값이 1인 SOH 문자 포함)을 합하면 4158이 된다. modulo 연산을 수행하면 값이 62가 된다. 체크섬은 3자로 구성되기 때문에 062가 사용된다.

픽스ML

FIXML은[7] FIX 메시지를 위한 XML 스키마다. 의미론적으로 태그값 인코딩 메시지와 맞먹지만 XML 파서 기술을 활용한다. FIXML은 일반적으로 거래보다는 백오피스나 애플리케이션 정리에 사용된다.

SBE(단순 이진 인코딩)

단순 바이너리 인코딩은[8] 컴퓨팅 시스템에 고유한 원시 데이터 유형을 사용하는 와이어 형식을 정의한다. 그러므로 메시지 인코딩과 디코딩은 문자 기반 프로토콜보다 훨씬 낮은 지연 시간이다. 컴퓨터가 사용할 수 있는 형식으로 데이터를 입력하는 데 변환이 필요하지 않기 때문이다. 지연 시간 이점 외에도, 성능은 템플릿에 의해 제한되고 고정 길이 데이터 요소가 선호되기 때문에 더 결정론적이다. 또 다른 결과는 메시지 필터와 라우터가 키 필드에 접근하기 위해 전체 메시지를 차단할 필요가 없도록 필드가 일반적으로 고정된 위치에 있다는 것이다.

SBE는 FIX 고성능 워킹그룹이 고성능 거래를 지원하기 위해 개발했다. Tagvalue 인코딩은 바이너리가 아닌 문자 기반이며 가변 길이 필드와 메시지가 비결정적 성능을 유발하기 때문에 더 이상 목적에 적합하지 않은 것으로 간주되었다.

태그값과 FIXML과는 달리, SBE 메시지는 자가 설명되지 않는다. 메시지를 제어하는 템플릿을 식별하기 위해 최소 헤더로 데이터만 와이어로 전송된다. 메시지 레이아웃을 설명하는 메타데이터는 피어 간에 대역 외 교환된다.

FIX Trade Community는 SBE 메시지 스키마에 대한 XML 스키마를 게시한다. 메시지 스키마에는 메시지 템플리트의 개수가 포함될 수 있다. 템플리트는 메시지를 구성하는 필드를 설명한다. 또한 스키마는 필드 수에 관계없이 재사용할 수 있는 단순하고 복합적인 데이터 유형의 목록을 제공한다.

실제적인 관점에서, C/C++ 구현을 가정하고, Endianness를 위한 조정: 메시지에서 대부분의 비복합형들은 언어에서 동일한 유형에 직접 매핑된다. 예를 들어 32비트 정수 매핑 대상 uint32_t, 고정 문자열 맵 const char *, 부동 소수점 매핑 대상 float 등등. C/C++를 생성할 수 있음 struct 스키마 정의에서. 그런 다음, 메시지 버퍼에 포인터를 주어, 메시지 양의 비복합 필드에 접속하여 구조물에 대한 포인터로 그것을 타이핑하고 구조 구성원에 직접 접속한다.

/* 스키마에서 생성된 구조체 */ 구조상의 메시지 {   ...   uint32_t 수량;   ...   경시하다 마를 뜨다 *심볼;   ... };  공허하게 하다 소비_소비(공허하게 하다 *수신_수신) {   경시하다 구조상의 메시지 *음스그 = (경시하다 구조상의 메시지*) 수신_수신;   활자화하다(" %s의 %u이(가) 추적됨\n", 음스그->수량, 음스그->심볼);   ... } 

기타 FIX 인코딩

FIX Trade Community는 또한 다음을 포함한 FISC와 기타 메시지 프로토콜 간의 표준 매핑을 개발했다.

세션 프로토콜

세션 계층은 체크포인트 복구 메커니즘을 포함한 메시지 교환을 담당한다.

FIXT 운송(FIXT)

원래 FIX 세션 프로토콜은 애플리케이션 계층 의미론 및 메시지 인코딩을 다루는 단일 규격의 일부였기 때문에 고유한 이름이 없었다. 그러나 FIXT 버전 5.0부터는 FIXT의 도입과 함께 세션 레이어가 독립된 사양으로 분리되었다.[9] FIXT는 버전 4.x의 원래 이름 없는 세션 계층과 대체로 동일했지만, 하나의 중요한 혁신을 제공했다. 즉, FIXT 애플리케이션 계층 버전을 공통 세션 버전에 혼합할 수 있는 메커니즘을 제공했다. 현재 FIXT 버전은 1.1이다.

이론적으로 FIXT는 운송에 독립적이다. 그러나 보통 TCP(Transmission Control Protocol)를 통해 사용된다.

FIXT는 포인트 투 포인트 프로토콜이다. 그것은 양방향으로 메시지 전달을 보장한다. 각 방향으로 전송되는 메시지는 메시지 헤더에 메시지 시퀀스 번호를 전달한다. 통신 결함이 있는 경우, 피어는 누락된 메시지의 재전송을 요청할 수 있다. 메시지 전달은 연결이 끊겼다가 나중에 세션을 다시 설정한 경우에도 지원된다.

세션 설정 및 보장 전달을 구현하기 위해 FIXT 및 클래식 FIXT 4.x는 다음과 같은 세션 메시지 유형을 정의한다.

  • 하트비트
  • 테스트 요청
  • 재전송요청
  • 거부하다
  • 시퀀스리셋
  • 로그아웃
  • 로그온
  • XML논픽스

FIXP(성능 세션 계층) 수정

FIXP는[10] 고성능 거래의 요구를 충족시키기 위해 FIX High Performance Working Group에[11] 의해 개발되었다. 주요 요구 사항은 낮은 지연 시간 메시지 인코딩과 디코딩 및 메시지 배달 보증에 대한 통제가 필요하다.

짧은 대기 시간을 제공하기 위해 세션 계층과 응용 프로그램 메시지 모두에 대해 이진 메시지 인코딩이 지원된다. 실제 와이어 형식은 FEXP 규격에서 추상화되므로, 사용자는 피어가 사용할 프로토콜에 동의하는 한 자신이 선택한 FIX 인코딩을 선택할 수 있다. 초기 개발에서는 Simple Binary Encoding을 사용해 왔다.

FIXP는 공통 원시성을 가진 포인트 투 포인트와 멀티캐스트 사용 사례 모두를 다룬다.

포인트 투 포인트 세션이 설정되면 동료들은 다음 선택 사항 중에서 제공 보증을 협상한다.

  • 복구 가능: 정확히 한 번만 메시지 배달 공백이 감지되면 누락된 메시지는 재전송을 통해 복구할 수 있다.
  • idempotent: 최대 한 번에 배달. 공백이 감지되면 발신인에게 통지하지만, 전혀 수행되지 않으면 복구는 애플리케이션 관리 하에 있다.
  • 순서 없음: 배달 보증을 하지 않음. 보증이 불필요하거나 애플리케이션 계층 또는 다른 통신 채널을 통해 복구가 제공되는 경우 이 선택은 적절하다.
  • 없음: 세션의 한 방향으로 응용 프로그램 메시지를 보내서는 안 된다.

배달 보증은 비대칭일 수 있다. 예를 들어, 거래자는 무증분 흐름으로 주문을 입력할 수 있고, 집행은 회수가능 흐름으로 반환될 수 있다. 빠르게 움직이는 시장에서, 재전송에 내재된 지연은 종종 바람직하지 않아, 기회를 놓치거나 나쁜 거래를 초래한다.

FIX 시스템의 도표적 표현

아래는 Buyside/Customer와 Sellside/Supplyer 사이의 FIX 메시징을 보여주는 다이어그램이다.[12]

Financial Information eXchange System Connectivity Diagram.svg

FIX 프로토콜의 최신 개발

최신 버전의 FIX 프로토콜은 단일 버전의 전송 독립 FIXT 세션(FIXT.1.1 이상)을 통해 여러 버전의 응용프로그램 메시지를 전송할 수 있도록 허용함으로써 "운송 독립성"을 구현한다.

Transport Independence는 또한 TCP를 통한 전통적인 FIX 대신에 메시지 큐와 웹 서비스와 같은 전송 프로토콜이 사용될 수 있는 길을 열어준다.

FIX는 이제 FIX 알고리즘 트레이딩 정의 언어 FIXatdl을 사용하여 알고리즘 트레이딩을 지원한다.

FIX Protocol Limited for Streaming을 뜻하는 FAST 프로토콜을 출시했다. FAST는 이진 프로토콜로 UDP 연결을 통해 멀티캐스트 시장 데이터를 전송하는 데 주로 사용된다.

테스트 도구

많은 기업이 FIX 테스트 제품 및 서비스를 제공한다.

  • 센스플 파이픽스[13]
  • FixSpec Central[14]
  • FixSpec FIX 작업 공간[15]
  • 감마 3 픽스심
  • 레핀시스 테스타마티크[17]
  • B2Bits 사실[18]
  • 카메론텍 베리픽스[19]
  • Esprow ETP Studio for FIX[20]
  • 정확한 프로 테스트 도구[21]
  • FIX 플라이어 점화
  • GDS Fizzer - FIX 퍼징 프레임워크
  • Wipro FIX 검사원[24]


참고 항목

메모들

  1. ^ "What is FIX?". The FIX Protocol Organization. June 8, 2009. Archived from the original on September 9, 2004.
  2. ^ "Overview • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-06.
  3. ^ "FIX 4.2 Specification with 20010501 Errata • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-05.
  4. ^ "FIX Standards • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-05.
  5. ^ FIX 4.2 : CheckSum <10> 필드 FIX Dictionary
  6. ^ 부록 B - CheckSum Calculation FIX 사전
  7. ^ "FIXML • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-05.
  8. ^ "Simple Binary Encoding (SBE) • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-05.
  9. ^ "FIX Transport (FIXT) • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-05.
  10. ^ "FIX Performance Session Layer (FIXP) • FIX Trading Community". FIX Trading Community. Retrieved 2018-12-05.
  11. ^ "Home – High Performance Working Group". FIX Trading Community. Retrieved 2018-12-05.
  12. ^ DeMarco, Darren. "Exploiting Financial Information Exchange (FIX) Protocol?".
  13. ^ "Sensiple PhiFIX is a suite of Multi-protocol (FIX, EMAPI, FAST, ITCH & OUCH) based messaging infrastructure for low latency communication in trading". www.phifix.com. Retrieved 2019-02-25.
  14. ^ "Central by FixSpec". fixspec.com. Retrieved 2019-03-26.
  15. ^ "FIX Workspace by FixSpec". fixspec.com. Retrieved 2021-07-01.
  16. ^ "FIXSIM: FIX Protocol Testing". www.fixsim.com. Retrieved 31 October 2016.
  17. ^ "Lefinsys Testamatiq Fix sender and certification tool". www.lefinsys.com. Retrieved 2016-05-08.
  18. ^ "B2BITS FIX FIX Automated Certification and Testing Service". www.b2bits.com. Retrieved 2016-05-08.
  19. ^ "VeriFIX Products CameronTec Group". www.camerontecgroup.com. Retrieved 2016-05-08.
  20. ^ "Esprow ETP Studio for FIX". www.esprow.com. Retrieved 2016-05-08.
  21. ^ "Test Tools". www.exactprosystems.com. Retrieved 2016-05-08.
  22. ^ "FIX Flyer Ignition". www.fixflyer.com. Retrieved 17 March 2017.
  23. ^ "GDS Fizzer". www.gdssecurity.com.com. Retrieved 25 April 2018.
  24. ^ "Fix Protocol Testing, Fix Testing Tools Wipro". www.wipro.com. Retrieved 2016-05-08.

외부 링크