Log in

FIX 4.1

FIX 4.1 includes major changes for order handling, allocations, settlement instructions, futures and options support, and expanded forex trading capability. Order handling changes include the exclusive use of the Cancel/Replace message to reduce quantity (partial cancel). Very few changes were made to the session level. Potentially the most significant is that fact that all ID fields are now of a character data type (see narrative below).

Changes in the version 4.1 include:

Session Level

  • Added a new field ResetSeqNumFlag to the Logon message. Described the specific procedure which should be used when using this feature in the “Logon” portion of the “Session Protocol” section.
  • Clarified the description of the Sequence Reset message to highlight the language which specifies that the NewSeqNo contains the next number to be transmitted.
  • Clarified the description of the “Message Recovery” section regarding handling multiple Resend Requests in a row and Sequence Reset - Gap Fill potential gotchas. Clarified that SeqReset-GapFill and SeqReset-Reset should be sent with PossDupFlag=Y when responding to a ResendRequest. Added the fact that one can check the MsgSeqNum of the SeqReset-GapFill to help avoid one of the gotchas.
  • Clarified and explicitly stated in the “Message Recovery” section that the Reject message is the only administrative message which can be resent.
  • Highlighted in the “Message Format” section the fact that FIX message fields are not positional and explicitly noted the exceptions.
  • Clarified the description of the “Logout” portion of the “Session Protocol” section to recommend that one send a TestRequest to force a Heartbeat which should help ensure that there are no sequence number gaps prior to sending the Logout message.
  • Highlighted the fact that all fields including those of data type data must have their value delimited by the field delimiter (SOH) character.
  • Added the following statement: “It should be noted that if an “unreliable” or non-stream protocol is used, the Logon, Logout, and ResendRequest message processing is particularly susceptible to unordered delivery and/or message loss.” to the “Introduction” section following the sentence “FIX was written to be independent of any specific communications protocol...”
  • Clarified the “is set” references to PossDupFlag and PossResend within the “Message header” section to explicitly specify “is set to Y”.

Overall

  • Made all business level ID fields type char. This changed the data type of the following fields: AdvID, AdvRefID, ExecID, ExecRefID, IOIid, IOIRefID, AllocID, RefAllocID from int to char. The field reference section has noted this in bold for each of these fields. There was significant debate regarding the best way to accomplish this change. A majority vote by the FIX Technical Committee determined that the existing field tags and names should remain and the data type in the field reference should simply be changed starting in FIX 4.1 and beyond. These fields should continue to be used as int in versions prior to 4.1
  • Added four new optional fields to the Standard Header: SenderLocationID, TargetLocationID, OnBehalfOfLocationID, and DeliverToLocationID which can allow firms to specify a geographic location and/or desk associated with business messages in addition to the CompID and SubID values
  • Added SymbolSfx, IDSource, SecurityID, Issuer, and SecurityDesc to all messages containing Symbol. OrdStatusRequest had IDSource and SecurityID added. News, Email, and Don’t Know Trade had SymbolSfx, IDSource, SecurityID, Issuer, and SecurityDesc added
  • Replaced references to “MsgSeqNo” with “MsgSeqNum” throughout the spec
  • Clarified the usage of the Commission field such that if CommType is percentage, Commission should be represented as a decimal (i.e. .05 for 5%)
  • Added a Glossary of Business Terms to the appendix. The FIX Web Site’s Discussion area will have a thread devoted to identifying terms which need to be defined and providing definitions
  • Added new field SecondaryOrderID to the ExecutionRpt and OrderCancelReject. This field can be optionally used by the party accepting the order to provide the order id used by an exchange or executing system
  • Added a cautionary note regarding the Text field in the Field Reference concerning the fact that it does not have a specified maximum length
  • Added two new enumerations to the Side field: Undisclosed for IOIs and Cross for orders where counterparty is an exchange
  • Corrected several spelling mistakes
  • Noted in Field Definitions section and both of the field cross-references that SendingDate and CxlType are no longer used. Noted that tag 101 does not have a field defined
  • Added for consistency in the Field Definitions section, valid values for “price” fields: AvgPx, LastPx, BidPx, OfferPx, and PrevClosePx and for “shares” fields: LastShares, AllocShares, CxlQty, MinQty, BidSize, and OfferSize
  • In order to support symbol identification for Futures and Options, added SecurityType and six new fields: MaturityMonthDate, MaturityDay, PutOrCall, StrikePrice, OptAttribute, and SecurityExchange to all messages containing Symbol. Futures now require SecurityType=”FUT”, Symbol, and MaturityMonthDate. Options now require SecurityType=”OPT”, Symbol, MaturityMonthDate, PutOrCall, and StrikePrice
  • Noted in Field Definitions section description for MsgType that when it is used for User Defined messages, the format should be U1, U2, etc.
  • Added two new data types used in the field reference. “month-year” represents a month and year combination as a char in YYYYMM format. “day-of-month” represents a day within a month as an int 1-31. Used to handle cases in which day of the month may or may not be specified

