NoLegs (FIX tag 555)

NumInGroupFIX 4.4FIX 5.0 SP2group counter

NoLegs (tag 555) is a NumInGroup field defined in FIX 4.4 and FIX 5.0 SP2. It appears in 50 message types and is required in 2 of them. Its datatype is NumInGroup, which makes it a repeating-group counter: its value is the number of entries that follow, not a quantity in its own right.

At a glance

Tag
555
Name
NoLegs
Datatype
NumInGroup (int)
Dialects
FIX 4.4 and FIX 5.0 SP2
Messages
50

What the specification says

Number of InstrumentLeg repeating group instances.

Descriptions are quoted from the FIX Orchestra sources under the Apache 2.0 licence.

A real message using tag 555

ExecutionReport · FIX 4.4
TagFieldWire valueMeaning
8BeginStringFIX.4.4
9BodyLength163
35MsgType8Execution Report
49SenderCompIDBOARTEAM
56TargetCompIDCOUNTERPARTY
34MsgSeqNum2
52SendingTime20240101-12:00:00.000
37OrderIDORD-10042
17ExecIDEXEC-88117
150ExecType0New
39OrdStatus0New
54Side1Buy
151LeavesQty0
14CumQty1000000
6AvgPx1.09215
555NoLegs2 entries2repeating group
600LegSymbolEXAMPLE
600LegSymbolEXAMPLE
10CheckSum235
Edit and decode it yourself

Shown with | separators for readability. On the wire FIX uses SOH (0x01), an invisible control byte — and because BodyLength and CheckSum are computed over the actual bytes, the two forms have different checksums. Both are valid and both decode here.

Open in the full decoder →

Generated from the FIX 4.4 dictionary and verified at build time: it parses and validates with no issues. Open the decoder to try your own message.

Where tag 555 appears

Requiredness is a property of the message, not of the field: the same tag can be optional in one message and conditionally required in another.

