Indexes

Message Layouts
Session
PreTrade
Trade
PostTrade

  • Documentation

  • Financial Information Exchange Protocol

    Version: 4.0
    Date: January 10, 1997


    Table of Contents


    Back to top ↑

    DISCLAIMER

    THE INFORMATION CONTAINED HEREIN AND THE FINANCIAL INFORMATION EXCHANGE PROTOCOL (COLLECTIVELY, THE "FIX PROTOCOL") ARE PROVIDED "AS IS" AND NO PERSON OR ENTITY ASSOCIATED WITH THE FIX PROTOCOL MAKES ANY REPRESENTATION OR WARRANTY, EXPRESS OR IMPLIED, AS TO THE FIX PROTOCOL (OR THE RESULTS TO BE OBTAINED BY THE USE THEREOF) OR ANY OTHER MATTER AND EACH SUCH PERSON AND ENTITY SPECIFICALLY DISCLAIMS ANY WARRANTY OF ORIGINALITY, ACCURACY, COMPLETENESS, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. SUCH PERSONS AND ENTITIES DO NOT WARRANT THAT THE FIX PROTOCOL WILL CONFORM TO ANY DESCRIPTION THEREOF OR BE FREE OF ERRORS. THE ENTIRE RISK OF ANY USE OF THE FIX PROTOCOL IS ASSUMED BY THE USER.

    NO PERSON OR ENTITY ASSOCIATED WITH THE FIX PROTOCOL SHALL HAVE ANY LIABILITY FOR DAMAGES OF ANY KIND ARISING IN ANY MANNER OUT OF OR IN CONNECTION WITH ANY USER'S USE OF (OR ANY INABILITY TO USE) THE FIX PROTOCOL, WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL OR CONSEQUENTIAL (INCLUDING, WITHOUT LIMITATION, LOSS OF DATA, LOSS OF USE, CLAIMS OF THIRD PARTIES OR LOST PROFITS OR REVENUES OR OTHER ECONOMIC LOSS), WHETHER IN TORT (INCLUDING NEGLIGENCE AND STRICT LIABILITY), CONTRACT OR OTHERWISE, WHETHER OR NOT ANY SUCH PERSON OR ENTITY HAS BEEN ADVISED OF, OR OTHERWISE MIGHT HAVE ANTICIPATED THE POSSIBILITY OF, SUCH DAMAGES.

    No proprietary or ownership interest of any kind is granted with respect to the FIX Protocol (or any rights therein).


    Back to top ↑

    Preface

    The Financial Interface eXchange (FIX) effort was initiated in 1992 by a group of institutions and brokers interested in streamlining their trading processes. These firms felt that they, and the industry as a whole, could benefit from efficiencies derived through the electronic communication of indications, orders and executions. The result is FIX, an open message standard controlled by no single entity, that can be structured to match the business requirements of each firm. The benefits are:

    • From the business flow perspective, FIX provides institutions and brokers a means of reducing the clutter of unnecessary telephone calls and scraps of paper, and facilitates targeting high quality information to specific individuals.

    • For technologists, FIX provides an open standard that leverages the development effort so that they can efficiently create links with a wide range of counter-parties.

    • For vendors, FIX provides ready access to the industry, with the incumbent reduction in marketing effort and increase in potential client base.

    Openness has been the key to FIX' success. For that reason, while encouraging vendors to participate with the standard, FIX has remained vendor neutral. Similarly, FIX avoids over-standardization. It does not demand a single type of carrier (e.g., it will work with leased lines, frame relay, Internet, etc.), nor a single security protocol. It leaves many of these decisions to the individual firms that are using it. We do expect that, over time, the rules of engagement in these non-standardized areas will converge as technologies mature.

    FIX is now used by a variety of firms and vendors. It has clearly emerged as the inter-firm messaging protocol of choice. Periodic Technical Committee meetings are held to discuss modification of the specification and are open for all to attend. Those interested in providing input to the protocol are encouraged to contact the Technical Committee Chairpersons, Bob Lamoureux, Fidelity Management and Research Company, 617-563-6648 (blam@fmrco.com) or Chris Morstatt, Salomon Brothers Inc, 212-783-2865 (cmorstatt@sbi.com). Technical Committee meetings are announced via email and on the WWW, go to http://world.std.com/~fix for details.

    We look forward to your participation.

    The FIX Committee

    December, 1996

    Alliance Capital ManagementMorgan Stanley & Co.
    American Century InvestmentsPaine Webber
    CS First BostonPutnam Investments
    Fidelity Capital MarketsSalomon Brothers Inc
    Fidelity Management and ResearchScudder, Stevens and Clark, Inc
    Goldman Sachs & Co.State Street Global Advisors

    Back to top ↑

    Release Notes

    To:FIX User Community
    From:Christopher Morstatt
    Salomon Brothers Inc
    cmorstatt@sbi.com
    Date:January 13, 1996
    Subject:FIX Protocol 4.0 Release Notes

    A draft of the FIX Protocol specification, Version 4.0, is now available. This version addresses changes requested since the publication of Version 3.0 on September 27, 1995. The document, and these release notes, are available on the FIX WWW Page at http://world.std.com/~fix.

    Major changes in FIX 4.0 include an overhaul of the session layer, expanded allocation functionality, quoting, forex trading and the inclusion of data elements related to cross-border trading.

    Changes in the 4.0 draft release include:

    1. A major overhaul of the session layer has been reflected in this release. The changes include:

      • All messages now increment sequence number
      • Some administrative messages are not resent, they are replaced by the Sequence Reset - Gap Fill message
      • The sequences of Logon and Logout have been formalized
      • The use of the Reject message has been clarified. Reject messages should be used only when properly formed and validated (i.e. valid CheckSum and BodyLength) messages have invalid or missing required fields which make it impossible to pass through to the application level for an application reject. RefSeqNo is now a required field.
    2. All time and date fields have been modified. The year portion of the date field has been expanded to four characters, YYYYMMDD, and the time field now includes an imbedded date, YYYYMMDD-HH:MM:SS. Defined new data types date and time.

    3. A new field has been added to the header, OrigSendTime(122). This field is conditionally required for resent messages.

    4. Four new fields have been added to the header, OnBehalfOfCompID(115), OnBehalfOfSubID(116), DeliverToCompID (128) and DeliverToSubID(129) to be used when delivering messages via third parties.

    5. Additional enumerations have been added to the EncryptMethod(98) field.

    6. The range of user defined field tags (MsgType) has been increased to include 5000-9999.

    7. A new field, LocateReqd(114) has been added to the order messages as conditionally required for short sell orders.

    8. The list of valid currency codes in Appendix A has been removed and replaced with a reference to the ISO secretariat responsible for maintaining the current list.

    9. A new message, Don't Know Trade (DK) has been added to the protocol. This message is used to reject an execution message.

    10. The field definitions of ClOrdID(11), OrderID(37), ListID(66) and ExecID(17) have been clarified to emphasize uniqueness.

    11. Two new messages Quote Request and Quote have been defined to provide for quoting functionality. The messages address both securities and forex quotes. In conjunction with the quote, a new OrdType, Previously Quoted, has been defined in the order message.

    12. The following changes were made to support multi-day orders:

      • Added new enumeration, GTD, to TimeInForce(59)
      • Added new field, ExpireTime(126), to the New Order, Execution and Cancel/Replace Request messages.
      • Added new enumeration, Expired, to OrdStatus(39).
    13. Added new enumeration, Plan Sponsor, to ProcessCode(81).

    14. Added new field, CxlType(125), to Cancel Request message to streamline partial cancellation (reduce) requests. This field has been added as an accommodation to systems which are designed around the CMS methodology. The FIX Committee continues to recommend the use of the Cancel/Replace message for reducing share quantities.

    15. Allocations - a number of significant changes have been introduced to the Allocation and Allocation ACK messages. These include:

      • Added an Executions section to the allocation message to support third party ticketing. The fields included in this section are:
        • NoExecs(124)
        • ExecID(17)
        • Shares(53)
        • Price(44)
        • LastMkt(30)
      • To support cross-border trading, three new fields have been added to the allocation message, NetMoney(118), SettlCurrAmount(119) and SettlCurrency(120).
      • Added Currency(15) to the Allocation message to describe the denomination of AvgPx.
      • Modified TradeDate(75) to required field in the Allocation message.
      • Modified OrderID(37) in repeating group to conditionally required to allow allocation of non-electronically delivered orders.
      • Added Commission(12) to repeating allocations section.
      • Added FutSettlDate(64) to the Allocation message.
      • Added TradeDate(75) to Allocation ACK message to allow acknowledgment of prior day's allocations.
      • Added a new enumeration to AllocStatus, received, to support two-stage acknowledgment of allocation instructions
      • Added verbiage to the allocation message description to detail the use the AllocTransType(71) field.
      • Added enumeration to AllocTransType(71), confirm, to aid in two-way use of the allocation message via third parties.
      • Added Miscellaneous Fees section to detail non-principal charges
    16. Added Miscellaneous Fees section to the execution message detail non-principal charges.

    17. Added a new OrdStatus, Calculated, for use when reporting the results of fees calculations.

    18. Added a reference section of field name/tag indexes sorted by field name and tag number.

    19. Added IOINaturalFlag(130) to IOI message to allow explicit identification of natural indications.

    20. Added IOIid(23) and new OrdType, Previously Indicated to Order message to allow electronic order response to indications.

    21. Increased valid sequence numbers to 999,999

    22. Updated the preface to reflect the current status of the protocol.

    23. Created new field, PrevClosePx(140), which can be used as an additional verification of security identification.

    24. Removed fields from the Cancel Request message.

    25. Included numerous typographical and grammatical and clarification modifications throughout the document.


    Back to top ↑

    Introduction

    The Financial Information Exchange (FIX) Protocol is a message standard developed to facilitate the electronic exchange of information related to securities transactions. It is intended for use between trading partners wishing to automate communications.

    The message protocol, as defined, will support a variety of business functions. FIX was originally defined for use in supporting US domestic equity trading with message traffic flowing directly between principals. As the protocol evolved, a number of fields were added to support limited cross-border and fixed income trading. Similarly, the protocol was expanded to allow third parties to participate in the delivery of messages between trading partners. As subsequent versions of FIX are released it is expected that functionality will continue to expand.

    FIX was written to be independent of any specific communications protocol (X.25, asynch, TCP/IP, etc.) or physical medium (copper, fiber, satellite, etc.) chosen for electronic data delivery.

    The protocol is defined at two levels; session and application. The session level is concerned with the delivery of data while the application level defines business related data content. This document is organized to reflect the distinction.


    Back to top ↑

    FIX Message Format and Delivery

    The following section summarizes general specifications for constructing and transmitting FIX messages.

    Message Format

    The general format of a FIX message is a standard header followed by the message body fields and terminated with a standard trailer.

    Each message is constructed of a stream of <tag>=<value> fields.

    Except where noted, fields within a message can be defined in any sequence (i.e. relative position of a field within a record is inconsequential); exceptions are explicitly defined otherwise (certain header fields and fields within repeating data groups).

    It is permissible for fields to be repeated. In the case where a field allows multiple values, these repeating fields are logically added together to form the data for that field. It is also possible for a field to be contained in both the clear text portion and the encrypted data sections of the same message. This is normally used for validation and verification. For example, sending the SenderCompID in the encrypted data section can be used as a rudimentary validation technique. In the cases where the clear text data differs from the encrypted data, the encrypted data should be be considered more reliable. (A security warning should be generated).

    All fields in a FIX message are terminated by a delimiter character; the non-printing, ASCII "SOH" (#001), is used for this purpose. Records are delimited by the “SOH” character following the CheckSum field; all records begin with the “8=FIX.x.y” string and terminate with “10=nnn<SOH>“.

    There shall be no embedded delimiter characters within fields except for data type data.

    Data Types

    Data types are mapped to ASCII strings as follows:

    int

    Sequence of digits without commas or decimals and optional sign character (ASCII characters "-" and "0" - "9" ). The sign character utilizes one byte (i.e. positive int is "99999" while negative int is "-99999").

    Examples:

    • 723 in field 21 would be mapped int as |21=723|.
    • -723 in field 12 would be mapped int as |12=-723|

    float

    Sequence of digits with optional decimal point and sign character (ASCII characters "-", "0" - "9" and "."); the absence of the decimal point within the string will be interpreted as the float representation of an integer value. All float fields must accommodate up to fifteen significant digits.

    char

    Alpha-numeric free format strings, can include any character or punctuation except the delimiter. All char fields are case sensitive (i.e. morstattMorstatt).

    time

    Time/date combination in YYYYMMDD-HH:MM:SS format, colons and dash required.

    Valid values:

    • YYYY = 0000-9999, MM = 01-12, DD = 01-31, HH = 00-23, MM = 00-59, SS = 00-59.

    date

    Date in YYYYMMDD format.

    Valid values:

    • YYYY = 0000-9999, MM = 01-12, DD = 01-31.

    data

    Raw data with no format or content restrictions. Data fields are always immediately preceded by a length field. Caution: may contain the delimiter (SOH) character.

    Sequence Numbers

    All FIX messages are identified by a unique sequence number. Sequence numbers are initialized at the start of each FIX session (see Session Protocol section) starting at 1 (one) and increment throughout the session. Monitoring sequence numbers will enable parties to identify and react to missed messages and to gracefully synchronize applications when reconnecting during a FIX session.

    Each session will establish an independent incoming and outgoing sequence series; participants will maintain a sequence series to assign to outgoing messages and a separate series to monitor for sequence gaps on incoming messages.

    Heartbeats

    During periods of message inactivity FIX applications will generate Heartbeat messages at regular time intervals. The heartbeat is useful for monitoring the status of the communication link and to identify incoming sequence number gaps. The heartbeat interval is declared by the session initiator using the HeartBtInt field in the Logon message. The heartbeat interval timer should be reset after every message is transmitted (not just heartbeats).

    Ordered Message Processing

    The FIX protocol assumes complete ordered delivery of messages between parties. Implementors should consider this when designing message gap fill processes. Two options exist for dealing with gaps, either request all messages subsequent to the last message received or ask for the specific message missed while maintaining an ordered list of all newer messages. For example if the receiver misses the second of five messages sent, messages 3-5 can be ignored and a resend request generated for messages 2-5 or messages 3-5 can be saved and only message 2 resent. In both cases, messages 3-5 should not be processed before message 2.

    Possible Duplicates

    When a FIX engine is unsure if a message was successfully received at its intended destination or when responding to a resend request a possible duplicate (poss dupe) message is generated. The poss dupe will be a retransmission (with the same sequence number) of the application data in question with the PossDupFlag included and set to "Y" in the header. It is the receiving application's responsibility to handle the poss dupe message (i.e. treat as a new message or discard as appropriate). All messages created as the result of a resend request will contain the PossDupFlag field set to “Y”, messages lacking the PossDupFlag field or with the PossDupFlag field set to “N” should be treated as original transmissions. Note: When retransmitting a message with the PossDupFlag set to Y, it is always necessary to recalculate the CheckSum value. The only fields that can change in a Poss Dup message are the CheckSum, OrigSendingTime, SendingTime, BodyLenth and PossDupFlag. Fields related to encryption (SecureDataLen and SecureData) may also require recasting.

    Possible Resends

    Application level messages which appear to the end-user to be in an ambiguous state may be resent with the PossResend flag set. An example of when this is useful is the case where an order remains unacknowledged for an inordinate length of time and the end-user suspects it had never been sent. The receiving application must recognize this flag and interrogate internal fields (order number, etc.) to determine if this order has been previously received. Note: the Poss Resend message will contain exactly the same body data but will have the PossResend flag and will have a new sequence number. In addition the CheckSum field will require recalculation and fields related to encryption (SecureDataLen and SecureData) may also require recasting.

    Data Integrity

    FIX allows the integrity of message data content to be verified in two ways; verification of record length and a simple checksum of characters.

    The record length is indicated in the BodyLength field and is verified by counting the number of characters in the message following the BodyLength field up to, and including, the delimiter immediately preceding the CheckSum tag (“10=”).

    The CheckSum integrity check is calculated by summing the binary value of each character from the “8” of “8=“ up to and including the <SOH> character immediately preceding the CheckSum tag field and comparing the least significant eight bits of the calculated value to the CheckSum value (see Appendix B for a complete description).

    Required Fields

    Each message within the protocol is comprised of required, optional and conditionally required (fields which are required based on the presence or value of other fields) fields. Systems should be designed to operate when only the required and conditionally required fields are present.

    Message Acknowledgment

    The FIX session protocol is based on an optimistic model; normal delivery of data is assumed (i.e. no acknowledgment of individual messages) with errors in delivery identified by message sequence number gaps. Each is identified by a unique sequence number. It is the receiving application's responsibility to monitor incoming sequence numbers to identify message gaps for response with resend request messages.

    The FIX protocol does not support individual message acknowledgment. However, a number of application messages require explicit application level acceptance or rejection. Orders, cancel requests, cancel/replace requests and allocation require specific application level response, executions can be rejected with the DK message but do not require explicit acceptance.

    Encryption

    The exchange of sensitive data across public carrier networks may make it advisable to employ data encryption techniques to mask the application messages.

    The choice of encryption method will be determined by mutual agreement of the two parties involved in the connection..

    Any field within a message can be encrypted and included in the SecureData field, however, certain explicitly identified fields must be transmitted unencrypted; the clear (unencrypted) fields can be repeated within the SecureData field to serve as an integrity check of the clear data.

    When encryption is employed, it is recommended (however, not required) that all fields within the message body be encrypted.

    Embedded in the protocol are fields which enable the implementation of a public key signature and encryption methodology, straight DES encryption and clear text. The encryption methodology is declared in the Logon message and should conform to that which was previously agreed. (For more detail on implementation of various encryption techniques see the application notes section on the FIX Home Page.)

    User Defined Fields

    In order to provide maximum flexibility for its users, the FIX protocol accommodates User Defined Fields. These fields are intended to be implemented between consenting trading partners and should be used with caution to avoid conflicts which will arise as multiple parties begin implementation of the protocol. It is suggested that if trading partners find that particular User Defined Fields add value, they should be recommended to the FIX Technical Committee for inclusion in a future FIX version.

    The tag numbers 5000 to 9999 have been reserved for use with user defined fields.


    Back to top ↑

    Session Protocol

    A FIX session is defined as a bi-directional stream of ordered messages between two parties within a continuous sequence number series. A single FIX session can exist across multiple physical connections; parties can connect and disconnect multiple times while maintaining a single FIX session. Connecting parties must bi-laterally agree as to when sessions are to be started/stopped based upon individual system and time zone requirements. It is recommended that a new FIX session be established once within each 24 hour period.

    The FIX session protocol is based on an optimistic model; normal delivery of data is assumed (i.e. no communication level acknowledgment of individual messages) with errors in delivery identified by message sequence number gaps. This section provides details on the implementation of the FIX session layer and dealing with message sequence gaps.

    NOTE: The session protocol has changed dramatically in FIX 4.0. The major differences are in the areas of message sequence number generation/control and in session initialization.

    The following terms are used throughout this section:

    • Valid FIX Message is a message that is properly formed according to this specification and contains a valid body length and checksum field

    • Initiator is the party who establishes the telecommunications link and initiates the session via transmission of the initial Logon message.

    • Acceptor is the receiving party of the FIX session. This party has responsibility to perform first level authentication and formally declare the connection request “accepted” through transmission of an acknowledgment Logon message.

    A FIX session is comprised of three parts: logon, message exchange and logout.


    Logon

    Establishing a FIX connection involves three distinct operations: creation of a telecommunications level link, authentication/acceptance of the initiator by the acceptor and message synchronization (initialization). The sequence of connection follows:

    • The session initiator establishes a telecommunication link with the session acceptor.

    • The initiator sends a Logon message. The acceptor will authenticate the identity of the initiator by examining the Logon message. The Logon message will contain the data necessary to support the authentication method previously agreed upon between the parties. If the initiator is successfully authenticated, the acceptor responds with a Logon message, if authentication fails, the session acceptor should shut down the connection. The session initiator may begin to send messages immediately following the Logon message, however, the session may not be supported by the other side at this time. The initiator must wait for the confirming Logon message from the acceptor before declaring the session fully established.

      After the initiator has been authenticated, the acceptor will respond immediately with a confirming Logon message. Depending on the encryption method being used for that session, this Logon message may or may not contain the same session encryption key. The initiator side will use the Logon message being returned from the acceptor as confirmation that a FIX session has been established. If the session acceptor has chosen to change the session encryption key, the session initiator must send a third Logon back to the other side in order to acknowledge the key change request. This also allows the session acceptor to know when the session initiator has started to encrypt using the new session key. Both parties are responsible for infinite loop detection and prevention during this phase of the session.

    • After authentication, the initiator and acceptor must synchronize their messages through interrogation of the MsgSeqNo field. A comparison of the MsgSeqNo in the Logon message to the internally monitored next expected sequence number will indicate any message gaps. Likewise, the initiator can detect gaps by comparing the acknowledgment Logon message MsgSeqNo to the next expected value. Refer to the section on message recovery later in this document for dealing with message gaps.


    Message Exchange

    After completion of the initialization process, normal message exchange begins. The formats for all valid messages are detailed in the sections 'Administrative Messages' and 'Application Messages'.


    Logout

    Normal termination of the message exchange session will be completed via the exchange of Logout messages. Termination by other means should be considered an abnormal condition and dealt with as an error.

    Before actually closing the session, the Logout initiator should wait for the opposite side to respond with a confirming Logout message. This gives the remote end a chance to perform any Gap Fill operations that may be necessary. The session may be terminated if the remote side does not respond in an appropriate timeframe.

    Note: the process of logging out does not affect the state of any orders. All active orders will continue to be eligible for execution after logout.


    Message Recovery

    During initialization, or in the midst of a FIX session, message gaps may occur which are detected via the tracking of incoming sequence numbers. The following section provides details on how to recover messages.

    As previously stated, each FIX participant must maintain two sequence numbers for each FIX session, one each for incoming and outgoing messages which are initialized at 1 (one) at the beginning of the FIX session. Each message sent is assigned a unique (by connection) sequence number which is incremented after each message. Likewise, every message received has a unique sequence number and the incoming sequence counter is incremented after each message.

    When the incoming sequence number does not match the expected number corrective processing is required. If the incoming message has a sequence number less than expected and the PossDup flag is not set it indicates a serious error and it is strongly recommended that the session be terminated and manual intervention be initiated. If the incoming sequence number is greater than expected it indicates that messages were missed and retransmission of the messages is requested via the Resend Request (see the earlier section, Ordered Message Processing).

    Note: For the purposes of the following paragraphs requester refers to the party requesting the resend and resender refers to the party responding to the request. The process of resending and synchronizing messages is referred as “gap filling”.

    Upon receipt of a Resend Request the resender can respond in one of three ways:

    1. retransmit the requested messages (in order) with the original sequence numbers and PossDupFlag set to “Y”

    2. issue a SeqReset-GapFill message to replace the retransmission of administrative and application messages

    3. issue a SeqReset-Reset to force sequence number synchronization

    During the gap fill process, certain administrative messages should not be retransmitted. Instead, a special SeqReset-GapFill message is generated. The administrative messages which are not to be resent are: Logon, Logout, ResendReq, HeartBeat, TestReq and SeqReset. The SeqReset-GapFill can also be used to skip application messages that the sender chooses not to retransmit (e.g. aged orders).

    All FIX implementations must monitor incoming messages to detect inadvertently retransmitted administrative messages (PossDup flag set indicating a resend). When received, these messages should be processed for sequence number integrity only; the business/application processing of these message should be skipped (e.g. do not initiate gap fill processing based on a resent ResendReq).

    If there are consecutive administrative messages to be resent, it is suggested that only one SeqReset-GapFill message be sent in their place. The sequence number of the SeqReset-GapFill message is the next expected outbound sequence number. The NewSeqNum field of the GapFill message itself contains the sequence number of the highest administrative message in this group plus 1. For example, during a Resend operation there are 7 administrative messages in a row waiting to be resent. They start with sequence number 9 and end with sequence number 15. Instead of transmitting 7 Gap Fill messages (which is perfectly legal, but not network friendly), a SeqReset-GapFill message may be sent. The sequence number of the Gap Fill message itself is set to 9 because the remote side is expecting that message next. The NewSeqNum field of the GapFill message contains the number 16, because that will be the sequence number of the next message to be transmitted.

    Sequence number checking is a vital part of FIX session management. However, a discrepancy in the sequence number stream is handled differently for certain classes of FIX messages. The table below lists the actions to be taken in the case where the incoming sequence number is greater than the expected incoming sequence number.

    NOTE: In *ALL* cases, the FIX session should be terminated if the incoming sequence number is less than expected and the PossDup flag is not set. A Logout message with some descriptive text should be sent to the other side before closing the session.

    Response by Message Type

    Message TypeAction to Be Taken on Sequence # mismatch
    LogonMust always be the first message transmitted. Authenticate and accept the connection. After sending a Logon confirmation back, send a ResendRequest if a message gap was detected in the Logon sequence number.
    LogoutIf a message gap was detected, issue a ResendRequest to retrieve all missing messages followed by a Logout message which serves as a confirmation of the logout request. DO NOT terminate the session. The initiator of the Logout sequence has responsibility to terminate the session. This allows the Logout initiator to respond to any ResendRequest generated. If this side was the initiator of the Logout sequence, then this is a Logout confirmation and the session should be immediately terminated upon receipt. The only exception to the “do not terminate the session” rule is for an invalid Logon attempt. The session acceptor has the right to send a Logout message and terminate the session immediately. This minimizes the threat of unauthorized connection attempts.
    ResendRequestPerform the Resend processing first, followed by a ResendRequest of your own in order to fill the incoming message gap.
    SeqReset-ResetIgnore the incoming sequence number. The NewSeqNum field of the SeqReset message will contain the sequence number of the next message to be transmitted.
    SeqReset-GapFillSend a ResendRequest back. Gap Fill messages behave similar to a SeqReset message. However, it is important to insure that no messages have been inadvertently skipped over. This means that GapFill messages must be received in sequence. An out of sequence GapFill is an abnormal condition
    All Other MessagesPerform Gap Fill operations.

    Message Header

    Each message, administrative or application, is preceded by a standard header. The header is used to identify the message type, length, destination, sequence number, origination point and time.

    Two fields are provided for use when resending messages. The PossDupFlag is set when resending a message as the result of a session level event (i.e. the retransmission of a message reusing a sequence number). The PossResend is set when reissuing a message with a new sequence number (e.g. resending an order). The receiving application should process these messages as follows:

    • PossDup—if a message with this sequence number has been previously received, ignore message, if not, process normally.
    • PossResend—forward message to application and determine if previously received (i.e. verify order id and parameters)

    Message Trailer

    Each message, administrative or application, is terminated by a standard trailer. The trailer is used to segregate messages and contains the three digit character representation of the Checksum value.


    Back to top ↑

    Administrative Messages

    The administrative class of messages are intended to address the utility needs of the protocol. The following section describes the use of each message and provides the message layout.

    Administrative messages will be generated from both sides of the connection.

    Heartbeat

    The Heartbeat is useful for monitoring the status of the communication link and to identify when the last of a string of messages was not received.

    When either end of a FIX connection has not sent any data for [HeartBtInt] seconds, it will transmit a Heartbeat message. When either end of the connection has not received any data for (HeartBtInt + “some reasonable transmission time”) seconds, it will transmit a Test Request message. If there is still no Heartbeat message received after (HeartBtInt + “some reasonable transmission time”) seconds then the connection should be considered lost and corrective action be initiated. If HeartBtInt is set to zero then no regular heartbeat messages will be generated. Note that a test request message can still be sent independent of the value of the HeartBtInt which will force a Heartbeat message.

    Heartbeats issued as the result of Test Request must contain the TestReqID transmitted in the Test Request message. This is useful to verify that the Heartbeat is the result of the Test Request and not as the result of a regular timeout.

    Logon

    The logon message is utilized to authenticate a user attempting to establish a connection to a remote system. The logon message must be the first message sent by the application requesting to initiate a FIX session.

    The HeartBtInt (108) field is used to declare the timeout interval for generating heartbeats.

    Upon receipt of a Logon message the session acceptor will authenticate the party requesting connection and issue a Logon message as acknowledgment that the connection request has been accepted. The acknowledgment Logon can also be used by the initiator to validate that the connection was established with the correct party.

    The session acceptor must be prepared to immediately begin processing messages after receipt of the Logon. The session initiator can choose to begin transmission of FIX messages before receipt of the confirmation Logon, however it is recommended that normal message delivery wait until after the return Logon is received to accommodate encryption key negotiation.

    The confirmation Logon can be used for encryption key negotiation. If a session key is deemed to be weak, a stronger session key can be suggested by returning a Logon message with a new key. This is only valid for encryption protocols that allow for key negotiation. (See the FIX Home Page Application notes for more information on a method for encryption and key passing.)

    Test Request

    The test request message is utilized to force a heartbeat from the opposing application. The test request message is useful for checking sequence numbers or verifying communication line status. The opposite application will respond to the Test Request with a Heartbeat containing the TestReqID.

    The TestReqID is used to verify that the opposite application is generating the heartbeat as the result of Test Request and not a normal timeout. The opposite application will include the TestReqID in the resulting Heartbeat. Any string can be used as the TestReqID (one suggestion is to use a timestamp string).

    Resend Request

    The resend request is sent by the receiving application to initiate the retransmission of messages. This function is utilized if a sequence number gap is detected, if the receiving application lost a message, or as a function of the initialization process.

    The resend request can be used to request a single message, a range of messages or all messages subsequent to a particular message.

    Note: the sending application may wish to consider the message type when resending messages; e.g. if a new order is in the resend series and a significant time period has elapsed since its original inception, the sender may not wish to retransmit the order given the potential for changed market conditions. (The Sequence Reset-GapFill message is used to skip messages that a sender does not wish to resend.)

    Note: it is imperative that the receiving application process messages in sequence order, e.g. if message number 7 is missed and 8-9 received, the application should ignore 8 and 9 and ask for a resend of 7-9.

    • To request a single message: BeginSeqNo = EndSeqNo
    • To request a range of messages: BeginSeqNo = first message of range, EndSeqNo = last message of range
    • To request all messages subsequent to a particular message: BeginSeqNo = first message of range, EndSeqNo = 999999

    Reject

    The reject message should be issued when a message is received which cannot be passed through to the application level. An example of when a reject may be appropriate would be the receipt of a message with invalid basic data (e.g. MsgType=&) which successfully passes de-encryption, CheckSum and BodyLength checks. (As a rule, messages should be forwarded to the trading application for business level rejections whenever possible.)

    Rejected messages should be logged and the incoming sequence number incremented.

    Note: When a message is received which is garbled, cannot be parsed or fails a data integrity check, the receiving application should disregard the message. Processing of the next valid FIX message will cause detection of a sequence gap and a Resend Request will be generated. Logic should be included in the FIX engine to recognize the possible infinite resend loop which may be encountered in this situation.

    Generation and receipt of a Reject message should be dealt with as an indication of a serious error by both parties as it may be the result of faulty logic in either the sending or receiving application.

    If the sending application chooses to retransmit the rejected message it should be assigned a new sequence number.

    Whenever possible, it is strongly recommeded that the cause of the failure be described in the Text field (e.g. INVALID DATA - FIELD 35).

    Sequence Reset (Gap Fill)

    The sequence reset message is used by the sending application to reset the incoming sequence number on the opposing side. The sequence reset message can be used in the following situations:

    • During normal resend processing, the sending application may choose not to send a message (e.g. an aged order), the Sequence Reset can be used to mark the place of that message.
    • During normal resend processing a number of administrative messages are not resent, the Sequence Reset message is used to fill the sequence gap created.
    • In the event of an application failure it may be necessary to force synchronization of sequence numbers on the sending and receiving sides

    The sending application will initiate the sequence reset. The message is used to reset the value of the next sequence number to be transmitted.

    If the GapFill field is not present (or set to N), it can be assumed that the purpose of the sequence reset message is to recover from an out-of-sequence condition, therefore, the MsgSeqNum in the header should be ignored (i.e. the receipt of a sequence reset message with an out of sequence MsgSeqNum should not generate resend requests).

    If the Gap Fill field is present (and equal to Y), the MsgSeqNum should conform to standard message sequencing rules.

    The sequence reset can only increase the sequence number; if a sequence reset is received attempting to decrease the next expected sequence number the message should be rejected and treated as a serious error.

    Logout

    The logout message is to used to initiate or confirm the termination of a FIX session. Disconnection without the exchange of logout messages should be interpreted as an abnormal condition.

    Before actually closing the session, the logout initiator should wait for the opposite side to respond with a confirming logout message. This gives the remote end a chance to perform any Gap Fill operations that may be necessary. The session may be terminated if the remote side does not respond in an appropriate timeframe.

    The logout initiator should not send any messages after the logout.


    Back to top ↑

    Application Messages

    The exchange of business related information is accomplished through the passing of application messages. The application message is composed of the standard header followed by the message body and trailer.

    Descriptions and formats of the specific messages follow.

    Advertisements

    Advertisement messages are used to announce completed transactions. The advertisement message can be transmitted in various transaction types; NEW, CANCEL and REPLACE. All message types other than NEW modify the state of a previously transmitted advertisement identified in AdvRefID.

    Indications of Interest

    Indication of interest messages are used to market merchandise which the broker is buying or selling in either a proprietary or agency capacity. The indications can be time bound with a specific expiration value. Indications are distributed with the understanding that other firms may react to the message first and that the merchandise may no longer be available due to prior trade.

    Indication messages can be transmitted in various transaction types; NEW, CANCEL, and REPLACE. All message types other than NEW modify the state of the message identified in IOIRefID.

    News

    The news message is intended for use as a general free format message between the broker and institution. The message contains flags to identify the news item's urgency and to allow sorting by subject company (symbol). The News record can be originated at either the broker or institution side.

    Email

    Format and purpose similar to News message, however, intended for private use between two parties.

    Quote Request

    In some markets it is the practice to request quotes from brokers prior to placement of an order. The quote request message is used for this purpose.

    Quotes can be requested on specific securities or for forex rates.

    Securities quotes can be requested as either market quotes or for a specific quantity and side. If OrderQty and Side are absent, a market-style quote (bid x offer, size x size) will be returned.

    The symbol used for forex quotes is, in ISO codes, “currency1.currency2” (e.g. GBP.USD) and the quote will be returned as a rate expressed as currency1/currency2.

    Forex quotes can be requested as indicative or at a specific quantity level. If an indicative quote is requested (OrderQty and Side are absent), the broker has discretion to quote at either a specific trade level and side or to provide an indicative quote at the mid-point of the spread. The broker can also choose to respond to an indicative quote by sending multiple quote messages specifying various levels and sides.

    Quote

    The quote message is used as the response to a quote request message and can be used to publish unsolicited quotes.

    Quotes supplied as the result of a Quote Request message are tagged with the appropriate QuoteReqID, unsolicited quotes can be identified by the absence of a QuoteReqID.

    The symbol used for forex quotes is, in ISO codes, “currency1.currency2” (e.g. GBP.USD) and the quote will be returned as a rate expressed as currency1/currency2. BidPx indicates the rate at which the broker is willing to buy currency1 and deliver currency2, OfferPx indicates the rate at which the broker is willing to sell currency1 and receive currency2. Indicative rates are quoted in the BidPx field and may contain a level in the BidSize field.

    Orders can be generated based on Quotes, quoted orders include the QuoteID and are OrdType=Quoted Order.

    New Order - Single

    The new order message type is used by institutions wishing to electronically submit securities and forex orders to a broker for execution.

    Orders can be submitted with special handling instructions and execution instructions. Handling instructions refer to how the broker should handle the order on its trading floor (see HandInst field); execution instructions contain explicit directions as to how the order should be executed (see ExecInst field).

    New Order messages received with the PossResend flag set in the header should be validated by ClOrdID and order parameters (side, symbol, quantity, etc.) to determine if the order had been previously submitted. PossResends previously received should be acknowledged back to the client via an Execution - Status message. PossResends not previously received should be processed as a new order and acknowledged via an Execution - New message.

    To support forex accommodation trades, two fields, ForexReq and SettlCurrency, are included in the message. To request a broker to execute a forex trade in conjunction with the securities trade, the institution would set the ForexReq = Y and SettlCurrency = “intended settlement currency”. The broker would then execute a forex trade from the execution currency to the settlement currency and report the results via the execution message in the NetMonies and SettlCurr fields.

    The order message can also be used to request a straight forex trade. Conventions for identifying a forex transaction are as follows:

    • The forex symbol is defined, in ISO codes, as “held-currency.new-currency” (e.g. “USD.GBP” indicates a desire to convert a held amount of USD to GPB)
    • Side is defined in terms of whether the OrderQty is currency required or currency held (e.g. a forex order can be expressed as either “S 3,200,000 USD for GPB” or “B 2,000,000 GBP for USD”, at a rate of 1.6 USD/GBP, these trades are equivalent in that the broker is receiving 3,200,000 USD and delivering 2,000,000 GBP)
    • OrdType = Forex

    Execution Reports

    The execution report message is used to:

    1. confirm the receipt of an order
    2. confirm changes to an existing order (i.e. accept cancel and replace requests)
    3. relay order status information
    4. relay fill information as orders are worked
    5. reject orders
    6. report miscellaneous fees calculations associated with a trade

    NOTE: Execution reports do not replace the end-of-day confirm. Execution reports are to be regarded only as replacements for the existing fill messages currently communicated via telephone.

    Each execution message will contain information that will describe the current state of the order and execution status as understood by the broker.

    Execution report messages can be transmitted as transaction types (ExecTransType) NEW, CANCEL, CORRECT or STATUS. Transaction types CANCEL and CORRECT modify the state of the message identified in field ExecRefID. Transaction type STATUS indicates that the execution message contains no new information, only summary information regarding order status.

    • The NEW transaction type indicates that this message represents a new order, a change in status of the order, or a new fill against an existing order. The combination of the ExecTransType and OrdStatus fields will indicate how the message is to be applied to an order.
    • The CANCEL transaction type applies at the execution level. The Cancel transaction will be used to cancel an execution which has been reported in error. The canceled execution will be identified in the ExecRefID field.
    • The CORRECT transaction type applies at the execution level and is used to modify an incorrectly reported fill. The incorrect execution will be identified in the ExecRefID field. Note: Data reported in the CumQty and AvgPx fields represent the status of the order as of the time of the correction, not as of the time of the originally reported execution.

    The OrdStatus field is used to identify the status of the current order. The order statuses are as follows:

    NewOutstanding order with no executions
    Partially FilledOutstanding order with executions and remaining quantity
    FilledOrder completely filled, no remaining quantity
    Done for DayOrder not, or partially, filled; no further executions forthcoming
    CanceledCanceled order with or without executions
    ReplacedReplaced order with or without executions
    Pending Cancel/ReplaceOrder with cancel request pending, used to confirm receipt of cancel or replace request. DOES NOT INDICATE THAT THE ORDER HAS BEEN CANCELED OR REPLACED.
    StoppedOrder has been stopped at the exchange
    RejectedOrder has been rejected by broker. NOTE: An order can be rejected subsequent to order acknowledgment, i.e. an order can pass from New to Rejected status..
    SuspendedOrder has been placed in suspended state at the request of the client.
    Pending NewOrder has been received by brokers system but not yet accepted for execution. An execution message with this status will only be sent in response to a Status Request message.
    ExpiredOrder has been canceled in broker’s system due to time in force instructions.
    CalculatedOrder has been completed for the day (either filled or done for day). Miscellaneous fees have been calculated and reported in this execution message

    NOTE: The canceled and replaced order status is set in response to accepted cancel and replace requests. These requests are only acted upon when there is an outstanding order quantity. Requests to replace OrderQty to a level less than the CumQty will be rejected (OrderQty = CumQty + LeavesQty). Requests to change price on a filled order will be rejected (see Order Cancel Reject message type).

    The CumQty and AvgPx fields should be calculated to reflect the fills on all versions of an order. For example, if partially filled order A were replaced by order B, the CumQty and AvgPx on order B’s fills should represent the fills on order A plus those on order B.

    The field ClOrdID is provided for institutions to affix an identification number to an order to coincide with internal systems. The OrderId field is populated with the broker-generated order number.

    Don’t Know Trade

    The Don’t Know Trade (DK) message is used to notify a trading partner that an electronically received execution has been rejected. This message can be thought of as an execution reject message.

    This message has special utility when dealing with one-way execution reporting, if the initial Order Acknowledgment message (LastShares=0 and OrdStatus=New) does not match an existing order this message can be used to notify the broker of a potential problem order.

    Note that the decision to DK an execution lies with the institution; some of the mismatches listed in the DKReason field may be acceptable and will not require a DK messages to be generated.

    Order Cancel/Replace Request

    The order cancel/replace request is used to change the parameters of an existing order.

    Do not use this message to cancel the remaining quantity of an outstanding order, use the Cancel Request message for this purpose.

    It is recommended that the Cancel/Replace Request message be used to partially cancel (reduce) an order.

    The request will only be accepted if the order can successfully be pulled back from the exchange floor without executing. Cancel/Replace requests which cannot be processed will be rejected using the Cancel Reject message; the ClOrdId of the replacement order is inserted in the ClOrdId field of the Cancel Reject message for identification.

    Only a limited number of fields can be changed via the cancel/replace request message. All other fields should be retransmitted as sent in the original order. These fields are:

    • ExecInst
    • OrderQty
    • OrdType
    • Price
    • HandlInst
    • TimeInForce
    • ExpireTime
    • MinQty
    • MaxFloor

    When modifying ExecInst fields in a replacement order, it is necessary to redeclare all ExecInst in the replacement order. ExecInst’s will not be carried forward from the original order to the replacement unless redeclared.

    Order Cancel Request

    The order cancel request message is used to request the cancellation of all or part of the remaining quantity of an existing order. The CxlType field is used to distinguish if all or part of the outstanding quantity is to be canceled.

    Although the Order Cancel Request message can be used to partially cancel (reduce) an order it is recommended that the Cancel/Replace Request message be used for that purpose.

    The request will only be accepted if the order can successfully be pulled back from the exchange floor without executing.

    Note that a cancel request is assigned an order id and is treated as a separate entity. If rejected, the order id of the cancel request will be sent in the Cancel Reject message. The OrderID assigned to the cancel request must be unique amongst the OrderID’s assigned to regular orders and replacement orders.

    Order Cancel Reject

    The order cancel reject message is issued by the broker upon receipt of a cancel request or cancel/replace request message which cannot be honored. Requests to change price or decrease quantity are executed only when an outstanding quantity exists; orders which are filled cannot be changed.

    When rejecting a Cancel/Replace Request, the ClOrdID of the replacement order in the request message is inserted in the ClOrdID field of the Cancel Reject message for identification.

    The execution message will be used to respond to accepted cancel request and cancel/replace request messages.

    Order Status Request

    The order status request message is used by the institution to generate an order status message back from the broker.

    Allocation

    The allocation record is used to instruct a broker on how to allocate executed shares to sub-accounts. The allocation record can also be used as a confirmation message through which third parties can communicate execution and settlement instructions between trading partners.

    An allocation message can be submitted as new, cancel or replace. The AllocTransType field indicates the purpose of the message. When submitting replace or cancel AllocTransType messages the RefAllocID field is required. Replacement allocation messages must contain all data for the replacement allocation.

    The allocation record contains repeating fields for each order, sub-account and individual execution; the repeating fields are shown below in typeface Bold-Italic. The relative position of the repeating fields is important in this record, i.e. each instance of allocation must be in the order shown below.

    • The total shares allocated must equal the Shares value which must equal the total executed quantity of the original order. If present, the total shares in the execution section must also be equal to this value.
    • The number of sub-account instances is indicated in NoAllocs.
    • Multiple orders can be combined for allocation by identifying the number of orders in the NoOrders field and each individual order in the OrderID fields. Combined orders must have the same ticker, trade date, settlement date and side.

    Allocation ACK

    The allocation ACK record is used by the broker to acknowledge the receipt and status of an allocation record received from the institution.

    It is possible that multiple Allocation ACK messages can be generated for a single allocation to detail the receipt and then the acceptance or rejection of the allocation.

    New Order - List

    The new order list message type is used by institutions wishing to electronically submit lists of related orders to a broker for execution.

    The New Order List is intended for use in staging lists to be executed by the broker. If the institution wishes to work a list using the broker's execution services the orders should be submitted as individual New Order - Single's.

    After staging, the list can be operated on in the following ways:

    ExecuteThe broker can be instructed to release the list for execution by sending the List-Execute message.
    CancelAfter the list has been staged with the broker, it can be canceled via the submission of the List Cancel message. If the list has not yet been submitted for execution, the List Cancel message will instruct the broker not to execute it, if the list is being executed, the List Cancel message should trigger the broker's system to generate cancel requests for the remaining quantities of each order within the list. Individual orders within the list can be canceled via the Order Cancel Request message.
    StatusA status of the list can be requested via the submission of the List-Status Request message. The broker will respond with one or more List-Status messages which will report executed quantity, canceled quantity and average price for each order in the list.
    ReplaceIndividual orders within the list can be replaced via Order Cancel/Replace Request messages.

    Executions against orders within the list will not normally be reported as they occur. (If this feature is desired the institution and broker should arrange for this reporting as a custom feature using the Execution message.) Executions against the list will be reported within the List-Status message.

    List Status

    The list status message is issued as the response to a List Status Request message and indicates the current state of the orders within the list as they exists at the broker's site.

    Orders within the list are statused at the summary level. Individual executions are not reported, rather, the current state of the order is reported.

    The message contains repeating fields for each order; the repeating fields are shown below in typeface Bold-Italic. The relative position of the repeating fields is important in this record, i.e. each instance of ClOrdID, CumQty, CxlQty and AvgPx must be in the order shown below.

    Each list status message will report on only a maximum of 50 orders; if the list contains more than 50 orders multiple status messages will be required.

    List Execute

    The list execute message type is used by institutions to instruct the broker to begin execution of a previously submitted list.

    List Cancel Request

    The list cancel request message type is used by institutions wishing to cancel previously submitted lists either before or during execution.

    After the list has been staged with the broker, it can be canceled via the submission of the List Cancel message. If the list has not yet been submitted for execution, the List Cancel message will instruct the broker not to execute it, if the list is being executed, the List Cancel message should trigger the broker's system to generate cancel requests for the remaining quantities of each order within the list. Individual orders within the list can be canceled via the Order Cancel Request message.

    List Status Request

    The list status request message type is used by institutions to instruct the broker to generate status messages for a list.


    Back to top ↑

    Appendix A

    Valid Currency Codes

    Currency codes used in FIX are those defined in ISO 4217 standard. To obtain the current valid list please contact the ISO 4217 secretariat at +44-181-996-9000.

    Note: Prices defined in FIX messages should be made consistent with the currency code used. In some markets, prices are quoted as multiples or fractions of the currency, FIX messages should normalize the amount to coincide with the indicated code (e.g. UK securities are quoted in pence but must be represented in FIX messages as pounds).


    Back to top ↑

    Appendix B

    CheckSum Calculation

    The checksum of a FIX message is calculated by summing every byte of the message up to but not including the checksum field itself. This checksum is then transformed into a modulo 256 number for transmission and comparison. The checksum is calculated after all encryption is completed, i.e. the message as transmitted between parties is processed.

    For transmission, the checksum must be sent as printable characters, so the checksum is transformed into three ASCII digits.

    For example, if the checksum has been calculated to be 274 then the modulo 256 value is 22. This value would be transmitted a |10=022| where "10=" is the tag for the checksum field.

    A sample code fragment to generate the checksum field is as follows:

      
      char *GenerateCheckSum( char *buf, long bufLen )    
      {
        static char tmpBuf[ 4 ];
        long idx;
        unsigned int cks;
      
        for( idx = 0L, cks = 0; idx < bufLen; cks += (unsigned int)buf[ idx++ ] );
        sprintf( tmpBuf, "%03d", (unsigned int)( cks % 256 ) );
        return( tmpBuf );
      }

    Back to top ↑

    Appendix C

    Reuters Exchange Mnemonics

    Exchanges A–L

    ExchangeMnemonic
    Alberta Stock ExchangeAL
    American Stock ExchangeA
    Amman Stock ExchangeAM
    Amsterdam Stock ExchangeAS
    Australian Stock ExchangeAX
    Bahrain Stock ExchangeBH
    Basle Stock ExchangeBS
    Barcelona Stock Exchange – Floor TradingBC
    Barcelona Stock Exchange – CATS FeedMC
    Belfoxb
    Berlin Stock ExchangeBE
    Berne Stock ExchangeBN
    Bologna Stock ExchangeBL
    Bombay Stock ExchangeBO
    Bordeaux Stock ExchangeBD
    Boston Stock ExchangeB
    Bremen Stock ExchangeBM
    Brussels Stock ExchangeBR
    Chicago Board Options ExchangeW
    Cincinnati Stock ExchangeC
    Colombo Stock ExchangeCM
    Copenhagen Stock ExchangeCO
    Deutsche Terminboerse (DTB)d
    Dusseldorf Stock ExchangeD
    European Options ExchangeE
    Florence Stock ExchangeFL
    Frankfurt Stock ExchangeF
    Fukuoka Stock ExchangeFU
    Geneva Stock ExchangeG
    Genoa Stock ExchangeGE
    Hamburg Stock ExchangeH
    Hanover Stock ExchangeHA
    Helsinki Stock ExchangeHE
    Hiroshima Stock ExchangeHI
    Hong Kong Stock ExchangeHK
    Integrated Bourse Trading and Information System (IBIS)IB
    Istanbul Stock ExchangeIS
    Jakarta Stock ExchangeJK
    Japanese Securities Dealers AssociationQ
    Johannesburg Stock ExchangeJ
    Karachi Stock ExchangeKA
    Korea Stock ExchangeKS
    Kuala Lumpur Stock ExchangeKL
    Kyoto Stock ExchangeKY
    Lagos Stock ExchangeLG
    Lausanne Stock ExchangeLA
    Lille Stock ExchangeLI
    London Stock ExchangeL
    Luxembourg Stock ExchangeLU
    Lyon Stock ExchangeLY

    Exchanges M–Z

    ExchangeMnemonic
    Madrid Stock Exchange – Floor TradingMA
    Madrid Stock Exchange – CATS FeedMC
    Marseille Stock ExchangeMS
    MATISMT
    MEFF Renta VariableI
    Mexican Stock ExchangeMX
    Midwest Stock ExchangeMW
    Milan Stock ExchangeMI
    MONEP Paris Stock Optionsp
    Montreal ExchangeM
    Munich Stock ExchangeMU
    Muscat Stock ExchangeOM
    Nancy Stock ExchangeNC
    Nagoya Stock ExchangeNG
    Nairobi Stock ExchangeNR
    Nantes Stock ExchangeNT
    Naples Stock ExchangeNA
    NASDAQO
    NASDAQ Dealers – InternationalOI
    NASDAQ Dealers – Bulletin BoardOB
    New York Stock ExchangeN
    New Zealand Stock ExchangeNZ
    Niigata Stock ExchangeNI
    Osaka Stock ExchangeOS
    Oslo Stock ExchangeOL
    Pacific Stock ExchangeP
    Palermo Stock ExchangePL
    Paris Stock ExchangePA
    Philadelphia Stock ExchangePH
    Philadelphia Stock Exchange – OptionsX
    Rome Stock ExchangeRO
    Sao Paulo Stock ExchangeSA
    Sapporo Stock ExchangeSP
    Singapore Stock ExchangeSI
    Shanghai Stock ExchangeSS
    Shenzhen Stock ExchangeSZ
    Stockholm Options Marketo
    Stockholm Stock ExchangeST
    Stuttgart Stock ExchangeSG
    Swiss Options and Financial Futures Exchange (SOFFEX)Z
    Taiwan Stock ExchangeTW
    Tel Aviv Stock ExchangeTA
    Thailand Stock ExchangeBK
    Third MarketTH
    Tokyo Stock ExchangeT
    Toronto Options ExchangeK
    Toronto Stock ExchangeTO
    Trieste Stock ExchangeTR
    Tunis Stock ExchangeTN
    Turin Stock ExchangeTU
    Vancouver Stock ExchangeV
    Venice Stock ExchangeVE
    Vienna Stock ExchangeVI
    Zimbabwe Stock ExchangeZI
    Zurich Stock ExchangeZ

    Back to top ↑

    Appendix D

    Order State Change Matrices

    The following matrices are included to clarify the sequence of messages and the status of orders involved in the submission and processing of new orders, executions, cancel requests and cancel/replace requests. These state diagrams are presented from the broker’s view. (Note: x refers to the original order, y refers to the cancel/replacing order)

    Filled Order

    TimeMessage ReceivedMessage SentOrdStatus XOrdStatus Y
    1NewOrder (X)Pending New (A)¹
    2 (if rejected)ExecutionRejected (8)
    2ExecutionNew (0)
    3 (if partial fills, can be repeated many time)ExecutionPartial fill (1)
    4ExecutionFilled (2)

    Partially Filled Order

    TimeMessage ReceivedMessage SentOrdStatus XOrdStatus Y
    1NewOrder (X)Pending New (A)¹
    2 (if rejected)ExecutionRejected (8)
    2ExecutionNew (0)
    3 (if partial fills, can be repeated many time)ExecutionPartial fill (1)
    4ExecutionDone for day (3)

    Canceled Order

    TimeMessage ReceivedMessage SentOrdStatus XOrdStatus Y
    1NewOrder (X)Pending New (A)¹
    2 (if rejected)ExecutionRejected (8)
    2ExecutionNew (0)
    3Cancel Request (Y)New (0)¹Pending New (A)¹
    4 (if rejected)Cancel RejectNew (0)¹Rejected (8)
    4ExecutionPending Cxl (6)¹New (0)
    5 (if rejected)Cancel RejectNew (0)¹Rejected (8)
    5ExecutionCanceled (4)Canceled (4)¹

    ¹ information only transmitted as the result of an Order Status Request on this order

    Replaced Order

    TimeMessage ReceivedMessage SentOrdStatus XOrdStatus Y
    1NewOrder (X)Pending New (A)¹
    2 (if rejected)ExecutionRejected (8)
    2ExecutionNew (0)
    3Cxl/Repl Request (Y)New (0)¹Pending New (A)¹
    4 (if rejected by salesperson)Cancel RejectNew (0)¹Rejected (8)
    4ExecutionPending Cxl (6)Pending New (A)¹
    5 (if rejected by trader or exchange)Cancel RejectNew (0)¹Rejected (8)
    5ExecutionReplaced (4)¹New (0)

    ¹ information only transmitted as the result of an Order Status Request on this order


    Back to top ↑

    Orchimate Copyright 2026 Atomic Wire Technology Limited
    Orchestra Copyright 2026 FIX Protocol Ltd
    Terms of Service|Privacy Policy