Quote and QuoteRequest

  • Made BidPx on the Quote message optional. Clarified the description to indicate that either BidPx, OfferPx, or both must be specified
  • Added TransactTime to the Quote message
  • Added OrderQtyType to the QuoteRequest (see Orders, Execution Reports, and DK’s changes listed below)
  • The following were added to better support foreign exchange (F/X) trading:
  • Added FutSettDate to the Quote and QuoteRequest messages to allow one to request/send a quote for a particular value date when requesting F/X quotes
  • Added two new fields, OrderQty2 (the qty in the future) and FutSettDate2 (the value date in the future), and OrdType to the Quote and QuoteRequest messages to allow one to request/send a quote for “Forex - Swap”. Side should be the Side of the FutSettDate2 transaction
  • Added new fields BidSpotRate, BidForwardPoints, OfferSpotRate, and OfferForwardPoints to the Quote message
  • Specified that for F/X trading BidPx and OfferPx within the Quote message should represent the “all-in” (aka “outright” aka “contract”) rate

IOIs, Advertisements, News, and Email

  • Added NoRelatedSym (required) to News and Email messages
  • Added a new required field Subject and new optional field EmailThreadID to the Email message
  • Added a new required field Headline to the News message
  • Added a new optional field URLLink to the IOI, Advertisement, and News messages
  • Added two new enumerations for IDSource: “ISO Currency Code” and “ISO Country Code” which can be used for News and Email messages
  • Added TradeDate to the Advertisement message
  • Added TransactTime to the IOI message
  • Added “At the midpoint” and “Pre-open” as enumerations to the IOIQualifier field. Changed the language in the field reference for enumeration “Q” from “Current quote” to “At the market (previously called current quote)”
  • Added new field NoIOIQualifiers to the IOI message. Made IOIQualifier a repeating group to allow for multiple values
  • Added LastMkt to the Advertisement message

