The Lab

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

No files shared here yet.

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-level Whisperer Data Dictionary and the standard Session-level FIXT.1.1 Data Dictionary.

Use of both interfaces is supported, e.g

  • A Client may use the direct SBE interface for Market Data, whilst integrating via FIX for Orders.
  • A client may use the FIX interface for speed-to-market considerations, and build out a direct SBE interface at a later date.

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:

  • Session Layer - The Interface uses FIXT.1.1 as the session layer definition. Refer to https://www.fixtrading.org/standards/fix-session-layer/ for further details. Note that no modifications to the standard FIXT.1.1 session are required.
  • API version - it is the responsibility of the Client to ensure that all FIX messages conform to the schema version of the deployed Bridge. This is provided by Whisperer in every message sent to the Client in the 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.
  • Tag Order - ordering matters and must exactly match the ordering of fields in the data dictionary.
  • Omitted Tags - Fields with default values do not need to be populated - they will automatically be treated as NULL. Empty 'No' and 'Has' groups can be entirely omitted. E.g NoHops, HasLegNDFFields.
  • Timestamp Precision - The following Session-level timestamps are published at nanosecond precision in all messages to the Client: 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.
  • Session Synchronisation - As with the SBE interface, the FIX interface utilises the NextExpectedMsgSeqNum field in the exchanged Logon messages to ensure session synchronisation. ResendRequest messages are not supported.
  • Sequence Numbers - As with the SBE, inbound and outbound sequence numbers are reset on a weekly basis.

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
49SenderCompIDYesMF-created and assigned MFAPI usernameMyUsername
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 username. This is the same value as the Client SenderCompID.MyUsername
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

Session Establishment
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|



  • No labels