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();