Overview

The underpinning SBE schema definition also allows MarketFactory to offer  a vanilla FIX protocol interface. This delivers identical session and application messages as those via SBE, but in standard key=value form.

Existing client FIX engine and technology can be used with minimal effort, by integrating against our Application Quickfix Data Dictionary and the standard FIXT.1.1 Session Data Dictionary.

Use of both interfaces is supported, e.g

Usage Guide

The FIX interface is in reality a thin abstraction layer that rests on top of Whisperer's standard SBE representation. This has the following implications for integration:

Message Specification

Standard Header

The table below defines the Standard Header to be used for all Client messages:


TagDescriptionRequiredValuesExample
8BeginStringYesMust be "FIXT.1.1".FIXT.1.1
9BodyLengthYesMessage length, in bytes, forward to the CheckSum field.109
34MsgSeqNumYes1..n1
49SenderCompIDYesIgnored by Whisperer - may be anything descriptive identifying the userUAT_ClientA_TestUserY
56TargetCompIDYes<VenueName>.<SessionType>
VenueName is MF-defined and provided
SessionType: Indicates desired session type for user, bilaterally agreed with MF. One of {Pricing | Orders | RFS | DropCopy}
qa-360t.RFS
52SendingTimeYes

YYYYMMDD-HH:MM:SS.sssssssss

The fractions of seconds may be empty when no fractions of seconds are conveyed (in such a case the period is not conveyed).

It may include 3 digits to convey milliseconds, 6 digits to convey microseconds, 9 digits to convey nanoseconds.

20200812-08:31:06.527


Standard Trailer

The table below defines the Standard Header to be used for all Client messages:

TagDescriptionRequiredValuesExample
10ChecksumYesThree byte, simple checksum that serves, with the trailing <SOH>, as the end-of-message delimiter. Always defined as three characters.042

Session Messages

Session-level messages used by Whisperer are a subset of the standard FIXT1.1. session definition, as defined below.

Logon

The Client Logon message differs from the SBE equivalent in that the Header TargetCompID is used to convey the desired venue name and session type.

Full details of the required fields is provided in the table below:

TagDescriptionRequiredValuesExample

Standard HeaderYes

98EncryptMethodYesMust be '0' (Unencrypted)0
108HeartBtIntYes

Integer between 0-300 inclusive.
Heartbeat-generation interval in seconds. 

30
141ResetSeqNumFlagNoIf populated, must be 'N' (Do not reset sequence numbers)N
789NextExpectedMsgSeqNumYesProvided by MFAPI Client to support MF message gap checks. If equal to the next-to-be-assigned MF sequence then Whisperer will respond with a LogonResponse message and then proceed with the session as normal. If lower, then Whisperer will respond with a LogonResponse message and immediately (re)send persisted messages or GapFills, in order. On completion, it will proceed with the session as normal. If higher, then Whisperer will respond with a Logout message to abort the session.1234
553UsernameYesMF-created and assigned MFAPI usernameMyUserName
554PasswordYesMF-created password for userMyPassword
58TextNoFree-form text string the client may wish to use for support purposes.Start of Session

Standard TrailerYes

Logout

TagDescriptionRequiredValuesExample

Standard HeaderYes

58TextNoText string detailing the logout reason.System Shutdown

Standard TrailerYes

SequenceResetGapFill

TagDescriptionRequiredValuesExample

Standard HeaderYes

36NewSeqNoYesThe sequence number of the next message to be transmitted.1234

Standard TrailerYes

TestRequest

TagDescriptionRequiredValuesExample

Standard HeaderYes

112TestReqIDNoFree-form text string to be returned in resulting Heartbeat. e.g. UTC/Epoch Timestamp.TR_678

Standard TrailerYes

Heartbeat

The Client Heartbeat message differs from the SBE equivalent in that the Header TargetCompID is used to convey the desired venue name and session type. Note that the Username is not echoed back as in SBE.

Full details of the required fields is provided in the table below:

TagDescriptionRequiredValuesExample

Standard HeaderYes

