Imported from previous forum
Hi,
I have a case where a repeating group contains another repeating group nested and inner repeating group is the only field in the outer repeating group and is also the first and mandatory field.
See the below spec for the message, NoQuoteSets is the outer group and it contains another group NoQuoteEntries.
I am not sure if this is valid fix message, Can anyone confirm if it is valid message?
Hi,
I have a case where a repeating group contains another repeating group nested and inner repeating group is the only field in the outer repeating group and is also the first and mandatory field.
See the below spec for the message, NoQuoteSets is the outer group and it contains another group NoQuoteEntries.
I am not sure if this is valid fix message, Can anyone confirm if it is valid message?
Within tag=value syntax there is a mandated requirement that the first field defined for a repeating group appear as the first field. In the case of tag=value syntax for MassQuoteAck (msg type=b), NoQuoteSets(296) should be followed by QuoteSetID (302) not NoQuoteEntries (295).
Hi,
I have a case where a repeating group contains another repeating group nested and inner repeating group is the only field in the outer repeating group and is also the first and mandatory field.
See the below spec for the message, NoQuoteSets is the outer group and it contains another group NoQuoteEntries.
I am not sure if this is valid fix message, Can anyone confirm if it is valid message?
Within tag=value syntax there is a mandated requirement that the first field defined for a repeating group appear as the first field. In the case of tag=value syntax for MassQuoteAck (msg type=b), NoQuoteSets(296) should be followed by QuoteSetID (302) not NoQuoteEntries (295).
Hi Scott,
I understand the requirement of first field being mandatory. The 35=b message structure is slightly modified in data dictionary to allow NoQuoteEntries as first field in NoQuoteSets. This is how one of our makers are sending the QuoteAck message, they send only NoQuoteEntries in NoQuoteSets.
Can we not have a group as first field in another group? I have not found anything related to this in fix spec. Is this is a valid message?
With Regards,
Srinivas
Srinivas,
it is important to understand that the design of a FIX message using the tag=value syntax is not arbitrary. One of the rules is that you cannot omit the first element (a field or again a repeating group) of a repeating group. It has to be part of your message, even if you can only fill it with “N/A” or zero or something similar. In that sense the “slight modification” is a violation of tag=value design rules and standard parsers should reject such messages.
You ask about examples of repeating groups as first fields. I am not sure we actually have any. We have many where the first element is non-repeating component and the first field of this component becomes mandatory for the outer repeating group. However, I see no reason why it should not be valid to have a field NoXXX followed by NoYYY on the wire. I think we would try to avoid such constructs, i.e. a repeating group instance should be identified by one or more simple fields. These would be defined at the beginning of a repeating group. I doubt that we would want a repeating group as a first element of an outer repeating group. In your example, the inner repeating group is the only element. Why have an outer repeating group at all? If the answer is “to be FIX compliant”, then the design is still non-compliant because QuoteSetID(302) is missing. It can be set to “0” or “N/A” but there has to be something on the wire if you use tag=value, e.g. “|302=0”.
The new Simple Binary Encoding that was presented yesterday for the first time in the Global Technical Committee would allow you to set this field to a constant value in the meta-data and not have to send it on the wire. Hence, if the omission of QuoteSetID was for efficiency purposes, then the upcoming new binary encodings of FIX may be a solution going forward.
Regards,
Hanno.
Hi Scott,
I understand the requirement of first field being mandatory. The 35=b message structure is slightly modified in data dictionary to allow NoQuoteEntries as first field in NoQuoteSets. This is how one of our makers are sending the QuoteAck message, they send only NoQuoteEntries in NoQuoteSets.
Can we not have a group as first field in another group? I have not found anything related to this in fix spec. Is this is a valid message?
With Regards,
Srinivas
FIX does have the construct of a repeating group where the first field is the NumInGroup field of another repeating group. This is rare and only used when there is no other way to model the message. An example is the PartyRiskLimitsGrp component.
The issue with the question from Srinivas is that the QuoteSetAckGrp in the MsgType=b requires that QuoteSetID be the first field of that repeating group and must be present when NoQuoteSet > 0. This is clearly stated in the message definition. The implementation change described by Srinivas already violated this rule by not specifying the QuoteSetID field as defined in the message by FIX.
Srinivas, if you choose to make an exception for this market maker and allow the NoQuoteEntries to come immediately after the NoQuoteSets, then this is an exception per the original message design and the MassQuoteAck as modified would not be considered a compliant message. There is no rule in FIX that prevents a NumInGroup field followed by another NumInGroup field, and examples of approved components exists as I pointed out above.
Srinivas,
it is important to understand that the design of a FIX message using the tag=value syntax is not arbitrary. One of the rules is that you cannot omit the first element (a field or again a repeating group) of a repeating group. It has to be part of your message, even if you can only fill it with “N/A” or zero or something similar. In that sense the “slight modification” is a violation of tag=value design rules and standard parsers should reject such messages.
You ask about examples of repeating groups as first fields. I am not sure we actually have any. We have many where the first element is non-repeating component and the first field of this component becomes mandatory for the outer repeating group. However, I see no reason why it should not be valid to have a field NoXXX followed by NoYYY on the wire. I think we would try to avoid such constructs, i.e. a repeating group instance should be identified by one or more simple fields. These would be defined at the beginning of a repeating group. I doubt that we would want a repeating group as a first element of an outer repeating group. In your example, the inner repeating group is the only element. Why have an outer repeating group at all? If the answer is “to be FIX compliant”, then the design is still non-compliant because QuoteSetID(302) is missing. It can be set to “0” or “N/A” but there has to be something on the wire if you use tag=value, e.g. “|302=0”.
The new Simple Binary Encoding that was presented yesterday for the first time in the Global Technical Committee would allow you to set this field to a constant value in the meta-data and not have to send it on the wire. Hence, if the omission of QuoteSetID was for efficiency purposes, then the upcoming new binary encodings of FIX may be a solution going forward.
Regards,
Hanno.Hi Scott,
I understand the requirement of first field being mandatory. The 35=b message structure is slightly modified in data dictionary to allow NoQuoteEntries as first field in NoQuoteSets. This is how one of our makers are sending the QuoteAck message, they send only NoQuoteEntries in NoQuoteSets.
Can we not have a group as first field in another group? I have not found anything related to this in fix spec. Is this is a valid message?
With Regards,
Srinivas
Thank you Lisa for your reply. It is helpful.
FIX does have the construct of a repeating group where the first field is the NumInGroup field of another repeating group. This is rare and only used when there is no other way to model the message. An example is the PartyRiskLimitsGrp component.
The issue with the question from Srinivas is that the QuoteSetAckGrp in the MsgType=b requires that QuoteSetID be the first field of that repeating group and must be present when NoQuoteSet > 0. This is clearly stated in the message definition. The implementation change described by Srinivas already violated this rule by not specifying the QuoteSetID field as defined in the message by FIX.
Srinivas, if you choose to make an exception for this market maker and allow the NoQuoteEntries to come immediately after the NoQuoteSets, then this is an exception per the original message design and the MassQuoteAck as modified would not be considered a compliant message. There is no rule in FIX that prevents a NumInGroup field followed by another NumInGroup field, and examples of approved components exists as I pointed out above.
Srinivas,
it is important to understand that the design of a FIX message using the tag=value syntax is not arbitrary. One of the rules is that you cannot omit the first element (a field or again a repeating group) of a repeating group. It has to be part of your message, even if you can only fill it with “N/A” or zero or something similar. In that sense the “slight modification” is a violation of tag=value design rules and standard parsers should reject such messages.
You ask about examples of repeating groups as first fields. I am not sure we actually have any. We have many where the first element is non-repeating component and the first field of this component becomes mandatory for the outer repeating group. However, I see no reason why it should not be valid to have a field NoXXX followed by NoYYY on the wire. I think we would try to avoid such constructs, i.e. a repeating group instance should be identified by one or more simple fields. These would be defined at the beginning of a repeating group. I doubt that we would want a repeating group as a first element of an outer repeating group. In your example, the inner repeating group is the only element. Why have an outer repeating group at all? If the answer is “to be FIX compliant”, then the design is still non-compliant because QuoteSetID(302) is missing. It can be set to “0” or “N/A” but there has to be something on the wire if you use tag=value, e.g. “|302=0”.
The new Simple Binary Encoding that was presented yesterday for the first time in the Global Technical Committee would allow you to set this field to a constant value in the meta-data and not have to send it on the wire. Hence, if the omission of QuoteSetID was for efficiency purposes, then the upcoming new binary encodings of FIX may be a solution going forward.
Regards,
Hanno.Hi Scott,
I understand the requirement of first field being mandatory. The 35=b message structure is slightly modified in data dictionary to allow NoQuoteEntries as first field in NoQuoteSets. This is how one of our makers are sending the QuoteAck message, they send only NoQuoteEntries in NoQuoteSets.
Can we not have a group as first field in another group? I have not found anything related to this in fix spec. Is this is a valid message?
With Regards,
Srinivas