Market Data - Incremental Refresh (MsgType = X, FIXML = MarketDataInc)

The second Market Data (X) message format is used for incremental updates. Market Data Entries may have an MDEntryID (278) unique among all currently active Market Data Entries so they can be referenced for the purposes of deleting and changing them later. When changing a Market Data Entry, it may keep the same MDEntryID (278) , in which case only MDEntryID (278) would be populated, or the MDEntryID (278) may change, in which case MDEntryID (278) will contain the new ID, and MDEntryRefID (280) will contain the ID of the Market Data Entry being changed. An MDEntryID (278) can be reused within a day only if it has first been deleted.

Alternately, in the case of displaying the best quotes of Market Makers or Exchanges, and not orders in an order book, MDEntryID (278) can be omitted for simplification. In this case, a New Market Data Entry will replace the previous best quote for that side and symbol for the specified Market Maker or Exchange. Deletion of a Market Data Entry would not specify an MDEntryID (278) or MDRefID (280) , and would remove the most recent Market Data Entry for the specified symbol, side, and Market Maker or Exchange. A Change of a Market Data Entry would not specify an MDEntryID (278) or MDRefID (280) , and would replace the most recent Market Data Entry for the specified symbol, side, and Market Maker or Exchange.

The Market Data message for incremental updates may contain any combination of new, changed, or deleted Market Data Entries, for any combination of instruments, with any combination of trades, quotes, index values, open, close, settlement, high, low, and VWAP prices, so long as the maximum FIX message size is not exceeded. All of these types of Market Data Entries can be changed and deleted.

Adding, Changing, or Deleting Market Data Entries requires special consideration of the MDEntryPositionNo (290) field, if the sender wishes to specify it and the receiver wishes to process it. For example, assume ten bids for a security. Adding a bid with MDEntryPositionNo (290) = 4 requires the receiver to shift down other Market Data Entries, i.e. the Market Data Entry in the 4th display position will shift to the 5th, the 5th shifts to the 6th, etc. until the 10th shifts to the 11th. The sender must NOT send a modification of all MDEntries in the 4th through 10th positions just to update the MDEntryPositionNo (290) field; the recipient must infer the change. Similarly, deleting a Market Data Entry in the 7th position causes the 8th Market Data Entry to move into the 7th position, the 9th to shift into the 8th position, etc. A Change of the MDEntryPositionNo (290) field of a Market Data Entry causes the Market Data Entries lying between the old and new positions to shift. For instance, a Market Data Entry that occupied the 5th position is changed to the 8th position. This means that the Market Data Entry in the 6th position shifts up to the 5th position, the 7th position shifts to the 6th, and what was in the 8th position shifts into the 7th to make room for the changed Market Data Entry that is being moved into the 8th position.

Several techniques are employed to conserve bandwidth:

Tag Field Name FIXML Req'd Comments
<Standard Message Header> Y MsgType = X
262 MDReqID MDReqID N Conditionally required if this message is in response to a Market Data Request (V) .
268 NoMDEntries NoMDEntries Y Number of entries following.
=> 279 MDUpdateAction MDUpdateAction Y Must be first field in this repeating group.
=> 285 DeleteReason DeleteReason N If MDUpdateAction (279) = Delete(2), can be used to specify a reason for the deletion.
=> 269 MDEntryType MDEntryType C Conditionally required if MDUpdateAction (279) = New(0). Cannot be changed.
=> 278 MDEntryID MDEntryID N If specified, must be unique among currently active entries if MDUpdateAction (279) = New (0), must be the same as a previous MDEntryID (278) if MDUpdateAction (279) = Delete (2), and must be the same as a previous MDEntryID (278) if MDUpdateAction (279) = Change (1) and MDEntryRefID (280) is not specified, or must be unique among currently active entries if MDUpdateAction (279) = Change(1) and MDEntryRefID (280) is specified..
=> 280 MDEntryRefID MDEntryRefID C If MDUpdateAction (279) = New(0), for the first Market Data Entry in a message, either this field or a Symbol (55) must be specified. If MDUpdateAction (279) = Change(1), this must refer to a previous MDEntryID (278) .
=> 55 Symbol Symbol C Either Symbol (55) or MDEntryRefID (280) must be specified if MDUpdateAction (279) = New(0) for the first Market Data Entry in a message. For subsequent Market Data Entries where MDUpdateAction (279) = New(0), the default is the instrument used in the previous Market Data Entry if neither Symbol (55) nor MDEntryRefID (280) are specified, or in the case of options and futures, the previous instrument with changes specified in MaturityMonthYear (200) , MaturityDay (205) , PutOrCall (201) , StrikePrice (202) , OptAttribute (206) , and SecurityExchange (207) . May not be changed.
=> 65 SymbolSfx SymbolSfx N May not be changed.
=> 48 SecurityID SecurityID N May not be changed.
=> 22 IDSource IDSource N May not be changed.
=> 167 SecurityType SecurityType N Must be specified if a Future or Option. If a Future: Symbol (55) , SecurityType (167) , and MaturityMonthYear (200) are required. If an Option: Symbol (55) , SecurityType (167) , MaturityMonthYear (200) , PutOrCall (201) , and StrikePrice (202) are required.
=> 200 MaturityMonthYear MonthYear C Specifies the month and year of maturity. Required if MaturityDay (205) is specified. May not be changed.
=> 205 MaturityDay Day N Can be used in conjunction with MaturityMonthYear (200) to specify a particular maturity date. May not be changed.
=> 201 PutOrCall PutCall C For Options. May not be changed.
=> 202 StrikePrice StrikePx C For Options. May not be changed.
=> 206 OptAttribute OptAttribute N For Options. May not be changed.
=> 231 ContractMultiplier ContractMultiplier N For Fixed Income, Convertible Bonds, Derivatives, etc. Note: If used, quantities should be expressed in the "nominal" (e.g. contracts vs. shares) amount.
=> 223 CouponRate CouponRate N For Fixed Income.
=> 207 SecurityExchange SecurityExch N Can be used to identify the security. May not be changed.
=> 106 Issuer Issuer N May not be changed.
=> 348 EncodedIssuerLen EncodedIssuerLen C Must be set if EncodedIssuer (349) field is specified and must immediately precede it.
=> 349 EncodedIssuer EncodedIssuer C Encoded (non-ASCII characters) representation of the Issuer (106) field in the encoded format specified via the MessageEncoding (347) field.
=> 107 SecurityDesc SecurityDesc N May not be changed.
=> 350 EncodedSecurityDescLen EncodedSecDescLen C Must be set if EncodedSecurityDesc (351) field is specified and must immediately precede it.
=> 351 EncodedSecurityDesc EncodedSecDesc C Encoded (non-ASCII characters) representation of the SecurityDesc (107) field in the encoded format specified via the MessageEncoding (347) field.
=> 291 FinancialStatus FinancialStatus N
=> 292 CorporateAction CorporateAction N
=> 270 MDEntryPx MDEntryPx C Conditionally required when MDUpdateAction (279) = New(0).
=> 15 Currency Currency N Can be used to specify the currency of the quoted price
=> 271 MDEntrySize MDEntrySize C Conditionally required when MDUpdateAction (279) = New(0) and MDEntryType (269) = Bid(0), Offer(1), or Trade(2).
=> 272 MDEntryDate MDEntryDate N
=> 273 MDEntryTime MDEntryTime N
=> 274 TickDirection TickDirection N
=> 275 MDMkt MDMkt N Market posting quote / trade. Valid values: See Appendix C
=> 336 TradingSessionID TrdSesID N
=> 276 QuoteCondition QuoteCondition N Space-delimited list of conditions describing a quote.
=> 277 TradeCondition TradeCondition N Space-delimited list of conditions describing a trade
=> 282 MDEntryOriginator MDEntryOriginator N
=> 283 LocationID MMLocationID N
=> 284 DeskID DeskID N
=> 286 OpenCloseSettleFlag OpenCloseSettFlag N Used if MDEntryType (269) = Opening Price(4), Closing Price(5), or Settlement Price(6).
=> 59 TimeInForce TimeInForce N For optional use when this Bid or Offer represents an order
=> 432 ExpireDate ExpireDate C For optional use when this Bid or Offer represents an order. ExpireDate (432) and ExpireTime (126) cannot both be specified in one Market Data Entry.
=> 126 ExpireTime ExpireTime C For optional use when this Bid or Offer represents an order. ExpireDate (432) and ExpireTime (126) cannot both be specified in one Market Data Entry.
=> 110 MinQty MinQty N For optional use when this Bid or Offer represents an order
=> 18 ExecInst ExecInst N Can contain multiple instructions, space delimited.
=> 287 SellerDays SellerDays N
=> 37 OrderID OrderID N For optional use when this Bid, Offer, or Trade represents an order
=> 299 QuoteEntryID QuoteEntryID N For optional use when this Bid, Offer, or Trade represents a quote
=> 288 MDEntryBuyer MDEntryBuyer N For optional use in reporting Trades
=> 289 MDEntrySeller MDEntrySeller N For optional use in reporting Trades
=> 346 NumberOfOrders MDNoOrders N In an Aggregated Book, used to show how many individual orders make up an MDEntry
=> 290 MDEntryPositionNo MDEntryPositionNo N Display position of a bid or offer, numbered from most competitive to least competitive, per market side, beginning with 1
=> 387 TotalVolumeTraded TotVolTraded N Total volume traded in this trading session for this security.
=> 58 Text Text N Text to describe the Market Data Entry. Part of repeating group.
=> 354 EncodedTextLen EncodedTextLen C Must be set if EncodedText (355) field is specified and must immediately precede it.
=> 355 EncodedText EncodedText C Encoded (non-ASCII characters) representation of the Text (58) field in the encoded format specified via the MessageEncoding (347) field.
<Standard Message Trailer> Y