112TestReqIDNoConditionally populated if the Heartbeat is sent in response to a TestRequest. Free-form text string as populated in the TestRequest. e.g. UTC/Epoch Timestamp.TR_678

Standard TrailerYes

Application Messages

For details of all application messages please refer to the FIX Data Dictionary.


Example

20200812-19:58:04.728344917	TX 8=FIXT.1.1|9=148|35=A|34=12358|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:04.728|98=0|108=5|141=N|789=11547|553=Username|554=Password|58=Client Text Here.|10=086|
20200812-19:58:07.438252925	RX 8=FIXT.1.1|9=120|35=A|49=qa-360t.RFS|56=MYNAME|34=11547|52=20200812-19:58:07.391288594|1129=mfsbe4.18459.0.0|98=0|108=5|789=12359|1137=9|10=194|
20200812-19:58:08.440313100	TX 8=FIXT.1.1|9=110|35=1|34=12359|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:08.440|112=1597262288.440186977: Client session open|10=177|
20200812-19:58:08.535917997	RX 8=FIXT.1.1|9=138|35=0|49=qa-360t.RFS|56=MYNAME|34=11548|52=20200812-19:58:08.488693110|1129=mfsbe4.18459.0.0|112=1597262288.440186977: Client session open|10=058|
20200812-19:58:08.536489009	RX 8=FIXT.1.1|9=130|35=1|49=qa-360t.RFS|56=MYNAME|34=11549|52=20200812-19:58:08.488784943|1129=mfsbe4.18459.0.0|112=Session synchronisation complete.|10=140|
20200812-19:58:08.536828994	TX 8=FIXT.1.1|9=102|35=0|34=12360|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:08.536|112=Session synchronisation complete.|10=248|

20200812-19:58:10.538969039	TX 8=FIXT.1.1|9=87|35=BE|34=12361|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:10.538|924=1|58=Hello world.|10=098|
20200812-19:58:10.811403036	RX 8=FIXT.1.1|9=123|35=CB|49=qa-360t.RFS|56=MYNAME|34=11550|52=20200812-19:58:10.764634583|1129=mfsbe4.18459.0.0|926=1|58=Venue Logon complete|10=056|

20200812-19:58:15.543975114	TX 8=FIXT.1.1|9=64|35=0|34=12362|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:15.543|10=229|
20200812-19:58:15.811738014	RX 8=FIXT.1.1|9=92|35=0|49=qa-360t.RFS|56=MYNAME|34=11551|52=20200812-19:58:15.764764790|1129=mfsbe4.18459.0.0|10=108|
20200812-19:58:20.547424077	TX 8=FIXT.1.1|9=64|35=0|34=12363|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:20.547|10=230|
20200812-19:58:20.811697006	RX 8=FIXT.1.1|9=92|35=0|49=qa-360t.RFS|56=MYNAME|34=11552|52=20200812-19:58:20.764898164|1129=mfsbe4.18459.0.0|10=108|

20200812-19:58:25.326325893	TX 8=FIXT.1.1|9=103|35=1|34=12364|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:25.326|112=1597262305.326224089: Clean Logout|10=197|
20200812-19:58:25.422652006	RX 8=FIXT.1.1|9=131|35=0|49=qa-360t.RFS|56=MYNAME|34=11553|52=20200812-19:58:25.375596391|1129=mfsbe4.18459.0.0|112=1597262305.326224089: Clean Logout|10=074|
20200812-19:58:25.423124074	TX 8=FIXT.1.1|9=79|35=5|34=12365|49=MYNAME|56=qa-360t.RFS|52=20200812-19:58:25.423|58=Manual exit|10=212|
20200812-19:58:25.607727050	RX 8=FIXT.1.1|9=152|35=CB|49=qa-360t.RFS|56=MYNAME|34=11554|52=20200812-19:58:25.560546109|1129=mfsbe4.18459.0.0|926=2|58=Received a FIX logout message from the FIX venue.|10=187|
20200812-19:58:26.235794067	RX 8=FIXT.1.1|9=92|35=5|49=qa-360t.RFS|56=MYNAME|34=11555|52=20200812-19:58:26.188674514|1129=mfsbe4.18459.0.0|10=113|