Skip to content

Parser

FIX Parser

The FIX Parser transforms a raw message stream (bytes or string) into a FixMessage data structure which is suitable for querying the required information from the message.

An object of the FixParser class does not need a FIX Data Dictionary for parsing simple messages. However, a FIX Data Dictionary is essential for parsing:

  • Custom messages
  • Messages having custom fields or custom enumerations.
  • Messages having Repeating Group fields.
  • Messages having data type fields.

QXFIX Engine also allows to create FixParserHint objects which:

  • Provide the relevant information for successful parsing of messages and enable parsing in the presence or absence of a FIX Data Dictionary.
  • Force the FixParser object to ignore certain default validations. It is useful to deal with specific needs.

FAQs

What is the role of the FixParser class? How do I parse a simple FIX Message?

The FixParser class in the Com.QX.FIXEngine.Core.Message namespace offers fast and powerful parsing of a FIX Message stream resulting into a FixMessage object.

The FixParser object can parse simple FIX Messages. However, it requires more inputs like FixDataDictionary and FixParserHint objects to deal with complexities like:

  • Custom fields.
  • Custom messages.
  • Repeating Groups.
  • Data type fields.

For example, the code for parsing a simple FIX Message string is:

using Com.QX.FIXEngine.Core;
using Com.QX.FIXEngine.Core.Message;

string rawFIXMessage = "8=FIX.4.2|9=249|35=D|49=QXT|56=ASX|34=201|52=20060103-11:31:06.329|...|10=068|";

FixParser fixParser = new FixParser(rawFIXMessage);

FixMessage fixMessage = fixParser.GetFixMessage();

The FixParser constructor in the above example represents a default FixParser object constructor.


How do I specify a FIX Data Dictionary in FixParser objects?

For parsing complex messages, a constructor for FixParser objects should include a FIX Data Dictionary.

public FixParser identifierName = new FixParser(string originalRawFixMessage, FixDataDictionary fixDataDictionary);

Example:

string dataDictionyFileName = @"D:\\Dictionaries\\XYZInitiatorFixDataDictionary.xml";

FixDataDictionary fixDataDictionary = new FixDataDictionary(dataDictionyFileName);

FixParser fixParser = new FixParser(originalRawFixMessage, fixDataDictionary);

FixMessage fixMessage = fixParser.GetFixMessage();

How do I specify FixParserHint objects for parsing complex FIX Messages?

The FixParserHint class provides useful hints about:

  • Header fields
  • Data type fields
  • Repeating Group fields
FixParserHint fixParserHint = new FixParserHint(new int[]{5001, 5002});

FixParser fixParser = new FixParser(originalRawFixMessage, fixDataDictionary, fixParserHint);

Which important public methods are available on FixParser objects?
Public methods Description
OriginalRawFixMessage Gets raw message
HeaderMessage Header
BodyMessage Body
TrailerMessage Trailer
BeginString Tag 8
BodyLength Tag 9
MsgSeqNum Tag 34
MsgType Tag 35
SenderCompID Tag 49
TargetCompID Tag 56
CheckSum Tag 10

How I parse a FIX Message with Repeating Groups?
RepeatingGroupFieldInfo repeatingGroupFieldInfo =
    new RepeatingGroupFieldInfo(268, new int[]{79, 69, 5, 70, 71});

MsgRepeatingGroupFieldInfo msgRepeatingGroupFieldInfo =
    new MsgRepeatingGroupFieldInfo();

FixParserHint fixParserHint =
    new FixParserHint(null, null, msgRepeatingGroupFieldInfo);

FixParser fixParser =
    new FixParser(rawFixMessage, null, fixParserHint);

How do I parse a FIX Message having Data type fields?
MsgDataTypeFieldInfo msgDataTypeFieldInfo =
    new MsgDataTypeFieldInfo(FixMessageTypes.Logon_A, new int[]{96});

FixParserHint fixParserHint =
    new FixParserHint(null, msgDataTypeFieldInfo, null);

FixParser fixParser =
    new FixParser(rawFixMessage, null, fixParserHint);

How do I parse a FIX Message string that includes binary data?
byte[] bFixMessage1 = fixMessage1.ToArray();

FixParser fixParser =
    new FixParser(bFixMessage1, null, fixParserHint);

FixMessage fixMessage2 = fixParser.GetFixMessage();

byte[] bFixMessage2 = fixMessage2.ToArray();