MessageMsgTypeFIX 4.4FIX 5.0 SP2Where in the message
Advertisement7OptionalOptionalinside the InstrmtLegGrp component
AllocationInstructionJOptionalOptionalinside the InstrmtLegGrp component
AllocationInstructionAlertBMOptionalinside the InstrmtLegGrp component
AllocationReportASOptionalOptionalinside the InstrmtLegGrp component
AssignmentReportAWOptionalOptionalinside the InstrmtLegGrp component
CollateralAssignmentAYOptionalOptionalinside the InstrmtLegGrp component
CollateralInquiryBBOptionalOptionalinside the InstrmtLegGrp component
CollateralInquiryAckBGOptionalOptionalinside the InstrmtLegGrp component
CollateralReportBAOptionalOptionalinside the InstrmtLegGrp component
CollateralRequestAXOptionalOptionalinside the InstrmtLegGrp component
CollateralResponseAZOptionalOptionalinside the InstrmtLegGrp component
ConfirmationAKOptionalOptionalinside the InstrmtLegGrp component
CrossOrderCancelReplaceRequesttOptionalOptionalinside the InstrmtLegGrp component
CrossOrderCancelRequestuOptionalOptionalinside the InstrmtLegGrp component
DerivativeSecurityListAAOptionalOptionalinside RelSymDerivSecGrp › InstrmtLegGrp
DerivativeSecurityListUpdateReportBROptionalinside RelSymDerivSecUpdGrp › InstrmtLegGrp
DontKnowTradeQOptionalOptionalinside the InstrmtLegGrp component
EmailCOptionalOptionalinside the InstrmtLegGrp component
ExecutionAcknowledgementBNOptionalinside the InstrmtLegGrp component
ExecutionReport8OptionalOptionalinside the InstrmtLegExecGrp component
IOI6OptionalOptionalinside the InstrmtLegIOIGrp component
MarketDataIncrementalRefreshXOptionalOptionalinside MDIncGrp › InstrmtLegGrp
MarketDataRequestVOptionalOptionalinside InstrmtMDReqGrp › InstrmtLegGrp
MarketDataSnapshotFullRefreshWOptionalOptionalinside the InstrmtLegGrp component
MassQuoteiOptionalOptionalinside QuotSetGrp › QuotEntryGrp › InstrmtLegGrp
MassQuoteAcknowledgementbOptionalOptionalinside QuotSetAckGrp › QuotEntryAckGrp › InstrmtLegGrp
MultilegOrderCancelReplaceACRequiredRequiredinside the LegOrdGrp component
NewOrderCrosssOptionalOptionalinside the InstrmtLegGrp component
NewOrderMultilegABRequiredRequiredinside the LegOrdGrp component
NewsBOptionalOptionalinside the InstrmtLegGrp component
PositionMaintenanceReportAMOptionalOptionalinside the InstrmtLegGrp component
PositionMaintenanceRequestALOptionalOptionalinside the InstrmtLegGrp component
PositionReportAPOptionalOptionalinside the InstrmtLegGrp component
QuoteSOptionalOptionalinside the LegQuotGrp component
QuoteCancelZOptionalOptionalinside QuotCxlEntriesGrp › InstrmtLegGrp
QuoteRequestROptionalOptionalinside QuotReqGrp › QuotReqLegsGrp
QuoteRequestRejectAGOptionalOptionalinside QuotReqRjctGrp › QuotReqLegsGrp
QuoteResponseAJOptionalOptionalinside the LegQuotGrp component
QuoteStatusReportAIOptionalOptionalinside the LegQuotStatGrp component
QuoteStatusRequestaOptionalOptionalinside the InstrmtLegGrp component
RFQRequestAHOptionalOptionalinside RFQReqGrp › InstrmtLegGrp
RequestForPositionsANOptionalOptionalinside the InstrmtLegGrp component
RequestForPositionsAckAOOptionalOptionalinside the InstrmtLegGrp component
SecurityDefinitiondOptionalOptionalinside the InstrmtLegGrp component
SecurityDefinitionRequestcOptionalOptionalinside the InstrmtLegGrp component
SecurityDefinitionUpdateReportBPOptionalinside the InstrmtLegGrp component
SecurityListyOptionalOptionalinside SecListGrp › InstrmtLegSecListGrp
SecurityListRequestxOptionalOptionalinside the InstrmtLegGrp component
SecurityListUpdateReportBKOptionalinside SecLstUpdRelSymGrp › SecLstUpdRelSymsLegGrp
SecurityStatusfOptionalOptionalinside the InstrmtLegGrp component
SecurityStatusRequesteOptionalOptionalinside the InstrmtLegGrp component
TradeCaptureReportAEOptionalOptionalinside the TrdInstrmtLegGrp component
TradeCaptureReportAckAROptionalOptionalinside the TrdInstrmtLegGrp component
TradeCaptureReportRequestADOptionalOptionalinside the InstrmtLegGrp component
TradeCaptureReportRequestAckAQOptionalOptionalinside the InstrmtLegGrp component

Wire format

The number of entries in the repeating group that follows. The next field on the wire is the group's delimiter tag. @boarteam/fix parses the value as a number and reports parse/invalid-int when it does not lex as one; the raw string is kept either way.

Read tag 555 in TypeScript

decode.tsts
import { createFixEngine } from "@boarteam/fix";import { dictionary } from "@boarteam/fix-dict-fix44";const fix = createFixEngine(dictionary);const { message, issues } = fix.parse(raw);// NoLegs is a group counter, so the entries live on message.groups —// NOT on message.fields. message.fields[555] is undefined.const entries = message.groups[555] ?? [];for (const entry of entries) {  // entry.fields is keyed by tag; entry.groups holds nested groups}

Other NumInGroup fields

Decode this in your own code

The same engine that produced the decoded example above is an Apache-2.0 npm package with zero runtime dependencies. It runs in Node and in the browser, and parse() returns problems as data instead of throwing.

npm i @boarteam/fix @boarteam/fix-dict-fix44