Orders, Execution Reports, and DK’s

  • Clarified that the Order Cancel/Replace Request can also be considered an Order Modification Request to reduce, increase, or change the parameters of an open order and that it can be used to reopen a filled order by increasing OrderQty. Removed the “It is recommended…” wording. Clarified that Cancel Reject should specify both the ClOrdID and OrigClOrdID values provided on the Cancel/Replace Request. Defined OrderQty as “Total Intended Order Quantity”
  • Modified the description of the Order Cancel Request message removing the ability to use it to partially cancel (reduce) an order and noting that Order Cancel/Replace Request should be used instead
  • Removed the CxlType field from the Order Cancel Request
  • Added new field LeavesQty to ExecutionRpt making the implicit LeavesQty = OrderQty - CumQty defunct. Modified the ExecutionRpt description when referring to “CumQty and AvgPx” to include LeavesQty as well
  • Clarified that ExecID must be unique for the day or the life of the order if the order spans more than one day
  • Added new enumeration to ExecInst value ‘U’ to denote customer display instruction in order to satisfy SEC Rule 11Ac1-1/4
  • In order to support brokers who allow their customers to submit an order with a “dollar quantity” vs. share quantity, a new field CashOrderQty was added to the New Order - Single, New Order - List, and Order Cancel/Replace Request messages. These messages conditionally require either OrderQty or CashOrderQty to be specified. The broker is responsible for converting and computing the CashOrderQty amount into a specific OrderQty number of shares at the time of accepting the order. The share quantities are used for all subsequent messages
  • Added “Unknown Order” and “Duplicate Order” to OrdRejReason code (to be used in conjunction with OrdStatus of Rejected) to reject a Status Request due to an unmatched order.
  • Revised order status progression for clarity. A new required field ExecType to the ExecutionRpt with the same possible values as OrdStatus. Noted in the description of the ExecutionRpt that ExecType describes the specific ExecutionRpt (i.e. Pending Cancel) while OrdStatus will always identify the current order status (i.e. Partially Filled). The Order State Change Matrix in the appendix has been updated and addresses reducing order quantity and some more complicated scenarios
  • The description of the ExecutionRpt message now includes a list of OrdStatus value precedence
  • Added OrigClOrdID and OrdStatus to Order Cancel Reject. Clarified its definition to specify that it refers to the previous order NOT the initial order for the day when canceling or replacing an order multiple times
  • Clarified the DontKnowTrade message indicating that LastShares and LastPx are only required if they were specified on the ExecutionRpt (i.e. not required on the ExecutionRpt if ExecTransType=Status)
  • Removed NoMiscFees, MiscFees repeating group, and NetMoney from the ExecutionRpt message as it will now be provided via the Allocation message with AllocTransTyp=”Calculated” sent from the broker to institution
  • Replaced narrative details re: OrdStatus=”Calculated” to reference “report post-trade calculations” vs. “report miscellaneous fees”
  • OrdStatus=”Calculated” can still be used to provide the Commission or SettlCurrency related details
  • Added SettlCurrFxRate and SettlCurrFxRateCalc to the ExecutionRpt message (consistent with add to Allocation message)
  • The following were added to better support foreign exchange (F/X) trading:
  • Added “Netting” as an enumeration to the ExecInst field
  • Replaced the OrdType field enumeration for “Forex” with “Forex - Market”. Added OrdType field enumerations: “Forex - Limit”, “Forex - Swap”, and “Forex - Previously Quoted”
  • Added OrderQty2 (the qty in the future) and FutSettDate2 (the value date in the future) to the New Order - Single, Order Cancel/Replace Request, and New Order - List messages to allow one to send an OrdType = “Forex - Swap”. Side should be the Side of the FutSettDate2 transaction
  • Added two new fields to the ExecutionRpt message: LastSpotRate and LastForwardPoints
  • Specified that for F/X trading the LastPx field in the ExecutionRpt should represent the “all-in” (aka “outright” aka “contract”) rate
  • Specified that for F/X trading the Price field in the New Order - Single, New Order - List, Order Cancel/Replace Request, and Order Cancel Request messages should represent the “all-in” (aka “outright” aka “contract”) rate
  • Added LeavesQty as a required field to the List Status message
  • Modified the description of OrderQty within the Order Cancel Request removing reference to CxlType field which has been removed. It now states that OrderQty = LeavesQty + CumQty
  • Modified the description of the ExecutionRpt message noting the general rule of OrderQty = CumQty
  • LeavesQty. Noted that there can be exceptions to this rule when ExecType and/or OrdStatus are Canceled, DoneForTheDay, Expired, Calculated, or Rejected in which case the order is no longer active and LeavesQty could be 0
  • Modified the description of the Order Cancel Reject message clarifying that it should specify both the ClOrdID and OrigClOrdID values provided on the Cancel/Replace Request
  • Modified the description of the use of ExecTransType=Correct in the ExecutionRpt message to clarify what the value of ExecRefID should be if a single execution is corrected multiple times
  • Noted in New Order - Single, New Order -List, and Order Cancel/Replace Request that StopPx is required if OrdType = “Stop” or OrdType = ”Stop limit”
  • In order to support orders for Futures and Options, added OpenClose and two new fields: CoveredOrUncovered and CustomerOrFirm to the New Order - Single, Order Cancel/Replace Request, and New Order - List messages
  • Added missing enumerations: E, O, P, R, S, and T to the Rule80A field’s valid values
  • Modified the description of the ExecutionRpt message stating that ExecutionRpt messages used to communicate state changes should be sent separately and should not be used to also convey new partial fill details (i.e. do not report a partial fill or filled in a Done for the Day, Reject, etc.)
  • Added new field, MaxShow, to the New Order - Single, Order Cancel/Replace Request, and New Order - List messages which controls the order quantity shown to other customers (i.e. via an IOI)
  • Added LocateReqd to the Order Cancel/Replace Request message
  • Modified the list of fields which can be changed on an Order Cancel/Replace Request to include: StopPx, CashOrderQty, OrderQty2, OpenClose, CoveredOrUncovered, Side (i.e. sell to sell plus), MaxShow, and LocateReqd. Corrected the inconsistency in wording regarding the ability for HandlInst to change
  • Modified the description for New Order - Single to specify that TimeInForce of ImmediateOrCancel and OrdType of Previously Indicated (or Previously Quoted) should be used when responding to an IOI (or Quote) from an ECN or exchange and one wishes to “take” the IOI (or Quote) if still available and not be displayed on the book otherwise
  • Modified the description for the Price field in New Order - Single, Order Cancel/Replace Request, and New Order - List messages to indicate that it can be used to specify a limit price for a pegged order, previously indicated, etc.
  • Added new field, PegDifference, to the New Order - Single, ExecutionRpt, Order Cancel/Replace Request, and New Order - List messages which specifies the price difference for a pegged order
  • Modified the description for ExecutionRpt noting that while it is necessary for the ClOrdID to change and be unique, the broker’s OrderID field does not necessarily have to change as a result of the Cancel/Replace request
  • Noted in the ExecutionRpt message that Price, StopPx, and PegLimit are required if specified on the order

