
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 coding against our Quickfix Data Dictionary.
Use of both interfaces is supported, e.g
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:
CstmApplVerID field. (e.g. 1129=mfsbe4.18459.0.0). Any Client message that that cannot be parsed correctly will be treated as corrupted and result in a session-disconnect.NoHops, HasLegNDFFields.SendingTime, OrigSendingTime, HopArrivalTime & HopNetworkTime. The Client may use any timestamp precision they wish for SendingTime & OrigSendingTime in its outbound messages - to a maximum of nanosecond precision.NextExpectedMsgSeqNum field in the exchanged Logon messages to ensure session synchronisation. ResendRequest messages are not supported.The table below defines the Standard Header to be used for all Client messages:
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| 8 | BeginString | Yes | Must be "FIXT.1.1". | FIXT.1.1 |
| 9 | BodyLength | Yes | Message length, in bytes, forward to the CheckSum field. | 109 |
| 34 | MsgSeqNum | Yes | 1..n | 1 |
| 49 | SenderCompID | Yes | Ignored by Whisperer - may be anything descriptive identifying the user | UAT_ClientA_TestUserY |
| 56 | TargetCompID | Yes | <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 |
| 52 | SendingTime | Yes | 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 |
The table below defines the Standard Header to be used for all Client messages:
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| 10 | Checksum | Yes | Three byte, simple checksum that serves, with the trailing <SOH>, as the end-of-message delimiter. Always defined as three characters. | 042 |
Session-level messages used by Whisperer are a subset of the standard FIXT1.1. session definition, as defined below.
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:
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| Standard Header | Yes | |||
| 98 | EncryptMethod | Yes | Must be '0' (Unencrypted) | 0 |
| 108 | HeartBtInt | Yes | Integer between 0-300 inclusive. | 30 |
| 141 | ResetSeqNumFlag | No | If populated, must be 'N' (Do not reset sequence numbers) | N |
| 789 | NextExpectedMsgSeqNum | Yes | Provided 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 |
| 553 | Username | Yes | MF-created and assigned MFAPI username | MyUserName |
| 554 | Password | Yes | MF-created password for user | MyPassword |
| 58 | Text | No | Free-form text string the client may wish to use for support purposes. | Start of Session |
| Standard Trailer | Yes |
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| Standard Header | Yes | |||
| 58 | Text | No | Text string detailing the logout reason. | System Shutdown |
| Standard Trailer | Yes |
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| Standard Header | Yes | |||
| 36 | NewSeqNo | Yes | The sequence number of the next message to be transmitted. | 1234 |
| Standard Trailer | Yes |
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| Standard Header | Yes | |||
| 112 | TestReqID | No | Free-form text string to be returned in resulting Heartbeat. e.g. UTC/Epoch Timestamp. | TR_678 |
| Standard Trailer | Yes |
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:
| Tag | Description | Required | Values | Example |
|---|---|---|---|---|
| Standard Header | Yes | |||
| 112 | TestReqID | No | Conditionally 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 Trailer | Yes |
For details of all application messages please refer to the FIX Data Dictionary.
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| |