FIX 세션 메시지 - 테스트 및 거부

2019. 12. 10. 14:41FIX

로그인과 리커버리 메시지 외에 테스트요청(35=1), 세션거부(35=3) 등의 메시지가 있다.

 

테스트 메시지

먼저 테스트요청 메시지를 살펴보겠다. 앞서 로그인 시나리오에서 세션이 비정상일때 송신한 적이 있다. 테스트 요청은 일반 Heartbeat와 유사하지만 MsgType(Tag.35)를 1(TestRequest)로 요청하고 0(Heartbeat)로 응답받는다. 한가지 다른 점은 테스트 요청시에 112 태그에 원하는 메시지를 넣어서 보낸다. 그러면 테스트 요청을 받은 곳에서는 112로 수신된 메시지를 112 태그에 실어서 Heartbeat(35=0)으로 응답한다.

 

<테스트 요청 (TestRequest(35=1))>
[out]8=FIX.4.4^A9=104^A35=1^A34=2294^A52=20111207-04:15:21.533^A49=ACOMPID^A56=BCOMPID^A112=This is
Test Request Message^A10=175^A

<테스트 응답 (Heartbeat(35=0))>
[in]8=FIX.4.4^A9=99^A35=0^A49=BCOMPID^A56=ACOMPID^A34=727^A52=20111207-04:15:22^A112=This is Test
Request Message^A10=146^A

 

거부 메시지

세션 메시지 중에 또 하나 중요한 메시지는 세션거부(35=3)이다. 최초 세션 생성시에 잘못된 정보로 로그인 시도를 할 경우에 로그인 거부를 위해서도 쓰이지만, 비즈니스 메시지에 잘못된 태그를 사용해서도 발생할 수 있다. 비즈니스 메시지의 경우 세션 거부될 경우에는 비즈니스적으로 해야할 일이 있을 수 있다. 예를들어 주문을 낼 경우 해당 주문시 발생한 증거금을 해지해 주는게 하나의 예일 것이다.

 

비즈니스에서 거부를 처리하기 위해서는 RefSeqNum(Tag.45)가 중요한 역할을 한다. 이것을 통해 어떤 메시지에 대한 거부인지 확인을 할 수 있기 때문이다. 세션거부 메시지 수신시 주문내역에서 해당하는 MsgSeqNum를 조회하여 주문내역을 확인할 수 있다. (주문내역을 확인할 수 있는 기능은 보통 FIX 엔진 기능에 포함되어 있다.)

 

주문/체결 송수신 매핑 프로세스를 관리하는 경우에는 거부메시지 수신시 45 태그에 있는 시퀀스 번호를 토대로 주문내역을 확인하여 주문번호 등을 설정해 줄 수 있다.

 

다음은 정정취소주문(35=G)에 대한 거부(35=3) 예제이다. 텍스트 필드(Tag.58)에 사유를 보내주다. 45=15440이 수신되었으므로 MsgSeqNum이 15440인 메시지에 대한 거부임을 알 수 있다. 

 

<거부 메시지 수신>
[08/01 08:10:31.481990] SESSIO>> [S]-

[8=FIX.4.2^A9=269^A35=G^A49=ACOMPID^A56=BCOMPID^A34=15440^A50=220250368421^A142=KR^A57=G^A52=20180731-23:10:31.4 

81^A369=21070^A1=725DAE03^A11=O20180801194220^A21=1^A38=1^A40=2^A44=1.1729000^A59=0^A41=O2018080119431^A54=1^A55
=M6E^A60=20180731-23:10:31.478^A167=FUT^A200=201809^A1028=Y^A107=M6EU8^A204=0^A9702=1^A9768=Y^A10=114^A]


[08/01 08:10:31.650341] SESSIO>> [R]-

[8=FIX.4.2^A9=181^A35=3^A34=21071^A369=15440^A52=20180731-23:10:31.565^A49=BCOMPID^A50=G^A56=ACOMPID^A57=2202503
68421^A143=KR^A45=15440^A58=OrderID (37) must be present on a Cancel or Cancel Replace
Request^A1028=Y^A10=036^A]