Allocation and AllocationACK

  • Considerable revisions have been made to the Allocation message in order to properly support foreign trading requirements and other overall enhancements
  • Modified AllocTransType to include enumerations for “Preliminary (without MiscFees and NetMoney)” and “Calculated (with MiscFees and NetMoney)”
  • Modified MiscFeeTyp to include enumeration for “Markup” in the event the broker is acting as principal on a trade
  • Added a new field AllocAvgPx to AllocAccount repeating group to provide ability to specify different average prices for each account. Required for US domestic as well as foreign trading
  • Added a new field AllocNetMoney to the AllocAccount repeating group
  • Moved SettlCurrAmount and SettlCurrency from the “overall” section to within the AllocAccount repeating group
  • Added two new fields, SettlCurrFxRate and SettlCurrFxRateCalc, to the AllocAccount repeating group to go along with SettlCurrAmount and SettlCurrency
  • Added a new field SettlInstMode to the AllocAccount repeating group to indicate the type of Settlement Instructions which will be provided via the Settlement Instructions message
  • Added two new fields, NumDaysInterest and AccruedInterestRate, to the “overall” section to support convertible bonds
  • Added new field AccruedInterestAmt to the AllocAccount repeating group to support convertible bonds
  • Moved NoMiscFees and MiscFees repeating group from the “overall” section to within the AllocAccount repeating group
  • Removed the DlvyInst repeating group. Added BrokerOfCredit and a new field AllocText to the AllocAccount section to support communicating step-out details (ProcessCode indicates this)
  • Moved LastMkt from within the Execs repeating group to the “overall” level
  • Modified the narrative details for the message to include:
  • “In addition, the allocation record can be sent by the broker to communicate fees and other details which can only be computed once the sub-account breakdowns are known
  • That “preliminary” and “calculated” are now valid AllocTransTyp values
  • Created a diagram to show the typical flow for US domestic trading (without MiscFees)
  • Created a diagram to show the typical flow for international trading (with MiscFees)
  • Designed such that the institution accepts or rejects the “Computed” Allocation via the AllocationAck message which is consistent with current flow within various ETC systems such as: Global OASYS, Crest, DTC, etc.
  • Added LastCapacity to the Execs repeating group in order to support the SFA’s “Conduct of Business” requirements for trade confirmations
  • Allow AllocTransTyp=Cancel to appear without the currently required Orders and AllocAccount sections
  • The following were added to better support foreign exchange (F/X) trading:
  • Specified that for F/X trading the AvgPx and AllocAvgPx fields in the Allocation message should represent the “all-in” (aka “outright” aka “contract”) rate
  • Added two new optional fields to the Allocation Message: AllocLinkID and AllocLinkType which can be used to link two different Allocation messages (each with unique AllocID) together, i.e. for F/X “Netting” or “Swaps”
  • Added two new fields, NotifyBrokerOfCredit and AllocHandlInst, to the AllocAccount repeating group in the Allocation message

Settlement Instructions

  • Added a new Settlement Instructions message in an attempt to support communicating Settlement Instructions in a vendor-neutral manner
  • Includes the capability to support “standing” instructions as well as those for a specific allocation and allocation account (associate with an actual trade)
  • Supports worldwide equities:
  • Supports settlement at a depository or settlement at a country via local agent banks/custodians
  • Supports different details for the settlement of the security vs. the settlement of the cash
  • Remains consistent with existing worldwide initiatives such as the IUG Working Group (now a subcommittee of ISITC) in Europe
  • Supports Settlement Instructions sent from:
  • Broker to Institution
  • Institution to Broker
  • Broker to a third-party (i.e. a standing instructions database, depository, custodian bank, etc.)
  • Institution to a third-party (i.e. a standing instructions database, depository, custodian bank, etc.)
  • Serves to bridge the gap between the information brokers and institutions transmit/receive via F.I.X. and the information both need to support “back-office” needs (i.e. transmitted via ISITC to/from agent/custodian banks)

Appendix and App Notes

  • Updated Appendix C - Reuters Exchange Mnemonics starting a list to specify values (used by LastMkt, ExDestination, and SecurityExchange) for exchanges which either do not have a 1-2 character Reuters abbreviation (i.e. Chicago Mercantile Exchange ) or would have one which collides with an existing (i.e. London Stock Exchange and LIFFE both use L as Reuters abbreviation). These and other Options Exchanges have been added with a numeric value starting from 0
  • Updated Appendix D - Order State Change Matrices
  • Added Appendix E - London SETS Appendix which specifies how the OrdType, TimeInForce, and ExpireTime fields should be used
  • Added Appendix F - Settlement Instruction Field Usage Matrix