connamara / quickfixn

QuickFIX/n implements the FIX protocol on .NET.
http://quickfixn.org
Other
471 stars 560 forks source link

GroupDelimiterTagException : Group X 's first entry does not start with delimiter Y #689

Closed Dionisos94 closed 1 year ago

Dionisos94 commented 3 years ago

Hello,

Context : I need to implement a FIX Dictionary furnished by one client in my code. Unhappily, the furnished Dictionary breaks the FIX standards by making some fields that are normaly Required as... Not Required. An example of that is Repeating Group 711 (Underlying Instrument Block), which normaly start by the Required field 311 (Underlying Symbol).

image

Source : https://btobits.com/fixopaedia/fixdic44/block_Underlying_Instrument_.html

Issue The dictionary of my client set tag 311 as NotRequired image

When I try to parse this message with the function message.FromString(fixString, false, clientDataDict, clientDataDict, null), an exception is raised : QuickFix.GroupDelimiterTagException : Group 711's first entry does not start with delimiter 311

I am pretty sure that this error in a check internal to QuickFix and is not due to the dictionary I furnish. Am I wrong ?

If this is an internal check, is there a way for me to disable it ? I tried setting the following but it seems not to be enough :

image

My client is using Quickfix/j and is setting also the flag image to False. I guess it is what it is missing in my code. https://github.com/quickfix-j/quickfixj/blob/master/quickfixj-core/src/main/java/quickfix/DataDictionary.java However, I don't find this property in QuickFix/n.

Is there a way to avoid QuickFix to check groups ?

Thank you

gbirchmeier commented 3 years ago

The first field defined in a repeating group must always be (1) present, and (2) consistent, i.e. it must always be the same field. They can change their DD so that the field is different than the standard definition, and that's ok, but they can't make the first field optional.

You cannot get around this constraint. If your counterparty is telling you that the first field of a group is sometimes optional, then they are violating FIX. There are some FIX-violating behaviors that QF can handle, but I'm afraid that this will never be one of them.

The various configs that you are guessing at are not related to your problem. They are documented at http://quickfixn.org/tutorial/configuration.html

QF/n doesn't have a setting for checkUnorderedGroupFields, because it does not support false. Fields in a group must be in the DD-defined order. (Even when false is supported, the first field must always be present, per the FIX5 specification.)