The Lab

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 192 Current »


SBE Version

The Whisperer Enterprise implementation employs Simple Binary Encoding version "1.0 Final Standard"

Current version: 19458 - Incremental Changes - Release 2025.??.??.WE

mfsbe4.xml - the SBE Schema
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!--
 *
 * Copyright (C) 2025 ION Trading UK Ltd. All rights reserved.
 * Use in source and binary forms, with or without modification, is permitted provided that the following conditions are met:
 * 1. You may only use this software for internal evaluation and testing purposes and may not use the software for engaging
 * in live trades, unless and until you have entered into a separate agreement with ION Trading governing the use of
 * ION Trading software in a production environment.
 * 2. You may not distribute the software (in either source or binary forms) to third parties.
 * 3. All copies of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
 *    THIS SOFTWARE IS PROVIDED BY ION TRADING AND ITS LICENSORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
 *    BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
 *    NO EVENT SHALL ION TRADING OR ITS LICENSORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 *    CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
 *    OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 *    LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 *    ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 -->

 <!-- version 38.2, 2025/05/01 -->
<sbe:messageSchema xmlns:sbe="http://fixprotocol.io/2016/sbe"
    package="mfsbe4"
    id="5"
    version="19458"
    semanticVersion="MF-FIX5.0SP2"
    description="Schema for marketdata and trading messages. Based on FIX50SP2. The protocol is designed to run over TCP."
    byteOrder="littleEndian">
    <!-- NOTES:

    For usage details, please refer to https://confluence.marketfactory.com/x/SwWhAQ

    The schema version encodes a major.minor version number as follows:
        Major=$((version >> 9))  # breaking changes
        Minor=$((version & 511)) # incremental changes

    This Schema utilises the following custom tags:
        20001    LinkID NOTE: equivalent to ClOrdLinkID: https://fiximate.fixtrading.org/en/FIX.Latest_EP266/tag583.html
        20002    LegAvgPx
        20003    HeaderFlags
        20004    TradingFlags NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB.
        20005    HasExtendedOrderFields
        20006    HopNetworkTime
        20007    HopArrivalTime
        20008    HasExtendedPriceFields
        20009    HasNDFFields
        20010    HasLegNDFFields
        20011    NoFixingRefs
        20012    Venuename
        20013    MDFlags
        20014    FixingReference
        20015    LegAllocCalculatedCcyQty
        20016    LegCumQty
        20017    LegLeavesQty
        20018    LotSize
        20019    SessionType
        20020    MarketType
        20021    RegulatoryBodies
        20022    HasExtendedBidFields
        20023    HasExtendedOfferFields
        20024    TimeOptionStartTenor
        20025    TimeOptionStartDate
        20030    NoBodyPassthruFields
        20031    BodyPassthruKey
        20032    BodyPassthruValue
        20040    NoBodyRegulatoryFields
        20041    BodyRegulatoryKey
        20042    BodyRegulatoryValue
        20050    NoLegPassthruFields
        20051    LegPassthruKey
        20052    LegPassthruValue
        20060    NoLegRegulatoryFields
        20061    LegRegulatoryKey
        20062    LegRegulatoryValue
        20070    NoAllocPassthruFields
        20071    AllocPassthruKey
        20072    AllocPassthruValue
        20080    NoAllocRegulatoryFields
        20081    AllocRegulatoryKey
        20082    AllocRegulatoryValue
        20090    NoEntryPassthruFields
        20091    EntryPassthruKey
        20092    EntryPassthruValue
        20100    ApplMessageTypes
        20101    ApplStartTime
        20102    ApplEndTime
        20103    RawMessageEncoding
        20104    RawMessageSize
        20105    RawMessage
        20553    ApplUsername
        20627    NoHops
        20629    HopSendingTime
        20630    HopRefID
    A command to help maintain this list:
        egrep 'id="(2[0-9]{4}|TODO)"' mfsbe4.xml  | awk 'BEGIN { FS="\"" }  {print $4, $2 }' | sort -u
-->

    <types>

        <!-- SBE defined types -->
        <composite name="messageHeader" description="The SBE header that is part of each message.">
            <type name="messageStart" primitiveType="uint32" semanticType="int" description="Four-byte indicator of start of message to assist resynchronisation for protocol analysers. Constant value 1179469389, equivalent to 'MFMF'."/>
            <type name="messageLength" primitiveType="uint32" semanticType="Length" description="Length of the whole message. May span multiple packets."/>
            <type name="blockLength" primitiveType="uint16" semanticType="Length" description="The length of the message root block before repeating groups or variable data commences."/>
            <type name="templateId" primitiveType="uint16" semanticType="int" description="The identifier for the template type of the message that is to follow."/>
            <type name="schemaId" primitiveType="uint16" semanticType="int" description="The identifier for the schema that defines the message."/>
            <type name="version" primitiveType="uint16" semanticType="int" description="The version of the schema allowing for extension."/>
            <type name="msgSeqNum" primitiveType="uint32" semanticType="SeqNum" description="Sequence number for detecting missed messages. On detection of a sequence number gap, the recipient should immediately Logout and then Logon in order to resolve the dropped message(s)."/>
            <type name="sendingTime" primitiveType="uint64" semanticType="UTCTimestamp" description="Number of nanoseconds since epoch when the message was sent."/>
        </composite>

        <composite name="groupSizeEncoding" semanticType="NumInGroup" description="Repeating group dimensions: 0..n.">
            <type name="blockLength" primitiveType="uint16" semanticType="Length"     description="Length of element."/>
            <type name="numInGroup"  primitiveType="uint16" semanticType="NumInGroup" description="Number of items in repeating group."/>
        </composite>

        <composite name="mandatoryGroupSizeEncoding" semanticType="NumInGroup" description="Mandatory group dimensions: 1..n.">
            <type name="blockLength" primitiveType="uint16"              semanticType="Length" />
            <type name="numInGroup"  primitiveType="uint16" minValue="1" semanticType="NumInGroup" />
        </composite>

        <composite name="conditionalGroupSizeEncoding" semanticType="NumInGroup" description="Conditionally populated group dimensions: 0..1.">
            <type name="blockLength" primitiveType="uint16"                           semanticType="Length" />
            <type name="numInGroup"  primitiveType="uint16" minValue="0" maxValue="1" semanticType="NumInGroup" />
        </composite>

        <!-- Primitive types -->
        <type name="Int32NULL" presence="optional" nullValue="-2147483648" primitiveType="int32" semanticType="int" description="Nullable, signed 32-bit integer."/>
        <type name="Int8NULL" presence="optional" nullValue="-128" primitiveType="int8" semanticType="int" description="Nullable, signed 8-bit integer."/>
        <type name="uInt32NULL" presence="optional" nullValue="4294967295" primitiveType="uint32" semanticType="int" description="Nullable, unsigned 32-bit integer."/>
        <type name="uInt16NULL" presence="optional" nullValue="65535" primitiveType="uint16" semanticType="int" description="Nullable, unsigned 16-bit integer."/>
        <type name="uInt8NULL" presence="optional" nullValue="255" primitiveType="uint8" semanticType="int" description="Nullable, unsigned 8-bit integer."/>

        <type name="HeartBtInt" primitiveType="uint16" semanticType="int" minValue="1" maxValue="300" description="Heartbeat interval (seconds), specified by Client in Logon."/>
        <type name="SeqNum" primitiveType="uint32" semanticType="SeqNum" description="Sequence number for detection of missed messages."/>
        <type name="RequestID" primitiveType="uint32" semanticType="String" description="Unique (within current trading week) identifier to reliably link request and response messages."/>

        <type name="NumOfCompetitors" presence="optional" nullValue="-128" primitiveType="int8" minValue="-1" semanticType="int" description="0=Not in competition; -1=In competition (number of competitors unknown), n=In competition (Number of competitors); NULL=unknown."/>
        <type name="EncryptMethod" primitiveType="uint8" semanticType="int" description="None/Other" presence="constant" sinceVersion="18944">0</type>

        <!-- Date and Time types -->
        <type name="LocalMktDate" presence="optional" nullValue="0" primitiveType="uint16" semanticType="LocalMktDate" description="Local calendar date at the market location (i.e. TK/LN/NY), as days since epoch."/>
        <type name="UTCTimestamp" presence="optional" nullValue="0" primitiveType="uint64" semanticType="UTCTimestamp" description="Number of nanoseconds since epoch."/>
        <type name="ValidUntilTime" presence="optional" nullValue="18446744073709551615" primitiveType="uint64" semanticType="UTCTimestamp" description="Number of nanoseconds since epoch. Default value ensures that quotes that do not have explicit TTLs are guaranteed to be valid until replaced or cancelled."/>

        <!-- String types -->
        <composite name="VarText" semanticType="String" description="Free format variable-length text string.">
            <type name="length" primitiveType="uint16" semanticType="Length"/>
            <type name="varData" length="0" primitiveType="uint8" semanticType="data" characterEncoding="UTF-8"/><!-- The length attribute is set to zero as special value to indicate that the character data is of variable length. -->
        </composite>

        <composite name="RawData" semanticType="data" description="Variable-length data with no format or content restrictions.">
            <type name="length" primitiveType="uint16" semanticType="Length"/>
            <type name="varData" length="0" primitiveType="uint8" semanticType="data" /><!-- The length attribute is set to zero as special value to indicate that the character data is of variable length. -->
        </composite>

        <type name="RefMsgType" primitiveType="char" length="16" semanticType="String" description="SemanticType of message. E.g. R=QuoteRequest."/>
        <type name="Currency" primitiveType="char" length="3" semanticType="Currency" description="Currency code supported by Whisperer. Usually the ISO 4217 Currency code value."/>
        <type name="Symbol" primitiveType="char" length="32" semanticType="String" description="Identifier for a security. For FX, the ccy pair must be provided as 'CCY1/CCY2'. For Futures, the Venue-specific contract code."/>
        <type name="Username" primitiveType="char" length="64" semanticType="String" description="Id given to user for logging on."/>
        <type name="Venuename" primitiveType="char" length="64" semanticType="String" description="Id given to user for logging on."/>
        <type name="Password" primitiveType="char" length="32" semanticType="String" description="Password used to logon."/>
        <type name="IDString" primitiveType="char" length="64" semanticType="String" description="Fixed length string type for IDs assigned by Venues. All valid ASCII from decimal 32 to decimal 126 allowed, including "$%&'()+.;?@\^{} and excluding #!*,-/:=[]_`|~<>"/>
        <type name="IDString128" primitiveType="char" length="128" semanticType="String" description="Fixed length string type for particularly IDs assigned by Venues. All valid ASCII from decimal 32 to decimal 126 allowed, including "$%&'()+.;?@\^{} and excluding #!*,-/:=[]_`|~<>"/>
        <type name="DefaultApplVerID" primitiveType="char" length="1" semanticType="String" description="FIX50SP2" presence="constant" sinceVersion="18944">9</type>

        <!-- Price and Qty types -->
        <composite name="DecimalQtyNULL" semanticType="Qty" description="A number representing quantity. May be negative (e.g. Allocation direction).">
            <type name="mantissa" presence="optional" nullValue="-9223372036854775808" primitiveType="int64" semanticType="int" description="The significant digits of the quantity value with an optional NULL value."/>
            <type name="exponent" presence="optional" nullValue="0" primitiveType="int8" semanticType="int" description="The scale of the decimal number as a power of 10. Setting the exponent to zero or positive values constrains this composite type to expressing an integer value, otherwise decimal."/>
        </composite>

        <composite name="PriceNULL" semanticType="Price" description="A number representing price. May be negative (e.g. Forward Points).">
            <type name="mantissa" presence="optional" nullValue="-9223372036854775808" primitiveType="int64" semanticType="int" description="The significant digits of the price value with an optional NULL value."/>
            <type name="exponent" presence="optional" nullValue="0" primitiveType="int8" semanticType="int" description="The scale of the decimal number as a power of 10. Setting the exponent to zero or positive values constrains this composite type to expressing an integer value, otherwise decimal."/>
        </composite>

        <!-- Enumerations and sets -->

        <enum name="Boolean" encodingType="uint8" semanticType="Boolean" description="For Session-level use only. For other cases, Boolean fields are implemented as bitsets to avoid potential issues with nullness.">
            <validValue name="False">0</validValue>
            <validValue name="True">1</validValue>
        </enum>

        <!-- Reject, BusinessMessageReject -->
        <enum name="SessionRejectReason" encodingType="uint8" semanticType="int" description="Categorization of the various reasons for a session-level Reject message.">
            <validValue name="InvalidTagNumber">0</validValue>
            <validValue name="RequiredTagMissing">1</validValue>
            <validValue name="TagNotDefinedForThisMessageType">2</validValue>
            <validValue name="UndefinedTag">3</validValue>
            <validValue name="TagSpecifiedWithoutAValue">4</validValue>
            <validValue name="ValueIsIncorrect">5</validValue>
            <validValue name="IncorrectDataFormatForValue">6</validValue>
            <validValue name="DecryptionProblem" sinceVersion="18944" >7</validValue>
            <validValue name="SignatureProblem" sinceVersion="18944" >8</validValue>
            <validValue name="CompIDProblem" sinceVersion="18944" >9</validValue>
            <validValue name="SendingTimeAccuracyProblem">10</validValue>
            <validValue name="InvalidMsgType">11</validValue>
            <validValue name="XMLValidationError" sinceVersion="18944" >12</validValue>
            <validValue name="TagAppearsMoreThanOnce" sinceVersion="18944" >13</validValue>
            <validValue name="TagSpecifiedOutOfRequiredOrder">14</validValue>
            <validValue name="RepeatingGroupFieldsOutOfOrder" sinceVersion="18944" >15</validValue>
            <validValue name="IncorrectNumInGroupCountForRepeatingGroup">16</validValue>
            <validValue name="NonDataValueIncludesFieldDelimiter" sinceVersion="18944" >17</validValue>
            <validValue name="InvalidUnsupportedApplVer" sinceVersion="18944" >18</validValue>
            <validValue name="Other">99</validValue>
        </enum>

        <enum name="BusinessRejectReason" encodingType="uint8" semanticType="int" description="Categorization of the various reasons for a session-level Reject message.">
            <validValue name="Other">0</validValue>
            <validValue name="UnknownID">1</validValue>
            <validValue name="UnknownSecurity">2</validValue>
            <validValue name="UnsupportedMessageType">3</validValue>
            <validValue name="ApplicationNotAvailable">4</validValue>
            <validValue name="ConditionallyRequiredFieldMissing">5</validValue>
            <validValue name="NotAuthorized" sinceVersion="18944">6</validValue>
            <validValue name="ThrottleLimitExceeded">8</validValue>
            <validValue name="InvalidPriceIncrement">18</validValue>
            <validValue name="WhispererClientMessageInvalid" sinceVersion="18944" description="Whisperer validation checks identified an error in a message received from the Client.">254</validValue>
        </enum>

        <!-- ErrorReport -->
        <enum name="Subject" encodingType="uint8" semanticType="int" description="Categorization of the various Venue-side events that require Warning notification."> <!-- FIX defines semanticType as String -->
            <validValue name="SessionRejectSentByMF" description="A Session-level Reject message was sent to the Venue by Whisperer.">0</validValue>
            <validValue name="SessionRejectReceivedByMF" description="A Session-level Reject message was sent by the Venue to Whisperer.">1</validValue>
            <validValue name="BusinessMessageRejectSentByMF" description="A Business-level Reject message was sent to the Venue by Whisperer.">2</validValue>
            <validValue name="BusinessMessageRejectReceivedByMF" description="A Business-level Reject message was sent by the Venue to Whisperer.">3</validValue>
            <validValue name="MFAPIMessageRejected" description="Client sent Whisperer an erroneous message.">4</validValue>
            <validValue name="MFAPIValidationError" description="Client message has bad content.">5</validValue>
            <validValue name="VenueLogonError" description="Venue connection or logon attempt failed. Informational.">6</validValue>
            <validValue name="VenueSeqNumError" description="Venue sequence number gap (either inbound or outbound). Informational.">7</validValue>
            <validValue name="VenueMessageUnexpected" description="An unexpected message was received from the Venue. E.g. A QuoteRequest for an unsupported SecurityType.">10</validValue>
            <validValue name="VenueTradingStatusHalted" description="Venue trading is temporarily suspended and the session is not yet ready. When trading reopens, the Client will be notified via the usual UserNotification.">11</validValue>
            <validValue name="MFAPIForcedDisconnect" description="MF was forced to disconnect the Client session. This will only occur in erroneous circumstances, e.g. Client is unable to keep up with message rates.">8</validValue>
            <validValue name="MFAPITranslationFailure" description="MF was unable to correctly translate between Client and Venue messages. This will only occur in erroneous circumstances, e.g. Hardware failure leading to a restart and loss of required caches.">9</validValue>
        </enum>

        <!-- UserRequest, UserNotification -->
        <enum name="UserRequestType" encodingType="uint8" semanticType="int" description="Venue action requested by User.">
            <validValue name="LogOnUser" description="Request to establish connectivity with Venue.">1</validValue>
            <validValue name="LogOffUser" description="Request to cease connectivity with Venue.">2</validValue>
        </enum>

        <enum name="UserStatus" encodingType="uint8" semanticType="int" description="User notification of Venue status.">
            <validValue name="LoggedOn" description="User connected with Venue.">1</validValue>
            <validValue name="LoggedOff" description="User disconnected from Venue.">2</validValue>
            <!-- Custom -->
            <validValue name="PrimeBrokerLoggedOff" description="Reuters specific. The PB is logged off and therefore new orders are not able to be submitted.">251</validValue>
            <validValue name="CreditLow" description="Credit status.">252</validValue> <!-- E.g. MAPI CTA sent when credit below 25%, Refer to UserNotification Text for TCID:USD remaining -->
            <validValue name="CreditExhausted" description="Credit status.">253</validValue> <!-- E.g. MAPI CTA sent when credit at 0%, Refer to UserNotification Text for additional detail -->
            <validValue name="CreditAvailable" description="Credit status.">254</validValue>
        </enum>

        <enum name="SessionType" encodingType="uint8" semanticType="String">
            <validValue name="Pricing" description="Client establishes a MarketData session with the Venue, CLOB or ESP MassQuotes.">0</validValue>
            <validValue name="Orders" description="Client establishes a Trading session with the Venue, CLOB or ESP Orders.">1</validValue>
            <validValue name="RFS" description="Client establishes a RFS/RFQ quotation negotiation session with the Venue.">2</validValue>
            <validValue name="DropCopy" description="Client establishes a STP session with the Venue.">3</validValue>
            <validValue name="Replay" description="Client establishes a Replay session with the ReplayService. This is capable of replaying messages from any Venue, SessionType and User.">4</validValue>
        </enum>

        <!-- SecurityStatus Types -->
        <enum name="SecurityTradingStatus" encodingType="uint8" semanticType="int" description="Trading status for a specific security.">
            <validValue name="TradingHalt" description="Trading of security is suspended.">2</validValue>
            <validValue name="Resume" description="Trading of security is resumed.">3</validValue>
            <validValue name="NewPriceIndication" sinceVersion="18944" description="CME - Brief intermediate state: Pre-Open orders are resolved following Indicative Opening Price determination; Trades are sent.">15</validValue>
            <validValue name="ReadyToTrade" description="Start of Session.">17</validValue>
            <validValue name="NotAvailableForTrading" description="End of Session.">18</validValue>
            <validValue name="UnknownOrInvalid" description="An unexpected error.">20</validValue>
            <validValue name="PreOpen" description="Set time before the Venue trading session opens, during which orders may be entered, modified, or cancelled in preparation for the next market open. No trades are executed until ReadyToTrade.">21</validValue>
            <validValue name="PostClose" description="Set time after the Venue trading session has closed.">26</validValue>
            <validValue name="NoCancel" description="AKA 'lockdown'. A period at the end of PreOpen, prior to ReadyToTrade when new orders may be entered, but previously entered orders cannot be modified or cancelled.">27</validValue>
            <validValue name="TradeDateRoll" description="Trade-date roll event for security.">100</validValue>
            <validValue name="ValueDateRoll" description="Value-date roll event for security.">101</validValue>
        </enum>

        <!-- MarketData Types -->
        <enum name="SubscriptionRequestType" encodingType="char" semanticType="char" description="Market data subscription request type.">
            <validValue name="SnapshotAndUpdates" description="Subscription for all market data updates.">1</validValue>
            <validValue name="DisablePreviousSnapshot" description="Unsubscribe for all market data updates.">2</validValue>
        </enum>

        <enum name="MDReqRejReason" encodingType="char" semanticType="char" description="Reason codes for MarketDataRequest rejections.">
            <validValue name="UnknownSymbol" description="Symbol not supported or not authorized.">0</validValue>
            <validValue name="DuplicateMDReqID" description="MDReqID is not unique.">1</validValue>
            <validValue name="InsufficientBandwidth" description="Unable to quote due to temporary reason.">2</validValue>
            <validValue name="InsufficientPermissions" description="User not authorized.">3</validValue>
            <validValue name="UnsupportedSubscriptionRequestType" description="If SubscriptionRequestType is not one of 1 (Subscribe) or 2 (Unsubscribe) or if SubscriptionRequestType=2 and MDReqID is not a valid subscription id.">4</validValue>
            <validValue name="UnsupportedMarketDepth" description="Specified MarketDepth is not supported.">5</validValue>
            <validValue name="UnsupportedMDUpdateType" description="Specified MDUpdateType is not supported.">6</validValue>
            <validValue name="UnsupportedMDEntryType" description="Specified MDEntryType is not supported.">8</validValue>
            <!-- Custom -->
            <validValue name="AlreadySubscribed" description="Duplicate subscription request">X</validValue>
            <validValue name="MarketDataUnavailable" description="Market Data Unavailable.">Y</validValue>
            <validValue name="Other" description="Other.">Z</validValue>
        </enum>

        <set name="MDFlags" encodingType="uint16" semanticType="MultipleCharValue" description="Booleans implemented as a set to avoid any problems with null values.">
            <choice name="GapDetected" description="TRUE if a packet drop or sequencing problem occurred on a UDP market data feed, this should be treated as a signal to empty the book. FALSE otherwise.">0</choice> <!-- cf 1187/RefreshIndicator -->
            <choice name="IsSnapshot" description="TRUE if this Venue Market Data message represents a snapshot of the full Book. FALSE otherwise.">1</choice>
        </set>

        <enum name="MDUpdateAction" encodingType="char" semanticType="char" description="A market data update action.">
            <validValue name="New">0</validValue>
            <validValue name="Change">1</validValue>
            <validValue name="Delete">2</validValue>
        </enum>

        <enum name="MDEntryType" encodingType="char" semanticType="char" description="A market data entry type.">
            <validValue name="Bid" description="Entry contains credit-screened bid details.">0</validValue>
            <validValue name="ImpliedBid" description="Implied Bid.">E</validValue>
            <validValue name="BestBid" description="Entry contains un-screened bid details.">u</validValue>
            <validValue name="Offer" description="Entry contains credit-screened offer details.">1</validValue>
            <validValue name="ImpliedOffer" description="Implied Offer.">F</validValue>
            <validValue name="BestOffer" description="Entry contains un-screened offer details.">v</validValue>
            <validValue name="Trade" description="Entry contains Venue trade details.">2</validValue>
            <validValue name="TradePaid" description="Indicates trade where the Offer was aggressed.">y</validValue>
            <validValue name="WorstTradePaid" description="The worst price that was bought on EBS during a timeslice.">x</validValue>
            <validValue name="TradeGiven" description="Indicates trade where the Bid was aggressed.">z</validValue>
            <validValue name="WorstTradeGiven" description="The worst price that was sold on EBS during a timeslice.">w</validValue>
            <validValue name="MidPrice" description="Required for Regulatory reporting.">H</validValue>
            <validValue name="EmptyBook" description="Sent to indicate the book should be cleared.">J</validValue>
            <validValue name="TradeVolume" description="Aggregate volume during specified period.">B</validValue>
            <validValue name="OpeningPrice" description="Price for the first trade of the day.">4</validValue>
            <validValue name="ClosingPrice" description="Price for the last trade of the day.">5</validValue>
            <validValue name="SettlementPrice" description="Calculated for security during a predetermined time frame, used to determine margin requirements and the following day's price limits.">6</validValue>
            <validValue name="TradingSessionHighPrice" description="The highest price the security has traded at throughout the day.">7</validValue>
            <validValue name="TradingSessionLowPrice" description="The lowest price the security has traded at throughout the day.">8</validValue>
            <validValue name="TradingSessionVWAPPrice" description="The volume-weighted average price the security has traded at throughout the day.">9</validValue>
            <validValue name="OpenInterest" description="Aggregate open interest during specified period.">C</validValue>
            <validValue name="SessionHighBid" description="Session High Bid.">N</validValue>
            <validValue name="SessionLowOffer" description="Session Low Offer.">O</validValue>
            <validValue name="FixingPrice" description="Fixing Price.">W</validValue>
            <validValue name="PreviousClosingPrice" description="The previous trading day's ClosingPrice.">e</validValue>
        </enum>

        <enum name="MDBookType" encodingType="uint8" semanticType="int" description="Defines the type of a market data update group.">
            <validValue name="PriceDepth" description="Book entries are ordered by price. Associated amounts are aggregated order quantities at that price level.">2</validValue>
            <validValue name="OrderDepth" description="Book entries are ordered by price then amount. Each entry represents an individual order.">3</validValue>
            <!-- Custom -->
            <validValue name="Spread" description="Book entries are ordered by configured price deltas from ToB. Associated amounts are aggregate order quantities available between ToB and that level.">101</validValue>
            <validValue name="Amount" description="Book entries are ordered by configured amounts. Associated prices are the corresponding multiple-trade VWAP from ToB.">102</validValue>
            <validValue name="FullAmount" description="Book entries are ordered by configured amounts. Associated prices are single-trade.">103</validValue>
            <validValue name="TradeTicker" description="Used for dedicated Paid/Given feeds only.">105</validValue>
            <validValue name="CurrenexNowWAMR" deprecated="18944" description="Deprecated, do not use.">106</validValue>
            <validValue name="CurrenexNowMid" deprecated="18944" description="Deprecated, do not use.">107</validValue>
        </enum>

        <enum name="MDSubBookType" encodingType="uint8" semanticType="int" description="Reserved for future use.">
            <validValue name="DoNotUse" description="Reserved for future use.">0</validValue>
        </enum>

        <enum name="MDSubFeedType" encodingType="char" semanticType="String" description="Gives indication of Line Arbitrage result." >
            <validValue name="A" description="Line A">A</validValue>
            <validValue name="B" description="Line B">B</validValue>
        </enum>

        <!-- Order Types -->
        <enum name="OrdType" encodingType="char" semanticType="char">
            <validValue name="Market" description="Standard Market order. An instruction to deal immediately at the best possible price (the current rate quotation).">1</validValue>
            <validValue name="Limit" description="Standard Limit order. An instruction to deal if a market moves to a MORE favourable level.">2</validValue>
            <validValue name="Stop" description="Standard Stop Loss order. An instruction to deal if a market moves to a LESS favourable level.">3</validValue>
            <validValue name="StopLimit" description="Standard Stop Limit order. Executes an exposure reducing limit order when market exceeds order's price.">4</validValue>
            <validValue name="PreviouslyQuoted" description="An order to hit an individual quote. To hit multiple quotes, AKA sweeping, the user must submit individual orders from best to worst price.">D</validValue>
            <validValue name="Funari" description="The order starts as a Limit order and executes any leaves quantity as a Market order.">I</validValue>
            <validValue name="IfTouched" description="The order is submitted to the market when a specified price is reached.">J</validValue>
            <validValue name="MarketLimit" description="Order starts as a Market order and executes any leaves quantity as a Limit order.">K</validValue>
            <validValue name="Pegged" description="The order price follows the market by a specified offset.">P</validValue>
        </enum>

        <enum name="TimeInForce" encodingType="char" semanticType="char">
            <validValue name="DAY" description="Day - The Order expires automatically on close of the trading day, if it is still unfilled.">0</validValue>
            <validValue name="GTC" description="Good 'til Cancelled - The Order remains active until it is either executed or cancelled. NOTE: Maximum possible duration is one trading week, but is equivalent to DAY for most Venues that reset daily.">1</validValue>
            <validValue name="IOC" description="Immediate Or Cancel - The Order must be executed immediately, at least in part (Partial fills are allowed), otherwise the Order is cancelled. AKA 'Fill and Kill'">3</validValue>
            <validValue name="FOK" description="Fill Or Kill - The Order must be executed immediately, in full (no Partial fills), otherwise the Order is cancelled. AKA 'All Or None'.">4</validValue>
            <validValue name="GTD" description="Good 'til Date - The Order expires at the specified time (current business day).">6</validValue>
            <validValue name="GFT" description="Good For Time - The Order expires after the specified duration.">A</validValue>
            <validValue name="GFA" description="Good For Auction - The Order is only active in the auction period.">B</validValue>
            <validValue name="GFS" sinceVersion="19458" description="Good For Session - The Order expires automatically on close of the trading week, if it is still unfilled.">Z</validValue> <!-- Custom -->
            <validValue name="AMO" description="At Market Open - The Order can only  be created and modified when the market is in Pre-Open state.">2</validValue>
            <validValue name="AMC" description="At Market Close - The Order can only be created and modified when the market is in Pre-Close state.">7</validValue>
        </enum>

        <enum name="StrategyParameterType" encodingType="uint8" semanticType="int">
            <validValue name="Int" description="Sequence of digits without commas or decimals and optional sign character (ASCII characters [-0-9]).">1</validValue>
            <validValue name="Length" description="int field representing the length in bytes. Value must be positive.">2</validValue>
            <validValue name="NumInGroup" description="int field representing the number of entries in a repeating group. Value must be positive.">3</validValue>
            <validValue name="SeqNum" description="int field representing a message sequence number. Value must be positive.">4</validValue>
            <validValue name="TagNum" description="int field representing a field's tag number when using FIX Tag=Value syntax. Value must be positive and may not contain leading zeros.">5</validValue>
            <validValue name="Float" description="Sequence of digits with optional decimal point and sign character (ASCII characters [-.0-9]); the absence of the decimal point within the string will be interpreted as the float representation of an integer value.">6</validValue>
            <validValue name="Qty" description="float field capable of storing either a whole number (no decimal places) of 'shares' (securities denominated in whole units) or a decimal value containing decimal places for non-share quantity asset classes (securities denominated in fractional units).">7</validValue>
            <validValue name="Price" description="float field representing a price. Note the number of decimal places may vary. For certain asset classes prices may be negative values.">8</validValue>
            <validValue name="PriceOffset" description="float field representing a price offset, which can be mathematically added to a 'Price'. Note the number of decimal places may vary and some fields such as LastForwardPoints may be negative.">9</validValue>
            <validValue name="Amt" description="float field typically representing a Price times a Qty.">10</validValue>
            <validValue name="Percentage" description="float field representing a percentage (e.g. 0.05 represents 5% and 0.9525 represents 95.25%). Note the number of decimal places may vary.">11</validValue>
            <validValue name="Char" description="Single character value, can include any alphanumeric character or punctuation except the delimiter. All char fields are case sensitive (i.e. m != M).">12</validValue>
            <validValue name="Boolean" description="char field containing one of two values: 'Y' = True/Yes, 'N' = False/No.">13</validValue>
            <validValue name="String" description="Alpha-numeric free format strings, can include any character or punctuation except the delimiter. All String fields are case sensitive (i.e. morstatt != Morstatt).">14</validValue>
            <validValue name="MultipleCharValue" description="String field containing one or more space delimited single character values (e.g. |18=2 A F| ).">15</validValue>
            <validValue name="Currency" description="String field representing a currency type using ISO 4217 Currency code (3 character) values.">16</validValue>
            <validValue name="Exchange" description="String field representing a market or exchange using ISO 10383 Market Identifier Code (MIC) values.">17</validValue>
            <validValue name="MonthYear" description="String field representing month of a year. An optional day of the month can be appended or an optional week code. Valid formats: YYYYMM, YYYYMMDD, YYYYMMWW. Valid values: YYYY = 0000-9999; MM = 01-12; DD = 01-31; WW = w1, w2, w3, w4, w5.">18</validValue>
            <validValue name="UTCTimestamp" description="String field representing time/date combination represented in UTC (Universal Time Coordinated, also known as GMT) in either YYYYMMDD-HH:MM:SS (whole seconds) or YYYYMMDD-HH:MM:SS.sss* format, colons, dash, and period required.">19</validValue>
            <validValue name="UTCTimeOnly" description="String field representing time-only represented in UTC (Universal Time Coordinated, also known as GMT) in either HH:MM:SS (whole seconds) or HH:MM:SS.sss* (milliseconds) format, colons, and period required. This special-purpose field is paired with UTCDateOnly to form a proper UTCTimestamp for bandwidth-sensitive messages.">20</validValue>
            <validValue name="LocalMktDate" description="String field representing a Date of Local Market (as opposed to UTC) in YYYYMMDD format. This is the normal date field used by the FIX Protocol.">21</validValue>
            <validValue name="UTCDateOnly" description="String field representing Date represented in UTC (Universal Time Coordinated, also known as GMT) in YYYYMMDD format. This special-purpose field is paired with UTCTimeOnly to form a proper UTCTimestamp for bandwidth-sensitive messages.">22</validValue>
            <validValue name="Data" description="String field containing raw data with no format or content restrictions. Data fields are always immediately preceded by a length field. The length field should specify the number of bytes of the value of the data field.">23</validValue>
            <validValue name="MultipleStringValue" description="String field containing one or more space delimited multiple character values (e.g. |277=AV AN A|).">24</validValue>
            <validValue name="Country" description="String field representing a country using ISO 3166 Country code (2 character) values.">25</validValue>
            <validValue name="Language" description="Identifier for a national language - uses ISO 639-1 standard.">26</validValue>
            <validValue name="TZTimeOnly" description="String field representing the time represented based on ISO 8601. This is the time with a UTC offset to allow identification of local time and timezone of that time. Format is HH:MM[:SS][Z | [ + | - hh[:mm]]].">27</validValue>
            <validValue name="TZTimestamp" description="String field representing a time/date combination representing local time with an offset to UTC to allow identification of local time and timezone offset of that time. The representation is based on ISO 8601. Format is YYYYMMDD-HH:MM:SS.sss*[Z | [ + | - hh[:mm]]].">28</validValue>
            <validValue name="Tenor" description="Used to allow the expression of FX standard tenors in addition to the base valid enumerations defined for the field that uses this pattern data type. This pattern data type is defined as follows: Dx = tenor expression for 'days', e.g. 'D5', Mx = tenor expression for 'months', e.g. 'M3', Wx = tenor expression for 'weeks', e.g. 'W13', Yx = tenor expression for 'years', e.g. 'Y1', where 'x' is any integer > 0.">29</validValue>
        </enum>

        <enum name="PegPriceType" encodingType="uint8" semanticType="int">
            <validValue name="MidPricePeg" description="Peg to midpoint between the Bid and the Offer.">2</validValue>
            <validValue name="MarketPeg" description="Peg to Bid if Selling, Offer if Buying.">4</validValue>
            <validValue name="PrimaryPeg" description="Peg to Bid if Buying, Offer if Selling.">5</validValue>
        </enum>

        <enum name="PegOffsetType" encodingType="uint8" semanticType="int">
            <validValue name="Price" description="Default. Order price offset expressed as an absolute delta below or above the pegged market rate. Positive or negative values.">0</validValue>
            <validValue name="Ticks" description="Order price offset expressed in pips or a fraction of the pip below or above the pegged market rate. Positive or negative values.">2</validValue>
            <validValue name="Percentage" description="Order price offset expressed as percent of the spread below or above the pegged market rate. Positive values only.">4</validValue>
        </enum>

        <enum name="OrdStatus" encodingType="char" semanticType="char" description="Order status.">
            <validValue name="New">0</validValue>
            <validValue name="PartiallyFilled">1</validValue>
            <validValue name="Filled">2</validValue>
            <validValue name="Canceled">4</validValue>
            <validValue name="PendingCancel">6</validValue>
            <validValue name="Rejected">8</validValue>
            <validValue name="PendingNew">A</validValue>
            <validValue name="Calculated" description="For Drop-copy/STP notifications, Fixing Order rate confirmations, and notification of individual legs when SecurityType=SPR (e.g. CME).">B</validValue>
            <validValue name="Expired">C</validValue>
            <validValue name="PendingReplace">E</validValue>
            <validValue name="Suspended" sinceVersion="18944">9</validValue>
            <!-- Custom -->
            <validValue name="Error" deprecated="18945" description="Deprecated, do not use.">Z</validValue>
        </enum>

        <enum name="OrdRejReason" encodingType="uint8" semanticType="int" description="Reason codes for rejections of NewOrderMultileg and MultilegOrderCancelReplaceRequest.">
            <validValue name="InsufficientCredit" description="InsufficientCredit.">0</validValue> <!-- BrokerCredit -->
            <validValue name="UnknownSymbol" description="Symbol not supported or not authorized.">1</validValue>
            <validValue name="ExchangeClosed" description="Market currently unavailable.">2</validValue>
            <validValue name="OrderExceedsLimit" description="Request breaches speed-bump.">3</validValue>
            <validValue name="TooLateToEnter" description="Trading in this instrument not currently available.">4</validValue>
            <validValue name="UnknownOrder" description="Order requested is unknown for the platform.">5</validValue>
            <validValue name="DuplicateOrder" description="ClOrdID provided is not unique.">6</validValue>
            <validValue name="StaleOrder" description="The price of trade request is stale and already replaced on the market or SendingTime indicates that a network delivery delay has caused the order to be stale.">8</validValue>
            <validValue name="NotAuthorizedToTrade" description="User credentials not recognized.">10</validValue> <!-- InvalidInvestorID -->
            <validValue name="IncorrectQuantity" description="Quantity is not within allowable range or does not match with associated order.">13</validValue>
            <validValue name="UnknownAccount" description="Account not recognized.">15</validValue>
            <validValue name="InvalidPrice" description="Price on order does not comply with price range limits.">16</validValue> <!-- PriceExceedsCurrentPriceBand -->
            <validValue name="ReferencePriceNotAvailable" description="Reference price for this instrument is not currently available. May be due to market movement.">19</validValue>
            <validValue name="NotionalValueExceedsThreshold" description="OrderQty too large for current market conditions. Used with FOK orders.">20</validValue>
            <validValue name="Other" description="Catch all for other rejection reasons. Reason should be provided in Text field.">99</validValue>
            <!-- Custom -->
            <validValue name="NothingDone" description="Customer does not execute with the provider.">100</validValue>
            <validValue name="QuoteAcceptFailureFromCustomer" description="Error sending customer 'accept' msg to provider.">101</validValue>
            <validValue name="TradeConfirmationFailureFromProvider" description="Error while sending provider trade confirmation to client.">102</validValue>
            <validValue name="TradeAcknowledgementFailureFromCustomer" description="Error while sending final deal completion status to provider.">103</validValue>
            <validValue name="WarningTrade" description="Execution in Question-Please Call XX Provider For Deal Status. Status of transaction in a unknown state.">104</validValue>
            <validValue name="InformationRequestToProvider" description="Error while sending trade status inquiry to provider.">105</validValue>
            <validValue name="InvalidDecimalPointPrecision" description="Trade execution request is denied by provider.  DPS on rates is not valid.">106</validValue>
            <validValue name="InternalSystemFailure" description="Trade denied for internal technical reasons (for miscellaneous bank problems) please call XX Provider.">107</validValue>
            <validValue name="InvalidSide" description="Side is not supported or does not match with associated order.">200</validValue>
            <validValue name="OrderTypeIsNotSupported" description="OrderType is not supported or does not match with associated order.">201</validValue>
            <validValue name="TimeInForceIsNotSupported" description="TimeInForce is not supported or does not match with associated order.">202</validValue>
            <validValue name="UnknownPegParameter" description="PegPriceType or PegOffsetType or PegPrice or PegOffset are missing or not supported.">203</validValue>
            <validValue name="InvalidID" description="One of the identifiers provided is not unique or does not match with associated order.">204</validValue>
        </enum>

        <enum name="CxlRejReason" encodingType="uint8" semanticType="int" description="Reason codes for OrderCancelRequest rejections.">
            <validValue name="TooLateToCancel" description="Too late to cancel.">0</validValue>
            <validValue name="UnknownOrder" description="Symbol not supported or not authorized.">1</validValue>
            <validValue name="OrderAlreadyInPendingStatus" description="Order already in Pending Cancel or Pending Replace status.">3</validValue>
            <validValue name="InvalidID" description="One of the identifiers provided is not unique or does not match with associated order.">6</validValue> <!-- DuplicateClOrdID -->
            <validValue name="InvalidPrice" description="Price on order does not comply with price range limits.">7</validValue> <!-- PriceExceedsCurrentPrice -->
            <validValue name="Other" description="Other.">99</validValue>
            <!-- Custom -->
            <validValue name="NotAuthorizedToTrade" description="User credentials not recognized.">100</validValue>
            <validValue name="OrderTypeIsNotSupported" description="OrderType is not supported.">101</validValue>
            <validValue name="ExchangeClosed" description="Market currently unavailable.">102</validValue>
            <validValue name="UnknownSymbol" description="Symbol is not provided or does not match with associated order.">103</validValue>
            <validValue name="InvalidSide" description="Side is not supported or does not match with associated order.">104</validValue>
            <validValue name="TimeInForceIsNotSupported" description="TimeInForce is not supported or does not match with associated order.">105</validValue>
            <validValue name="IncorrectQuantity" description="Quantity is not within allowable range or does not match with associated order.">106</validValue>
            <validValue name="UnknownPegParameter" description="PegPriceType or PegOffsetType or PegPrice or PegOffset are missing or not supported.">107</validValue>
        </enum>

        <enum name="ExecType" encodingType="char" semanticType="char" description="Execution Type.">
            <validValue name="New">0</validValue>
            <validValue name="Canceled">4</validValue>
            <validValue name="Replaced">5</validValue>
            <validValue name="PendingCancel">6</validValue>
            <validValue name="Rejected">8</validValue>
            <validValue name="PendingNew">A</validValue>
            <validValue name="Calculated" description="For Fixing Order rate confirmations, and notification of individual legs when SecurityType=SPR (e.g. CME).">B</validValue>
            <validValue name="Expired">C</validValue>
            <validValue name="PendingReplace">E</validValue>
            <validValue name="Trade" description="For trading and Drop-copy/STP fill notifications.">F</validValue>
            <validValue name="TradeCorrect" sinceVersion="18656">G</validValue>
            <validValue name="TradeCancel" sinceVersion="18656">H</validValue>
            <validValue name="Suspended" sinceVersion="18944">9</validValue>
            <validValue name="Restated" sinceVersion="18944">D</validValue>
            <!-- Custom -->
            <validValue name="CanceledLastLook" deprecated="18944" description="Deprecated, do not use.">U</validValue>
            <validValue name="PendingMatch" description="Used when there is an execution that is awaiting validation. E.g. EBS eFix match prior to Fixing Order rate confirmation.">V</validValue>
            <validValue name="Error" deprecated="18944" description="Deprecated, do not use.">Z</validValue>
        </enum>

        <enum name="ExecAckStatus" encodingType="char" semanticType="char" description="Confirms or denys Maker ExecutionReport.">
            <validValue name="Accepted">1</validValue>
            <validValue name="Rejected">2</validValue>
        </enum>

        <set name="ExecInst" encodingType="uint8" semanticType="MultipleCharValue" sinceVersion="18944" description="Instructions for order handling by Venue.">
            <choice name="Suspend" description="S/Suspend">0</choice>
            <choice name="Release" description="q/Release">1</choice>
        </set>

        <enum name="ExecRestatementReason" encodingType="uint8" semanticType="int" description="Reason for unsolicited Restatement or Cancel.">
            <validValue name="GTRenewal" sinceVersion="19458" description="Good-Till order renewal / restatement (no corporate action).">1</validValue>
            <validValue name="VerbalChange" sinceVersion="19458" description="Changes communicated verbally to the sell-side either due to normal business practices, or as an emergency measure when electronic systems are not available.">2</validValue>
            <validValue name="RepricingOfOrder" sinceVersion="19458" description="Re-pricing of order.">3</validValue>
            <validValue name="BrokerOption" sinceVersion="19458" description="Other changes to the order's parmeters made by the broker.">4</validValue>
            <validValue name="PartialDeclineOfOrderQty" sinceVersion="19458" description="Partial decline of OrderQty (e.g. exchange initiated partial cancel).">5</validValue>
            <validValue name="CancelOnTradingHalt" sinceVersion="18945" description="Cancel on Trading Halt.">6</validValue>
            <validValue name="CancelOnSystemFailure" sinceVersion="18945" description="Cancel on System Failure.">7</validValue>
            <validValue name="Canceled" sinceVersion="18945" description="Cancelled, not best.">9</validValue>
            <validValue name="CancelOnConnectionLoss" sinceVersion="18945" description="Cancel On Connection Loss.">12</validValue>
            <validValue name="CancelOnLogout" sinceVersion="18945" description="Cancel On Logout.">13</validValue>
            <validValue name="CancelledForTradePriceViolation" sinceVersion="18945" description="Cancelled, Trade Price Violation.">15</validValue>
            <validValue name="CxldSMP" sinceVersion="18945" description="Cancelled, self-match prevention.">17</validValue>
            <validValue name="Other" sinceVersion="18945" description="Other.">99</validValue>
            <validValue name="SuspendedByVenue">100</validValue>
            <validValue name="ReleasedByVenue">101</validValue>
        </enum>

        <enum name="NegotiationMethod" encodingType="uint8" semanticType="int" description="Indicates whether QuoteRequest is for ESP or RFS.">
            <validValue name="ESP" description="Executable Streaming Prices via MassQuote.">100</validValue>
            <validValue name="RFS" description="Request For Stream via Quote.">101</validValue>
            <validValue name="RFQ" description="Request For Quote (single-shot) via Quote.">102</validValue>
            <validValue name="Order" description="Instruction to Venue.">103</validValue>
        </enum>

        <enum name="QuoteRespType" encodingType="uint8" semanticType="int" description="Reason for termination of QuoteRequest.">
            <validValue name="Pass" description="ESP/RFS Stream rejected or terminated by Taker or Maker.">6</validValue>
            <validValue name="TimedOut" description="RFS Stream duration ended without Order. Maker, Taker and ECN may all have individual time-outs.">8</validValue>
        </enum>

        <enum name="QuoteRequestRejectReason" encodingType="uint8" semanticType="int" description="Reason codes for QuoteRequest rejections.">
            <validValue name="UnknownSymbol" description="Symbol not supported.">1</validValue>
            <validValue name="ExchangeClosed" description="Market currently unavailable.">2</validValue>
            <validValue name="QuoteRequestExceedsLimit" description="Request breaches speed-bump.">3</validValue>
            <validValue name="TooLateToEnter" description="Trading in this instrument not currently available.">4</validValue>
            <validValue name="InvalidPrice" description="Price is no longer valid.">5</validValue>
            <validValue name="NotAuthorizedToRequestQuote" description="User not authorized to request quote.">6</validValue>
            <validValue name="NoMatchForInquiry" description="No Match For Inquiry.">7</validValue>
            <validValue name="NoMarketForInstrument" description="No Market For Instrument.">8</validValue>
            <validValue name="NoInventory" description="No Inventory.">9</validValue>
            <validValue name="Pass" description="Pass.">10</validValue>
            <validValue name="InsufficientCredit" description="InsufficientCredit.">11</validValue>
            <validValue name="IncorrectQuantity" description="Qty does not meet instrument's min or max restrictions.">13</validValue> <!-- ExceededMaxNotionalOrderAmt -->
            <validValue name="Other" description="Other.">99</validValue>
            <!-- Custom -->
            <validValue name="UnknownAccount" description="Provider has not approved/mapped customer account for trading.">100</validValue>
            <validValue name="NonStandardSymbol" description="Provider does not support non-standard ccy pairs.">101</validValue>
            <validValue name="UnknownTenor" description="Provider does not support specific tenor for the ccy pair.">102</validValue>
            <validValue name="InvalidBusinessDay" description="Provider does not recognize the value date of the trade as a valid date.">103</validValue>
            <validValue name="UnknownProduct" description="Provider does not support the specific trade type (SPOT, FWD, SWP, BLK etc.).">104</validValue>
            <validValue name="ProviderStoppedDeal" description="Provider cannot price - (this should be used for technical problems).">105</validValue>
            <validValue name="InvalidMinAmount" description="Provider enforces minimal trade amount.">106</validValue>
            <validValue name="ProviderUnavailable" description="Internal FXall indicator - provider is not connected to FXall trading engine.">107</validValue>
            <validValue name="MultipleAllocationUnsupported" description="Provider does not support multiple allocation trades.">108</validValue>
            <validValue name="SendDetailsUnsupported" description="Provider does not support not auto tradable flag.">109</validValue>
            <validValue name="NoTwoWayPricingForInstrument" description="Provider does not support 2-way pricing for given ccy pair.">110</validValue>
            <validValue name="NonStandardSI" description="Provider does not support non standard SI's.">111</validValue>
            <validValue name="NotAuthorizedToQuoteSecurity" description="Not authorized to quote security.">112</validValue>
        </enum>

        <enum name="MarketType" encodingType="char" semanticType="char" description="Indicates whether the NDF is onshore or offshore.">
            <validValue name="Regular" description="Utilised when the NDF does not differentiate between onshore and offshore markets.">0</validValue>
            <validValue name="Onshore" description="Onshore pricing of the NDF.">1</validValue>
            <validValue name="Offshore" description="Offshore pricing of the NDF.">2</validValue>
        </enum>

        <set name="HeaderFlags" encodingType="uint8" semanticType="MultipleCharValue" description="Booleans implemented as a set to avoid any problems with null values.">
            <choice name="PossDupFlag" description="TRUE if message is being resent in response to an identified sequence number gap, FALSE otherwise.">0</choice> <!--https://fiximate.fixtrading.org/en/FIX.5.0SP2_EP257/tag43.html -->
            <choice name="PossResend" description="TRUE if message was previously sent under a different sequence number. Currently Unused.">1</choice> <!-- https://fiximate.fixtrading.org/en/FIX.5.0SP2_EP257/tag97.html -->
        </set>

        <set name="TradingFlags" encodingType="uint8" semanticType="MultipleCharValue" description="Booleans implemented as a set to avoid any problems with null values. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB.">
            <choice name="IsSynthetic" description="TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue.">0</choice>
        </set>

        <enum name="Side" encodingType="char" semanticType="char" description="Side: Taker Buys against Maker Offer, Sells against Maker Bid." >
            <validValue name="Buy" description="Taker Buys their dealt Currency.">1</validValue>
            <validValue name="Sell" description="Taker Sells their dealt Currency.">2</validValue>
            <validValue name="TwoWay" description="Used in QuoteRequest only. Taker Buys or Sells their dealt Currency.">7</validValue>
            <validValue name="TwoWayBuy" description="Used in BLK/NDB QuoteRequest only. Taker Buys or Sells their dealt Currency for a given Leg, but the Leg Allocations net to a Buy.">Y</validValue>
            <validValue name="TwoWaySell" description="Used in BLK/NDB QuoteRequest only. Taker Buys or Sells their dealt Currency for a given Leg, but the Leg Allocations net to a Sell.">Z</validValue>
        </enum>

        <set name="QuoteType" encodingType="uint8" semanticType="MultipleCharValue" description="Bid/Offer quote condition flags. Booleans implemented as a set to avoid any problems with null values.">
            <choice name="BidIsTradeable" description="FALSE if the Quoted Bid price is Indicative.">0</choice>
            <choice name="OfferIsTradeable" description="FALSE if the Quoted Offer price is Indicative.">1</choice>
        </set>

        <enum name="SecurityType" encodingType="uint8" semanticType="String" description="Defines the standard product types supported by Whisperer.">
            <!-- Single-legged -->
            <validValue name="SPT" description="FX Spot">0</validValue>
            <validValue name="FWD" description="FX Forward">1</validValue>
            <validValue name="NDF" description="FX Non-Deliverable Forward">2</validValue>
            <validValue name="FTO" sinceVersion="19457" description="Forward Time Option">12</validValue> <!-- Also known as Window Forward or Flexi Forward. -->
            <!-- Two-legged -->
            <validValue name="SWP" description="FX Swap">3</validValue>
            <validValue name="NDS" description="FX Non-Deliverable Swap">4</validValue>
            <!-- N-Legged, N > 1 -->
            <validValue name="BLK" description="FX Block">5</validValue>
            <validValue name="NDB" description="FX Non-Deliverable Block">6</validValue>
            <!-- Non-FX -->
            <validValue name="FUT" description="Future">7</validValue>
            <validValue name="SPR" sinceVersion="18944" description="Futures Spread">11</validValue>
            <validValue name="IMM" description="Money Market (Cash)">8</validValue>
            <validValue name="OPT" description="FX Option">9</validValue>
            <validValue name="CFD" description="Contract For Difference">10</validValue>
        </enum>

        <enum name="TenorType" encodingType="uint8" semanticType="String" description="Defines the standard Tenors supported by Whisperer.">
            <validValue name="BKN" description="Broken Date, refer to LegSettlDate for LocalMktDate containing YYYYMMDD value.">0</validValue>
            <!-- Standard rolling Tenors -->
            <validValue name="TOD" description="Today, equivalent to T+0.">1</validValue>
            <validValue name="TOM" description="Tomorrow, equivalent to T+1.">2</validValue>
            <validValue name="SPT" description="Spot, equivalent to T+1 or T+2 (depending on the currency pair).">3</validValue>
            <validValue name="D1" description="One day after Spot.">4</validValue>
            <validValue name="D2" description="Two days after Spot.">5</validValue>
            <validValue name="D3" description="Three days after Spot.">6</validValue>
            <validValue name="D4" description="Four days after Spot.">7</validValue>
            <validValue name="D5" sinceVersion="18656" description="Five days after Spot. Date may be different to W1.">41</validValue>
            <validValue name="W1" description="One week after Spot.">8</validValue>
            <validValue name="W2" description="Two weeks after Spot.">9</validValue>
            <validValue name="W3" description="Three weeks after Spot.">10</validValue>
            <validValue name="M1" description="One month after Spot.">11</validValue>
            <validValue name="M2" description="Two months after Spot.">12</validValue>
            <validValue name="M3" description="Three months after Spot.">13</validValue>
            <validValue name="M4" description="Four months after Spot.">14</validValue>
            <validValue name="M5" description="Five months after Spot.">15</validValue>
            <validValue name="M6" description="Six months after Spot.">16</validValue>
            <validValue name="M7" description="Seven months after Spot.">17</validValue>
            <validValue name="M8" description="Eight months after Spot.">18</validValue>
            <validValue name="M9" description="Nine months after Spot.">19</validValue>
            <validValue name="M10" description="Ten months after Spot.">20</validValue>
            <validValue name="M11" description="Eleven months after Spot.">21</validValue>
            <validValue name="Y1" description="One year after Spot.">22</validValue>
            <validValue name="M13" description="Thirteen months after Spot.">39</validValue>
            <validValue name="M14" description="Fourteen months after Spot.">40</validValue>
            <validValue name="M15" description="Fifteen months after Spot.">23</validValue>
            <validValue name="M18" description="Eighteen months after Spot.">24</validValue>
            <validValue name="M21" description="Twenty-one months after Spot.">25</validValue>
            <validValue name="Y2" description="Two years after Spot.">26</validValue>
            <validValue name="Y3" description="Three years after Spot.">27</validValue>
            <validValue name="Y4" description="Four years after Spot.">28</validValue>
            <validValue name="Y5" description="Five years after Spot.">29</validValue>
            <validValue name="Y6" description="Six years after Spot.">30</validValue>
            <validValue name="Y7" description="Seven years after Spot.">31</validValue>
            <validValue name="Y8" description="Eight years after Spot.">32</validValue>
            <validValue name="Y9" description="Nine years after Spot.">33</validValue>
            <validValue name="Y10" description="Ten years after Spot.">34</validValue>
            <validValue name="Y15" description="Fifteen years after Spot.">35</validValue>
            <validValue name="Y20" description="Twenty years after Spot.">36</validValue>
            <validValue name="Y25" description="Twenty-five years after Spot.">37</validValue>
            <validValue name="Y30" description="Thirty years after Spot.">38</validValue>
            <!-- Single-legged Swaps -->
            <validValue name="ON" description="Overnight - TOD/TOM single-legged Swap.">50</validValue>
            <validValue name="TN" description="Tom-Next - TOM/SPT single-legged Swap.">51</validValue>
            <validValue name="SN" description="Spot-Next - SPT/D1 single-legged Swap.">52</validValue>
            <!-- Short-dated day counts -->
            <validValue name="T2" description="T+2 - Second day after trade date.">53</validValue>
            <validValue name="T3" description="T+3 - Third day after trade date.">54</validValue>
            <validValue name="T4" description="T+4 - Fourth day after trade date.">55</validValue>
            <validValue name="T5" description="T+5 - Fifth day after trade date.">56</validValue>
            <!-- Fixed dates -->
            <!-- IMM Dates are the four quarterly dates of each year used as the maturity date for most futures and options contracts. Typically the third Wednesday of March, June, September and December -->
            <validValue name="IMMF" description="January Futures expiration date.">60</validValue>
            <validValue name="IMMG" description="February Futures expiration date.">61</validValue>
            <validValue name="IMMH" description="March Futures expiration/IMM1 date.">62</validValue>
            <validValue name="IMMJ" description="April Futures expiration date.">63</validValue>
            <validValue name="IMMK" description="May Futures expiration date.">64</validValue>
            <validValue name="IMMM" description="June Futures expiration/IMM2 date.">65</validValue>
            <validValue name="IMMN" description="July Futures expiration date.">66</validValue>
            <validValue name="IMMQ" description="August Futures expiration date.">67</validValue>
            <validValue name="IMMU" description="September Futures expiration/IMM3 date.">68</validValue>
            <validValue name="IMMV" description="October Futures expiration date.">69</validValue>
            <validValue name="IMMX" description="November Futures expiration date.">70</validValue>
            <validValue name="IMMZ" description="December Futures expiration/IMM4 date.">71</validValue>
            <!-- The first business day of the chosen month -->
            <validValue name="BOMF" description="The first business day of January. Also used to represent first working day of next year (e.g. 360T).">114</validValue> <!-- Breaking Change: 110 > 114 -->
            <validValue name="BOMG" description="The first business day of February.">115</validValue>
            <validValue name="BOMH" description="The first business day of March.">116</validValue>
            <validValue name="BOMJ" description="The first business day of April.">117</validValue>
            <validValue name="BOMK" description="The first business day of May.">118</validValue>
            <validValue name="BOMM" description="The first business day of June.">119</validValue>
            <validValue name="BOMN" description="The first business day of July.">120</validValue>
            <validValue name="BOMQ" description="The first business day of August.">121</validValue>
            <validValue name="BOMU" description="The first business day of September.">122</validValue>
            <validValue name="BOMV" description="The first business day of October.">123</validValue>
            <validValue name="BOMX" description="The first business day of November.">124</validValue>
            <validValue name="BOMZ" description="The first business day of December.">125</validValue>
            <!-- The first spot value date after the last business day of the chosen month e.g. CNX RFS NDFs -->
            <validValue name="JAN" description="The first spot value date after the last business day of January.">72</validValue>
            <validValue name="FEB" description="The first spot value date after the last business day of February.">73</validValue>
            <validValue name="MAR" description="The first spot value date after the last business day of March.">74</validValue>
            <validValue name="APR" description="The first spot value date after the last business day of April.">75</validValue>
            <validValue name="MAY" description="The first spot value date after the last business day of May.">76</validValue>
            <validValue name="JUN" description="The first spot value date after the last business day of June.">77</validValue>
            <validValue name="JUL" description="The first spot value date after the last business day of July.">78</validValue>
            <validValue name="AUG" description="The first spot value date after the last business day of August.">79</validValue>
            <validValue name="SEP" description="The first spot value date after the last business day of September.">80</validValue>
            <validValue name="OCT" description="The first spot value date after the last business day of October.">81</validValue>
            <validValue name="NOV" description="The first spot value date after the last business day of November.">82</validValue>
            <validValue name="DEC" description="The first spot value date after the last business day of December.">83</validValue>
            <!-- The last business day of the chosen month e.g. CNX RFS NDFs -->
            <validValue name="EOMF" description="The last business day of January.">84</validValue>
            <validValue name="EOMG" description="The last business day of February.">85</validValue>
            <validValue name="EOMH" description="The last business day of March.">86</validValue>
            <validValue name="EOMJ" description="The last business day of April.">87</validValue>
            <validValue name="EOMK" description="The last business day of May.">88</validValue>
            <validValue name="EOMM" description="The last business day of June.">89</validValue>
            <validValue name="EOMN" description="The last business day of July.">90</validValue>
            <validValue name="EOMQ" description="The last business day of August.">91</validValue>
            <validValue name="EOMU" description="The last business day of September.">92</validValue>
            <validValue name="EOMV" description="The last business day of October.">93</validValue>
            <validValue name="EOMX" description="The last business day of November.">94</validValue>
            <validValue name="EOMZ" description="The last business day of December. Also used to represent last working day of current year (e.g. 360T).">95</validValue>
            <!-- Other rolling Tenors - e.g. R5FX -->
            <validValue name="IMM1" description="The next quarterly IMM date.">96</validValue>
            <validValue name="IMM2" description="The quarterly IMM date following IMM1.">97</validValue>
            <validValue name="IMM3" description="The quarterly IMM date following IMM2.">98</validValue>
            <validValue name="IMM4" description="The quarterly IMM date following IMM3.">99</validValue>
            <validValue name="IMM5" sinceVersion="18944" description="The quarterly IMM date following IMM4.">59</validValue>
            <validValue name="D1M1" description="Tomorrow One Month - the M1 Tenor for tomorrow’s trade date.">100</validValue>
            <!-- Actual SettlementDate for EOMn tenors below will vary by instrument. Refer to TBD for more details. -->
            <validValue name="EOM0" description="End of current month.">101</validValue>
            <validValue name="EOM1" description="End of first month after current month.">102</validValue>
            <validValue name="EOM2" sinceVersion="18656" description="End of second month after current month.">103</validValue> <!-- Breaking Change: BMF3 > EOM2 -->
            <validValue name="EOM3" sinceVersion="18656" description="End of third month after current month.">104</validValue> <!-- Breaking Change: BMF4 > EOM3 -->
            <validValue name="EOM4" sinceVersion="18944" description="End of fourth month after current month.">105</validValue>
            <validValue name="EOM5" sinceVersion="18944" description="End of fifth month after current month.">106</validValue>
            <validValue name="EOM6" sinceVersion="18944" description="End of sixth month after current month.">107</validValue>
            <validValue name="EOM7" sinceVersion="18944" description="End of seventh month after current month.">108</validValue>
            <validValue name="EOM8" sinceVersion="18944" description="End of eighth month after current month.">109</validValue>
            <validValue name="EOM9" sinceVersion="18944" description="End of ninth month after current month.">110</validValue>
            <validValue name="EOM10" sinceVersion="18944" description="End of tenth month after current month.">111</validValue>
            <validValue name="EOM11" sinceVersion="18944" description="End of eleventh month after current month.">112</validValue>
            <validValue name="EOM12" sinceVersion="18944" description="End of twelfth month after current month.">113</validValue>
            <!-- E.g. Futures -->
            <validValue name="YYYYMM" description="Refer to LegSettlDate for LocalMktDate used to derive YYYYMM value. Defines monthly Futures contract expiry. Consider using IMM[F-Z] for monthly expiry within the next twelve months.">250</validValue>
            <validValue name="YYYYWW" description="Refer to LegSettlDate for LocalMktDate used to derive YYYYWW value. Defines weekly Futures contract expiry.">251</validValue>
            <validValue name="YYYYMMDD" description="Refer to LegSettlDate for LocalMktDate containing YYYYMMDD value. Defines daily Futures contract expiry. Synonymous to BKN.">252</validValue>
        </enum>

        <!-- Regulatory Details-->
        <enum name="BodyRegulatoryKey" encodingType="uint8" semanticType="int" description="Details of conditionally populated Regulatory fields.">
            <!-- SEF 0..19 -->
            <validValue name="SEFTakerIsUSPerson" description="Y/N: A legal term referring to any U.S. person or legal entity anywhere in the world that should be taxed under U.S. law.">0</validValue>
            <validValue name="SEFDataRepository" description="Repository for the reporting of SEF trades.">1</validValue> <!-- PartyRole 102 -->
            <validValue name="SEFIsLargeTrade" description="Y/N: Indicates whether or not part of a large trade.">3</validValue>
            <validValue name="SEFRequiredTransaction" description="Y/N: Indicates whether or not a required transaction (rather than permitted).">4</validValue>
            <validValue name="SEFClearingExempted" description="Y/N: Indicates whether or not this trade is exempted from clearing.">5</validValue>
            <validValue name="SEFClearer" description="Conditionally populated if SEFClearingExempted=N. Clearing House (DCO) to be used for the clearing of SEF trades.">6</validValue>
            <validValue name="SEFFinancialEntityDefinition" description="'SD' (Swap Dealer), 'MSP' (Major Swap Participant), or 'ECP' (Eligible Contract Participant).">7</validValue>
            <validValue name="SEFCustomerTypeIndicator" description="1/2/3/4: https://www.investopedia.com/terms/c/cti.asp">8</validValue>
            <validValue name="SEFIsBlock" description="Y/N: Indicates whether or not the trade is classified as a Block for SEF purposes.">9</validValue>
            <!-- EMIR 20..39 -->
            <validValue name="UPI" sinceVersion="18945" description="Uniquely identifies the product of a security using ISO 4914. Refer to https://cosp.anna-dsb.com/home. As well EMIR, the UPI is being added to other regimes such as ASIC, MAS and CFTC derivative reporting so as to more closely align regulation worldwide.">20</validValue>
            <!-- MiFID 40..59 -->
            <validValue name="MiFIDProductISIN" description="Product-level 12 character International Securities Identification Number http://www.anna-web.org/home/derivatives-service-bureau/. Not populated for single-legged products (refer to LegMiFIDISIN instead).">40</validValue>
            <validValue name="MiFIDExecutingDecisionMakerAsNaturalPerson" description="Shortcode representing the Executing Decision Maker Natural Person of message sender.">42</validValue>
            <validValue name="MiFIDExecutingDecisionMakerAsAlgorithm" description="Shortcode representing the Executing Decision Maker Algorithm of message sender.">47</validValue>
            <validValue name="MiFIDInvestmentDecisionMakerAsNaturalPerson" description="Shortcode representing the Investment Decision Maker Natural Person of message sender.">43</validValue>
            <validValue name="MiFIDInvestmentDecisionMakerAsAlgorithm" description="Shortcode representing the Investment Decision Maker Algorithm of message sender.">57</validValue>
            <validValue name="MiFIDLargeInScaleWaiver" description="Y/N: Pre-Trade Block Size waiver indicator.">41</validValue>
            <validValue name="MiFIDIlliquidInstrumentWaiver" description="Y/N: Pre-Trade Illiquid Instrument waiver indicator.">44</validValue>
            <validValue name="MiFIDSizeSpecificWaiver" description="Y/N: Pre-Trade Size-specific (trade of substantial size etc.) waiver indicator.">45</validValue>
            <validValue name="MiFIDLargeInScaleDeferral" description="Y/N: Post-Trade Block Size deferral indicator.">54</validValue>
            <validValue name="MiFIDIlliquidInstrumentDeferral" description="Y/N: Post-Trade Illiquid Instrument deferral indicator.">55</validValue>
            <validValue name="MiFIDSizeSpecificDeferral" description="Y/N: Post-Trade Size-specific (trade of substantial size etc.) deferral indicator.">56</validValue>
            <validValue name="MiFIDLiquidityProvisionFlag" description="Y/N: Indicates that the Order is part of a liquidity provision activity.">46</validValue>
            <validValue name="MiFIDPackageTradeFlag" description="Y/N: Indicates that the Order is considered a Package/aggregated transaction for reporting purposes.">48</validValue> <!-- Swaps, Blocks, Batches in scope -->
            <validValue name="MiFIDPackageID" description="Conditionally populated if MiFIDPackageTradeFlag=Y. Identifier assigned to a collection of trades so they may be analysed as a single unit.">49</validValue>
            <validValue name="MiFIDSystematicInternaliser" description="Segment MIC code (as per ISO 10383) of message sender, indicating it is a Systematic Internaliser.">50</validValue>
            <validValue name="MiFIDRiskReductionOrderFlag" description="Y/N: In the context of ESMA RTS 22 Article 4(2)(i), signifies whether or not the Order is a transaction 'to reduce risk in an objectively measurable way in accordance with Article 57 of Directive 2014/65/EU'.">51</validValue>
            <validValue name="MiFIDTradingCapacity" description="DEAL: Firm Deals on own account; MTCH: Firm trades in a matched principal capacity; AOTC: Any other trading capacity (e.g. Agency).">52</validValue>
            <validValue name="MiFIDNonPriceFormingTrade" description="Y/N: Transactions where the exchange of financial instruments is determined by factors other than the current market valuation of the financial instrument as listed under Article 13.">53</validValue>
            <validValue name="MiFIDExemptedDueToESCBPolicyTransaction" sinceVersion="18945" description="Y/N: Transactions entered in to by members of the European System of Central Banks (ESCB) are exempted from publication, as per ESMA RTS2, Article 14(1), and Article 15(1).">58</validValue>
        </enum>

         <enum name="LegRegulatoryKey" encodingType="uint8" semanticType="int" description="Details of conditionally populated Regulatory fields.">
            <!-- SEF 0..19 -->
            <validValue name="LegSEFUSIPrefix" description="Unique Swap Identifier Prefix for this Leg. With ISO 23897, the code issuing authority’s 20 character LEI, originally a 10 character hash of the LEI. The Maker may choose to generate their own IDs, in which case this value will differ from the that provided in the Order.">0</validValue>
            <validValue name="LegSEFUSI" description="32 character Unique Swap Identifier (USI) for this Leg. The Maker may choose to generate their own IDs, in which case the ExecutionReport value will differ from the that provided in the Order.">1</validValue>
            <!-- EMIR 20..39 -->
            <validValue name="LegEMIRUTIPrefix" description="Unique Trade Identifier (UTI) Prefix for this Leg. With ISO 23897, the code issuing authority’s 20 character LEI, originally a 10 character hash of the LEI.">20</validValue>
            <validValue name="LegEMIRUTI" description="42 character Unique Trade Identifier (UTI) for this Leg.">21</validValue>
            <validValue name="LegEMIRRTN" sinceVersion="18945" description="52 character Report Tracking Number (RTN) for this Leg.">23</validValue>
            <validValue name="LegUPI" sinceVersion="18945" description="Uniquely identifies the product of a leg instrument using ISO 4914. Refer to https://cosp.anna-dsb.com/home. As well EMIR, the UPI is being added to other regimes such as ASIC, MAS and CFTC derivative reporting so as to more closely align regulation worldwide.">22</validValue>
            <!-- MiFID 40..59 -->
            <validValue name="LegMiFIDISIN" description="12 character International Securities Identification Number http://www.anna-web.org/home/derivatives-service-bureau/.">40</validValue>
            <validValue name="LegMiFIDTVTIC" description="52 character Trading Venue Transaction Identification Code (TVTIC) for this Leg.">41</validValue>
            <validValue name="LegMiFIDConversionFlag" description="Y/N: Indicates whether or not this Leg is an FX conversion trade and related to a transaction which would be exempt from margining and reporting. Tenor must be less than T+5 - i.e. TOD, TOM, SPT, D1 or D2. Sometimes known as a long-dated Spot.">42</validValue>
            <!-- SFTR 60..69 -->
            <validValue name="LegSFTRSecuritiesFinancingTransactionFlag" description="Y/N: Indicates whether or not this Leg is a transactions where securities are used to borrow cash, or vice versa.">60</validValue>
        </enum>

        <enum name="AllocRegulatoryKey" encodingType="uint8" semanticType="int" description="Details of conditionally populated Regulatory fields.">
            <!-- SEF 0..19 -->
            <validValue name="AllocSEFUSIPrefix" description="Unique Swap Identifier Prefix for this Allocation. With ISO 23897, the code issuing authority’s 20 character LEI, originally a 10 character hash of the LEI.">0</validValue>
            <validValue name="AllocSEFUSI" description="32 character Unique Swap Identifier (USI) for this Allocation.">1</validValue>
            <!-- EMIR 20..39 -->
            <validValue name="AllocEMIRUTIPrefix" description="Unique Trade Identifier (UTI) Prefix for this Leg. With ISO 23897, the code issuing authority’s 20 character LEI, originally a 10 character hash of the LEI.">20</validValue>
            <validValue name="AllocEMIRUTI" description="42 character Unique Trade Identifier (UTI) for this Allocation.">21</validValue>
            <!-- MiFID 40..59 -->
            <validValue name="AllocMiFIDTVTIC" description="52 character Trading Venue Transaction Identification Code (TVTIC) for this Allocation.">41</validValue>
            <validValue name="AllocMiFIDConversionFlag" description="Y/N: Indicates whether or not the Allocation is an FX conversion trade and related to a transaction which would be exempt from margining and reporting. Tenor must be less than T+5 - i.e. TOD, TOM, SPT, D1 or D2.">42</validValue>
            <validValue name="AllocMiFIDNonPriceFormingTrade" description="Y/N: Transactions where the exchange of financial instruments is determined by factors other than the current market valuation of the financial instrument as listed under Article 13.">43</validValue>
            <validValue name="AllocMiFIDLEI" description="Optionally populated if OrderOriginatonFirm is Trading on Behalf of a third party ContraFirm. A Legal Entity Identifier defined by ISO 17442 to identify the third party allocation account entity.">44</validValue>
        </enum>

        <set name="RegulatoryBodies" encodingType="uint64" semanticType="MultipleCharValue" description="Allows definition of which Regulatory Fields the Order will include.">
            <choice name="SEF" description="Dodd-Frank Swap Execution Facility.">0</choice>
            <choice name="EMIR" description="European Market Infrastructure Regulation.">1</choice>
            <choice name="MiFID" description="EU Markets in Financial Instruments Directive.">2</choice>
            <choice name="SFTR" description="Securities Financing Transaction Regulation.">3</choice>
            <choice name="MAS" description="Recognised by the Monetary Authority of Singapore as an Approved Exchange (AE) or Recognised Market Operator (RMO), as defined under Part I of the First Schedule to the Securities and Futures Act.">4</choice>
            <choice name="UKMiFID" sinceVersion="18945" description="UK Markets in Financial Instruments Directive. https://www.fca.org.uk/publications/policy-statements/ps21-20-changes-uk-mifids-conduct-and-organisational-requirements">5</choice>
        </set>

        <!-- Party Identification -->
        <enum name="PartyRole" encodingType="uint8" semanticType="int" description="Details of conditionally populated counterparty identification fields.">
            <validValue name="ExecutingFirm" description="Firm responsible for filling/rejecting this Order.">1</validValue>
            <validValue name="ExecutingUnit" description="Branch/business unit under which this trade will be booked.">59</validValue>
            <validValue name="ExecutingUnitLocation" description="Location of the Branch responsible for the execution of the client's order. Two-character ISO 3166 Country Code.">251</validValue> <!-- http://fiximate.fixtrading.org/en/FIX.5.0SP2_EP249/tag803.html = 70 -->
            <validValue name="ExecutingTrader" description="Trader responsible for filling/rejecting this Order - may be human or autotrader.">12</validValue>
            <validValue name="ExecutingFirmLEI" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID. A Legal Entity Identifier defined by ISO 17442 to identify the executing Firm.">253</validValue> <!-- http://fiximate.fixtrading.org/en/FIX.5.0SP2_EP249/tag803.html = 84 -->
            <validValue name="OrderOriginationFirm" description="Firm responsible for submission of this Order.">13</validValue>
            <validValue name="OrderOriginationFirmLocation" description="Location of the Branch responsible for the submission of the client's order. Two-character ISO 3166 Country Code.">250</validValue> <!-- http://fiximate.fixtrading.org/en/FIX.5.0SP2_EP249/tag803.html = 70 -->
            <validValue name="OrderOriginationTrader" description="Trader responsible for submission of this Order - may be human or autotrader.">11</validValue>
            <validValue name="OrderOriginationFirmLEI" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID. A Legal Entity Identifier defined by ISO 17442 to identify the originating Firm.">254</validValue> <!-- http://fiximate.fixtrading.org/en/FIX.5.0SP2_EP249/tag803.html = 84 -->
            <validValue name="ContraFirm" description="Optionally populated if OrderOriginatonFirm is Trading on Behalf of a third party.">17</validValue> <!-- e.g. 360T TEX -->
            <validValue name="ContraTrader" description="Optionally populated if OrderOriginatonFirm is Trading on Behalf of a third party.">37</validValue> <!-- e.g. 360T TEX -->
            <validValue name="ContraFirmLEI" description="Optionally populated if OrderOriginatonFirm is Trading on Behalf of a third party. A Legal Entity Identifier defined by ISO 17442 to identify the third party Firm.">252</validValue> <!-- e.g. 360T TEX -->  <!-- http://fiximate.fixtrading.org/en/FIX.5.0SP2_EP249/tag803.html = 84 -->
            <validValue name="ExecutionVenue" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID. May be an LEI or MIC of the Swap Execution Facility (SEF), Multilateral Trading Facility (MTF), Organized Trading Facility (OTF) or Regulated Market (RM). Also used to denote the LP that a message is intended for on order routing venues such as Fidessa and FXSpotStream.">73</validValue>
            <validValue name="PrimeBroker" description="The counterparty Prime Broker.">79</validValue>
            <validValue name="ClearingFirm" description="The counterparty Clearing Firm.">4</validValue>
            <validValue name="ReportingEntity" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID. May be an LEI or MIC, or 'ExecutingFirm', 'OrderOriginationFirm', 'ExecutionVenue', 'Unknown'.">116</validValue>
        </enum>

        <enum name="ApplReqType" encodingType="uint8" semanticType="int" description="Type of Application Message Request being made.">
            <validValue name="StartRetransmission">0</validValue>
        </enum>

        <set name="MessageTypeFlags" encodingType="uint64" semanticType="MultipleCharValue" description="Filter for Whisperer message types to be included in the replay.">
            <choice name="Logon" description="A/Logon">0</choice>
            <choice name="LogonResponse" description="A/LogonResponse">1</choice>
            <choice name="Logout" description="5/Logout">2</choice>
            <choice name="LogoutResponse" description="5/LogoutResponse">3</choice>
            <choice name="SequenceResetGapFill" description="4/SequenceResetGapFill">4</choice>
            <choice name="Heartbeat" description="0/Heartbeat">5</choice>
            <choice name="TestRequest" description="1/TestRequest">6</choice>
            <choice name="UserNotification" description="CB/UserNotification">7</choice>
            <choice name="ErrorReport" description="U2/ErrorReport">8</choice>
            <choice name="MarketDataRequest" description="V/MarketDataRequest">9</choice>
            <choice name="MarketDataRequestReject" description="Y/MarketDataRequestReject">10</choice>
            <choice name="SecurityStatus" description="f/SecurityStatus">11</choice>
            <choice name="MarketDataIncrementalRefresh" description="X/MarketDataIncrementalRefresh">12</choice>
            <choice name="EndMarker" description="U3/EndMarker">13</choice>
            <choice name="QuoteRequest" description="R/QuoteRequest">14</choice>
            <choice name="Quote" description="S/Quote">15</choice>
            <choice name="MassQuote" description="i/MassQuote">16</choice>
            <choice name="QuoteCancel" description="Z/QuoteCancel">17</choice>
            <choice name="QuoteResponse" description="AJ/QuoteResponse">18</choice>
            <choice name="NewOrderMultileg" description="AB/NewOrderMultileg">19</choice>
            <choice name="MultilegOrderCancelReplaceRequest" description="AC/MultilegOrderCancelReplaceRequest">20</choice>
            <choice name="OrderCancelRequest" description="F/OrderCancelRequest">21</choice>
            <choice name="OrderCancelReject" description="9/OrderCancelReject">22</choice>
            <choice name="OrderTimeout" description="U1/OrderTimeout">23</choice>
            <choice name="ExecutionReport" description="8/ExecutionReport">24</choice>
            <choice name="ExecutionAck" description="BN/ExecutionAck">25</choice>
        </set>

        <enum name="ApplReportType" encodingType="uint8" semanticType="int" description="Type of report">
            <validValue name="ResendComplete" description=" Application message resend completed with at least one ReplayedMessage .">3</validValue>
            <validValue name="NoData" description=" Application message resend completed without any ReplayedMessage.">100</validValue>
            <validValue name="ResendFailure" description=" Application message resend failed.">101</validValue>
        </enum>

        <enum name="PayloadType" encodingType="uint8" semanticType="int" description="Encoding">
            <validValue name="FIX" description="FIX Protocol.">1</validValue>
            <validValue name="SBE" description="FIX Simple Binary Encoding.">2</validValue>
        </enum>

    </types>

<!--
 *
 * Session-Level Messages
 *
 -->

    <sbe:message name="Logon" id="1" semanticType="A" description="Used to establish a session with the server.">
        <field name="HeartBtInt" id="108" type="HeartBtInt" description="Heartbeat-generation timeout - the interval with which the client wishes to validate connection health. If zero then no regular heartbeat messages will be generated."/>
        <field name="NextExpectedMsgSeqNum" id="789" type="SeqNum" description="Provided by Client to support Whisperer message-gap checks. If equal to the next-to-be-assigned Whisperer sequence then Whisperer will respond with a LogonResponse message and then proceed with the session as normal. If lower, then Whisperer will respond with a LogonResponse message and immediately (re)send persisted messages or GapFills, in order. On completion, it will proceed with the session as normal. If higher, then Whisperer will respond with a Logout message to abort the session."/>
        <field name="Username" id="553" type="Username" description="MF-created and assigned MFAPI user."/>
        <field name="Password" id="554" type="Password" description="MF-created password for user."/>
        <field name="Venuename" id="20012" type="Venuename" description="MF-defined Venue name."/>
        <field name="SessionType" id="20019" type="SessionType" description="Indicates desired session type for user, bilaterally agreed with MarketFactory Support."/>
        <field name="ResetSeqNumFlag" id="141" type="Boolean" presence="optional" sinceVersion="18944" description="Optionally populated, absence implies False. May be used freely in UAT. In Production, may only be set True when SessionType=Pricing/Replay. Indicates both sides of a FIX session should reset sequence numbers, all messages queued for resend will be lost."/>
        <field name="EncryptMethod" id="98" type="EncryptMethod" presence="constant" sinceVersion="18944" description="No Encryption."/>
        <field name="DefaultApplVerID" id="1137" type="DefaultApplVerID" presence="constant" sinceVersion="18944" description="The service pack release applied at the session level is always FIX 5.0 SP2. Mandated by FIXT.1.1."/>
        <data name="Text" id="58" type="VarText" description="Free-form text string."/>
    </sbe:message>

    <sbe:message name="LogonResponse" id="2" semanticType="A" description="An acknowledgement from the server that the Logon was successful.">
        <field name="NextExpectedMsgSeqNum" id="789" type="SeqNum" description="Provided by Whisperer to support Client message-gap checks. If equal to the next-to-be-assigned Client sequence then the client should proceed with the session as normal. If lower, then the client should immediately (re)send persisted messages or GapFills, in order. On completion, it may then proceed with the session as normal. If higher, then the client should respond with a Logout message to abort the session."/>
        <field name="HeartBtInt" id="108" type="HeartBtInt" sinceVersion="18944" description="Whisperer will always match the Heartbeat-generation timeout value specified in Client's Logon."/>
        <field name="EncryptMethod" id="98" type="EncryptMethod" presence="constant" sinceVersion="18944" description="No Encryption."/>
        <field name="DefaultApplVerID" id="1137" type="DefaultApplVerID" presence="constant" sinceVersion="18944" description="The service pack release applied at the session level is always FIX 5.0 SP2. Mandated by FIXT.1.1."/>
    </sbe:message>

    <sbe:message name="Logout" id="3" semanticType="5" description="A request to stop the session.">
        <data name="Text" id="58" type="VarText" description="Text string detailing the logout reason."/>
    </sbe:message>

    <sbe:message name="LogoutResponse" id="4" semanticType="5" description="An acknowledgement that the session has been terminated.">
        <data name="Text" id="58" type="VarText" sinceVersion="18656" description="Free-form text string."/>
    </sbe:message>

    <sbe:message name="SequenceResetGapFill" id="5" semanticType="4" description="Used to explicitly skip blocks of unpersisted messages during a replay, if a sequence gap is detected.">
        <field name="NewSeqNo" id="36" type="SeqNum" description="The sequence number of the next message to be transmitted."/>
        <field name="GapFillFlag" id="123" type="Boolean" presence="constant" valueRef="Boolean.True" description="This is always a Gap Fill Message."/>
    </sbe:message>

    <sbe:message name="Heartbeat" id="6" semanticType="0" description="This is sent from each side of the connection periodically.">
        <field name="Username" id="553" type="Username" presence="optional" description="Echoed by Whisperer, to assist session diagnostics. MF-created and assigned MFAPI user."/>  <!-- Custom use of this tag. -->
        <field name="Venuename" id="20012" type="Venuename" presence="optional" description="Echoed by Whisperer, to assist session diagnostics. MF-defined Venue name."/>
        <field name="SessionType" id="20019" type="SessionType" presence="optional" description="Echoed by Whisperer, to assist session diagnostics. Indicates desired session type for user, bilaterally agreed with MarketFactory Support."/>
        <data name="TestReqID" id="112" type="VarText" description="Conditionally populated if the Heartbeat is sent in response to a TestRequest. Free-form text string as populated in the TestRequest. e.g. UTC/Epoch Timestamp."/>
    </sbe:message>

    <sbe:message name="TestRequest" id="7" semanticType="1" description="Sent by either side in order to generate a Heartbeat response. May also be used to determine approximate application round-trip times.">
        <data name="TestReqID" id="112" type="VarText" description="Free-form text string to be returned in resulting Heartbeat. e.g. UTC/Epoch Timestamp."/>
    </sbe:message>

    <sbe:message name="Reject" id="8" semanticType="3" description="Not used by Whisperer. Provided for clients connecting via FIX, to ensure correct delivery should their FIX engine session handling attempt to send this. Sent when a message is received but cannot be properly processed due to a session-level rule violation.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>

        <field name="RefSeqNum" id="45" type="SeqNum" description="MsgSeqNum of rejected message."/>
        <field name="RefTagID" id="371" type="uint16" semanticType="int" description="The tag id of the field being referenced."/>
        <field name="RefMsgType" id="372" type="RefMsgType" description="The semantic type of the rejected message."/>
        <field name="SessionRejectReason" id="373" type="SessionRejectReason" description="Code to identify reason for this Reject."/>

        <data name="Text" id="58" type="VarText" description="Message to explain reason for this Reject."/>
    </sbe:message>

<!--
 *
 * Venue Status Messages
 *
 -->

    <sbe:message name="BusinessMessageReject" id="104" semanticType="j" description="Corrective action required of the Client. Sent by Whisperer to Client when a message fulfills session-level rules and cannot be rejected via any other means.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>

        <field name="RefSeqNum" id="45" type="SeqNum" description="MsgSeqNum of rejected message."/>
        <field name="RefMsgType" id="372" type="RefMsgType" description="The semantic type of the rejected message."/>
        <field name="BusinessRejectRefID" id="379" type="IDString128" description="The value of the business-level ID field on the message being referenced. The Client is expected to use this ID to update their state for the originating message."/>
        <field name="BusinessRejectReason" id="380" type="BusinessRejectReason" description="Code to identify reason for this Reject."/>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Conditionally populated by Whisperer if BusinessMessageReject is triggered by Venue. Provides details of originating Venue message to Client.">
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue/MFAPI message."/>
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue/Client clock) that the Venue/Client message was sent."/>
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
        <data name="Text" id="58" type="VarText" description="Message to explain reason for this Reject."/>
    </sbe:message>

    <sbe:message name="UserRequest" id="105" semanticType="BE" description="Client initiates connection/disconnection to/from Venue. NOTE:Each Client Username will be associated (n-n) with a specific Venue credential. Mapping bilaterally agreed between MarketFactory Support and Customer.">
        <field name="UserRequestType" id="924" type="UserRequestType"/>
        <data name="Text" id="58" type="VarText" description="Explanation of user request, e.g. reason for Venue logout."/>
    </sbe:message>

    <sbe:message name="UserNotification" id="106" semanticType="CB" description="Venue notification of Client events.">
        <field name="UserStatus" id="926" type="UserStatus"/>
        <data name="Text" id="58" type="VarText" description="Explanation of status, if any."/>
    </sbe:message>

    <sbe:message name="ErrorReport" id="107" semanticType="U2" description="No action required of the Client. Sent by Whisperer to Client to notify them erroneous events. Whisperer is responsible for any subsequent recovery.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>

        <field name="Subject" id="147" type="Subject" description="Class of Warning."/><!-- Venue-side eg Reject, BusinessMessageReject; Client-side - makes wrong API call for Venue type etc -->
        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Conditionally populated by Whisperer if ErrorReport triggered by Venue. Provides details of originating Venue message to Client.">
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue/MFAPI message."/>
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue/Client clock) that the Venue/Client message was sent."/>
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
        <data name="Text" id="58" type="VarText" description="Additional detail required in order to address the Warning. E.g. Venue FIX message."/>
    </sbe:message>

<!--
 *
 * Market Data Messages - Order Matching
 *
 -->

    <sbe:message name="MarketDataRequest" id="201" semanticType="V" description="A request to create, cancel, or otherwise manipulate a subscription for a single security from a specific Venue."> <!-- NOTE: No support for client provision of desired rungs for Full Amount trading. This is currently done in http://my.mf:8080/#/profile_exchange_instruments -->
        <field name="MDReqID" id="262" type="RequestID" description="Unique ID specified by the subscriber."/>
        <field name="SubscriptionRequestType" id="263" type="SubscriptionRequestType"/>
        <field name="MarketDepth" id="264" type="uint8" semanticType="int" description="0=Full Book, 1=Top of Book, n=Number of Levels."/>
        <field name="MDBookType" id="1021" type="MDBookType" description="Specifies the type of book to be requested."/> <!-- Custom use of this tag. -->
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="1-legged (SPT, FWD, NDF, FUT), 2-legged (SWP, NDS, SPR). NOTE: This message is NOT to be used for BLK, IMM or OPT Security Types."/>
        <field name="SecurityGroup" id="1151" type="IDString" presence="optional" description="Conditionally required if the Venue offers multiple liquidity pools for the same security. E.g. EBS standard vs eFix."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" sinceVersion="18656" description="Bitmap field of Boolean type Regulation elegibility flags."/>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSettlType" id="587" type="TenorType" description="Specifies a standard Tenor for settlement."/> <!-- Custom use of this tag. -->
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if SettlType=BKN. Specifies the broken date for settlement."/> <!-- Custom use of this tag. -->

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if SecurityType=NDF/NDS.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>
                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>
        </group>

        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoUnderlyings" id="711" dimensionType="groupSizeEncoding" sinceVersion="18656" description="Optionally populated if supported by Venue. The number of FullAmount volume bands requested.">
            <field name="UnderlyingQty" id="879" type="DecimalQtyNULL" description="The volume band to be requested."/>
        </group>
    </sbe:message>

    <sbe:message name="MarketDataRequestReject" id="202" semanticType="Y" description="A rejection of a request for market data.">
        <field name="MDReqID" id="262" type="RequestID" description="Unique ID specified by the subscriber."/>
        <field name="MDReqRejReason" id="281" type="MDReqRejReason" description="The reason that the MarketDataRequest was rejected. Refer to Text field for additional detail."/>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
        <data name="Text" id="58" type="VarText" description="Text string detailing the rejection."/>
    </sbe:message>

    <sbe:message name="SecurityStatus" id="203" semanticType="f" description="Sent by MF on connection to Venue to provide indication of instrument availability, attributes and status. Should be processed before submission of MarketDataRequest. Can also arrive asynchronously if the state of a security changes - e.g. Date Roll.">
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="1-legged (SPT, FWD, NDF, FUT), 2-legged (SWP, NDS, SPR). NOTE: This message is NOT to be used for BLK, IMM or OPT Security Types."/>
        <field name="SecurityGroup" id="1151" type="IDString" presence="optional" description="Conditionally required if the Venue multiple offers multiple liquidity pools for the same security. E.g. EBS standard vs eFix."/>

        <field name="TradeDate" id="75" type="LocalMktDate" description="Trade Session Date of security, as provided by the Venue."/> <!-- Custom use of this tag. -->
        <!-- 625 - TradingSessionSubID better -->
        <field name="SecurityTradingStatus" id="326" type="SecurityTradingStatus" description="Identifies the trading status applicable to the instrument or Security Group"/> <!-- Custom use of this tag. -->
        <field name="MinQty" id="110" type="DecimalQtyNULL" description="Minimum Order size allowed by the Venue."/> <!-- Custom use of this tag. -->
        <field name="ContractMultiplier" id="231" type="DecimalQtyNULL" description="Specifies the ratio or multiply factor to convert from 'nominal' units (e.g. contracts) to total units."/>
        <field name="MinPriceIncrement" id="969" type="PriceNULL" description="Tick value for the instrument, specified by the Venue."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" sinceVersion="18656" description="Bitmap field of Boolean type Regulation elegibility flags."/>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSettlType" id="587" type="TenorType" description="Specifies a standard Tenor for settlement."/> <!-- Custom use of this tag. -->
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if SettlType=BKN. Specifies the broken date for settlement."/> <!-- Custom use of this tag. -->

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if SecurityType=NDF/NDS.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>
                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>
        </group>

        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/> <!-- E.g. EBS Ultra MarketRegion -->
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
        <data name="Text" id="58" type="VarText" description="Explanation of status state."/>
    </sbe:message>

    <sbe:message name="MarketDataIncrementalRefresh" id="204" semanticType="X" description="Contains any combination of new, changed, or deleted Market Data Entries, for any combination of instruments, with any combination of trades,  quotes and Laddered/VWAP prices, etc. All of these types of Market Data Entries can be changed and deleted.">
        <field name="MDReqID" id="262" type="RequestID" description="Unique ID specified by the subscriber."/> <!--NOTE: FIX defines this tag as a string. -->
        <field name="ApplSeqNum" id="1181" type="SeqNum" presence="optional" description="Conditionally populated for UDP feeds. Incrementing sequence number provided by Venue to facilitate UDP message gap detection. Informational only."/>
        <field name="MDBookType" id="1021" type="MDBookType" description="Instructs subscriber as to how the book should be interpreted."/>
        <field name="MDSubFeedType" id="1683" type="MDSubFeedType" presence="optional" description="Specifies the UDP market data source for A/B Line Arbitrage."/>
        <field name="MDFlags" id="20013" type="MDFlags" description="Additional state information relating to this Market Data message."/>

        <group name="NoMDEntries" id="268" dimensionType="groupSizeEncoding" description="One entry for each individual change in the market data message.">
            <field name="MDUpdateAction" id="279" type="MDUpdateAction" description="The type of update action to be applied to this market data entry."/>
            <field name="MDSubBookType" id="1173" type="MDSubBookType" presence="optional" description="Reserved for future use. Identifies component of aggregated books. E.g. Interest, Firm, LastLook."/>
            <field name="MDEntryType" id="269" type="MDEntryType" presence="optional" description="Defines the nature of this market data entry."/>
            <field name="MDEntryID" id="278" type="IDString" description="Unique identifier of this market data entry, referenced throughout MDUpdateAction lifecycle."/>
            <field name="MDEntryTime" id="273" type="UTCTimestamp" description="Venue TransactTime for this market data entry."/>
            <field name="MDEntryPx" id="270" type="PriceNULL" description="All-in Price. MDEntryPx=MDEntrySpotRate+MDEntryForwardPoints*10^PipPosition"/>
            <field name="MDEntrySize" id="271" type="DecimalQtyNULL" description="Size for quoted price. Expressed in units of CCY1."/>
            <field name="NumberOfOrders" id="346" type="uInt16NULL" description="Conditionally populated if MDBookType=PriceDepth/Spread/Amount and provided by Venue. Used in aggregated books to indicate the number of individual orders for this MDEntry, if known."/>
            <group name="HasExtendedPriceFields" id="20008" dimensionType="conditionalGroupSizeEncoding" description="Conditionally populated when provided by Venue.">
                <field name="MDEntrySpotRate" id="1026" type="PriceNULL" description="Spot Price."/>
                <field name="MDEntryForwardPoints" id="1027" type="PriceNULL" description="Forward Points, expressed in pips (not arithmetic)."/>
            </group>
            <group name="NoOfSecSizes" id="1177" dimensionType="groupSizeEncoding" description="Number of Orders at this level. When MDBookType=PriceDepth, NoOfSecSizes=NumberOfOrders, or zero if unknown. When MDBookType=OrderDepth and MinQty/LotSize is specified for this order then NoOfSecSizes=1, zero otherwise.">
                <field name="MDSecSize" id="1179" type="DecimalQtyNULL" description="Size of individual Order at this level. SUM(MDSecSize)=MDEntrySize."/>
                <field name="MinQty" id="110" type="DecimalQtyNULL" description="Minimum quantity available to execute for this individual Order."/> <!-- Custom use of this tag. -->
                <field name="LotSize" id="20018" type="DecimalQtyNULL" description="Minimum Order size increment."/> <!-- E.g. for Hotspot, LMAX -->
            </group>
            <group name="NoEntryPassthruFields" id="20090" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="EntryPassthruKey" id="20091" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/> <!-- E.g. EBS Ultra MarketRegion -->
                <data name="EntryPassthruValue" id="20092" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/> <!-- E.g. EBS Ultra MarketRegion -->
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>
        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
    </sbe:message>

    <sbe:message name="EndMarker" id="211" semanticType="U3" description="Marks the end of a set of messages. E.g. end of conflation interval for a market data particular timeslice, end of SecurityStatus list, end of Batch, etc.">
        <field name="MDBookType" id="1021" type="MDBookType" presence="optional" description="Conditionally populated if RefMsgType='X'. Provides subscriber with indication of which book-type this conflation end-Marker should be applied to."/>
        <field name="MDSubFeedType" id="1683" type="MDSubFeedType" presence="optional" description="Conditionally populated if RefMsgType='X' and UDP multicast Venue transport. Specifies the UDP market data source for A/B Line Arbitrage."/>
        <field name="RefMsgType" id="372" type="RefMsgType" sinceVersion="18656" description="The semantic type of the message."/> <!-- f=SecurityStatus, X=MarketDataIncrementalRefresh, R=QuoteRequest -->
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Conditionally populated if RefMsgType='R'. Not applicable for other values."/>
        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
    </sbe:message>

<!--
 *
 * Quotation Messages (RFQ, RFS, ESP).
 *
 -->

    <sbe:message name="QuoteRequest" id="205" semanticType="R" description="Issued by Taker to make ESP/RFS/RFQ subscriptions. A QuoteResponse may be used to terminate the request.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="QuoteReqID" id="131" type="IDString" description="Unique ID specified by the subscriber."/>
        <field name="NegotiationMethod" id="2115" type="NegotiationMethod" description="RFS/RFQ - Quote messages sent in response. ESP - MassQuote messages sent in response. Order - not applicable."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="Specifies the product type for the requested instrument. 1-legged (SPT, FWD, FTO, NDF), 2-legged (SWP, NDS) and n-legged (BLK) order types. NOTE: This message is NOT to be used for FUT, SPR, IMM or OPT Security Types."/>
        <field name="SecurityGroup" id="1151" type="IDString" presence="optional" description="Conditionally populated if NegotiationMethod=ESP and VenueType=Taker. The name of the requested stream category. Bilaterally agreed between ECN and Maker."/>
        <field name="NumOfCompetitors" id="1913" type="NumOfCompetitors" description="0=Not in competition; -1=In competition (number of competitors unknown), n=In competition (Number of competitors); NULL=unknown."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple QuoteRequests."/>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSecurityType" id="609" type="SecurityType" description="Specifies the product type for this leg. Valid values: SPT, FWD, FTO, NDF."/>
            <field name="LegSide" id="624" type="Side" description="Side is from perspective of Taker and LegCurrency" />
            <field name="LegCurrency" id="556" type="Currency" description="Dealt currency. Specifies the denomination of the quantity fields in this Leg."/>
            <field name="LegOrderQty" id="685" type="DecimalQtyNULL" description="Conditionally required if NegotiationMethod=RFS/RFQ. Netted Order quantity for this Leg."/>
            <field name="LegSettlType" id="587" type="TenorType" description="Standard settlement Tenor when SecurityType=FWD/NDF/SWP/NDS/BLK. The end-of-settlement-period Tenor when SecurityType=FTO."/>
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if LegSettlType=BKN. When SecurityType=FWD/NDF/SWP/NDS/BLK, the broken date for settlement. When SecurityType=FTO, the end-of-settlement-period date."/>
            <field name="TimeOptionStartTenor" id="20024" type="TenorType" presence="optional" sinceVersion="19457" description="Conditionally required if SecurityType=FTO. The start-of-settlement-period Tenor."/>
            <field name="TimeOptionStartDate" id="20025" type="LocalMktDate" presence="optional" sinceVersion="19457" description="Conditionally required if TimeOptionStartTenor=BKN. The start-of-settlement-period date."/>

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if LegSecurityType=NDF.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>

                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoLegAllocs" id="670" dimensionType="groupSizeEncoding" description="Conditionally required if NegotiationMethod=RFS/RFQ - at least one Allocation must be specified per Leg."> <!-- A custom use of this component for this message type -->
                <field name="LegIndividualAllocID" id="672" type="IDString" description="Mandatory unique reference for this allocation."/>
                <field name="LegAllocAccount" id="671" type="IDString" presence="optional" description="Account mnemonic."/>
                <field name="LegAllocQty" id="673" type="DecimalQtyNULL" description="Quantity to be allocated to Account. Specified in terms of LegCurrency and LegSide (negative quantities allocate to the opposite side)."/>

                <group name="NoAllocRegulatoryFields" id="20080" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                    <field name="AllocRegulatoryKey" id="20081" type="AllocRegulatoryKey" description="Name of Regulatory field."/>
                    <data name="AllocRegulatoryValue" id="20082" type="VarText" description="Value of Regulatory field."/>
                </group>
                <group name="NoAllocPassthruFields" id="20070" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                    <data name="AllocPassthruKey" id="20071" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                    <data name="AllocPassthruValue" id="20072" type="VarText" description="Arbitrary value to be assigned to this element."/>
                </group>
            </group>

            <group name="NoLegRegulatoryFields" id="20060" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                <field name="LegRegulatoryKey" id="20061" type="LegRegulatoryKey" description="Name of Regulatory field."/>
                <data name="LegRegulatoryValue" id="20062" type="VarText" description="Value of Regulatory field."/>
            </group>
            <group name="NoLegPassthruFields" id="20050" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="LegPassthruKey" id="20051" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                <data name="LegPassthruValue" id="20052" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client. Assigned a Custom id to aid FIXT.1.1/SBE protocol conversion."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <group name="NoUnderlyings" id="711" dimensionType="groupSizeEncoding" sinceVersion="18656" description="Optionally populated if NegotiationMethod=ESP and supported by Venue. The number of FullAmount volume bands requested.">
            <field name="UnderlyingQty" id="879" type="DecimalQtyNULL" description="The volume band to be requested."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the request, provided by the Taker."/>
    </sbe:message>

    <sbe:message name="Quote" id="207" semanticType="S" description="Issued by Maker to publish a price in response to a corresponding QuoteRequest. A new quote replaces the previous, and may be marked Indicative (i.e. non-tradeable).">
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="QuoteReqID" id="131" type="IDString" description="Unique ID specified by the Taker."/>
        <field name="QuoteID" id="117" type="IDString128" description="Unique ID of this Quote specified by the Maker."/>
        <field name="QuoteType" id="537" type="QuoteType" description="Indicative/Tradeable price. When SecurityType=BLK/NDB, BidIsTradeable==OfferIsTradeable. Otherwise is specified independantly for Bid and Offer WRT base Currency (not the dealt). When SecurityType=SWP/NDS refers to the Far Leg side."/>
        <field name="ValidUntilTime" id="62" type="ValidUntilTime" description="Conditionally populated if originating QuoteRequest NegotiationMethod=RFQ. The time at which the single-shot Quote will expire."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="Specifies the product type for the requested instrument. 1-legged (SPT, FWD, FTO, NDF), 2-legged (SWP, NDS) and n-legged (BLK) order types. NOTE: This message is NOT to be used for FUT, SPR, IMM or OPT Security Types."/>

        <field name="BidSpotRate" id="188" type="PriceNULL" description="Conditionally populated if SecurityType=SWP/BLK, or SecurityType=SPT/FWD/FTO/NDF and overall net Side=Sell(Base)/Buy(Terms)/TwoWay. The quoted Bid Spot rate relating to this quote."/>
        <field name="MidPx" id="631" type="PriceNULL" description="Mid-Market spot rate."/><!-- Regulatory -->
        <field name="OfferSpotRate" id="190" type="PriceNULL" description="Conditionally populated if SecurityType=SWP/BLK, or SecurityType=SPT/FWD/FTO/NDF and overall net Side=Buy(Base)/Sell(Terms)/TwoWay. The quoted Offer Spot rate relating to this quote."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSecurityType" id="609" type="SecurityType" description="Specifies the product type for this leg. Valid values: SPT, FWD, FTO, NDF."/>
            <field name="LegSide" id="624" type="Side" description="Side is from perspective of LegCurrency" />
            <field name="LegSettlType" id="587" type="TenorType" description="Standard settlement Tenor when SecurityType=FWD/NDF/SWP/NDS/BLK. The end-of-settlement-period Tenor when SecurityType=FTO."/>
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if LegSettlType=BKN. When SecurityType=FWD/NDF/SWP/NDS/BLK, the broken date for settlement. When SecurityType=FTO, the end-of-settlement-period date."/>
            <field name="LegCurrency" id="556" type="Currency" description="Dealt currency. Specifies the denomination of the quantity fields in this Leg."/>
            <field name="LegOrderQty" id="685" type="DecimalQtyNULL" description="Required. Order quantity."/>
            <field name="LegBidPx" id="681" type="PriceNULL" description="Conditionally populated if LegSide=Sell(Base)/Buy(Terms)/TwoWay. All-in Bid rate."/>
            <field name="LegMidPx" id="2346" type="PriceNULL" description="Mid-Market All-in Price of this Leg."/><!-- Regulatory -->
            <field name="LegOfferPx" id="684" type="PriceNULL" description="Conditionally populated if LegSide=Buy(Base)/Sell(Terms)/TwoWay. All-in Offer rate."/>
            <field name="LegBidForwardPoints" id="1067" type="PriceNULL" description="Conditionally populated if LegSide=Sell(Base)/Buy(Terms)/TwoWay. The Bid FX forward points for this Leg. Value can be negative. Expressed in pips (not arithmetic), LegBidForwardPoints=(LegBidPx – SpotRate)/10^PipPosition. SpotRate may be either BidSpotRate or OfferSpotRate, depending on Maker pricing."/>
            <field name="LegOfferForwardPoints" id="1068" type="PriceNULL" description="Conditionally populated if LegSide=Buy(Base)/Sell(Terms)/TwoWay. The Offer FX forward points for this Leg. Value can be negative. Expressed in pips (not arithmetic), LegOfferForwardPoints=(LegOfferPx – SpotRate)/10^PipPosition. SpotRate may be either BidSpotRate or OfferSpotRate, depending on Maker pricing."/>
            <field name="TimeOptionStartTenor" id="20024" type="TenorType" presence="optional" sinceVersion="19457" description="Conditionally required if SecurityType=FTO. The start-of-settlement-period Tenor."/>
            <field name="TimeOptionStartDate" id="20025" type="LocalMktDate" presence="optional" sinceVersion="19457" description="Conditionally required if TimeOptionStartTenor=BKN. The start-of-settlement-period date."/>

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if LegSecurityType=NDF.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>

                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoLegPassthruFields" id="20050" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="LegPassthruKey" id="20051" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                <data name="LegPassthruValue" id="20052" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
    </sbe:message>

    <sbe:message name="MassQuote" id="208" semanticType="i" description="Used by Maker for publication of ESP price ladders by stream category.">
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/> <!-- Promoted from QuoteEntry -->
        <field name="QuoteReqID" id="131" type="IDString" description="Unique ID specified by the Taker."/>
        <field name="QuoteID" id="117" type="IDString128" description="Unique ID of this MassQuote specified by the Maker. Referenced in NewOrderMultileg.QuoteID for VWAP orders."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <group name="NoQuoteSets" id="296" dimensionType="mandatoryGroupSizeEncoding" description="One QuoteSet per Leg of stream category QuoteRequest.">
            <field name="QuoteSetID" id="302" type="uint32" semanticType="int" description="Unique ID representing Leg number. E.g. SWP Near=1, Far=2"/>
            <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/> <!-- Promoted from NoQuoteEntries -->
            <field name="SecurityType" id="167" type="SecurityType" description="Specifies the product type for the requested instrument. 1-legged (SPT, FWD, FTO, NDF) and 2-legged (SWP, NDS) order types. NOTE: This message is NOT to be used for FUT, SPR, BLK, IMM or OPT Security Types."/> <!-- Promoted from NoQuoteEntries -->
            <field name="SecurityGroup" id="1151" type="IDString" presence="optional" description="Conditionally populated if originating QuoteRequest NegotiationMethod=ESP and VenueType=Taker. The name of the requested stream category. Bilaterally agreed between ECN and Maker."/> <!-- Promoted from NoQuoteEntries -->
            <field name="SettlType" id="63" type="TenorType" description="Standard settlement Tenor when SecurityType=FWD/NDF/SWP/NDS/BLK. The end-of-settlement-period Tenor when SecurityType=FTO."/> <!-- Custom use of this tag.-->
            <field name="SettlDate" id="64" type="LocalMktDate" presence="optional" description="Conditionally required if LegSettlType=BKN. When SecurityType=FWD/NDF/SWP/NDS/BLK, the broken date for settlement. When SecurityType=FTO, the end-of-settlement-period date."/> <!-- Promoted from NoQuoteEntries -->
            <field name="TimeOptionStartTenor" id="20024" type="TenorType" presence="optional" sinceVersion="19457" description="Conditionally required if SecurityType=FTO. The start-of-settlement-period Tenor."/>
            <field name="TimeOptionStartDate" id="20025" type="LocalMktDate" presence="optional" sinceVersion="19457" description="Conditionally required if TimeOptionStartTenor=BKN. The start-of-settlement-period date."/>

            <group name="HasNDFFields" id="20009" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if SecurityType=NDF/NDS.">
                <field name="SettlCurrency" id="120" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS."/> <!-- Custom use of this tag. -->
                <field name="MaturityDate" id="541" type="LocalMktDate" presence="optional" description="Specifies the Fixing Date for this Leg of NDF/NDS."/> <!-- Promoted from NoQuoteEntries -->
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>

                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoQuoteEntries" id="295" dimensionType="groupSizeEncoding" description="One QuoteEntry per ladder rung, per Leg, and when Basket ESP/RFS, per Side.)">
                <field name="QuoteEntryID" id="299" type="IDString128" description="Unique ID of this Quote Rung specified by the Maker. Referenced in NewOrderMultileg.QuoteID for Sweepable and FullAmount orders."/>
                <field name="ValidUntilTime" id="62" type="ValidUntilTime" description="Optionally populated by Maker. The time at which the Quote will expire."/>
                <field name="QuoteType" id="537" type="QuoteType" description="Indicative/Tradeable price. Can be specified independantly for Bid and Offer."/>
                <field name="Currency" id="15" type="Currency" description="Specifies the denomination of the quantity fields in this Rung."/>
                <field name="BidSize" id="134" type="DecimalQtyNULL" description="Bid quantity in this Rung."/>
                <field name="OfferSize" id="135" type="DecimalQtyNULL" description="Offer quantity in this Rung."/>
                <field name="BidPx" id="132" type="PriceNULL" description="All-in Bid rate for this Rung."/>
                <field name="MidPx" id="631" type="PriceNULL" description="All-in Mid-Market rate for this Rung."/><!-- Regulatory -->
                <field name="OfferPx" id="133" type="PriceNULL" description="All-in Offer rate for this Rung."/>

                <group name="HasExtendedBidFields" id="20022" dimensionType="conditionalGroupSizeEncoding" description="When VenueType=Taker should be 1 if BidPx is populated. When VenueType=Maker will be 1 when full Bid price details are provided by Venue, 0 otherwise.">
                    <field name="BidSpotRate" id="188" type="PriceNULL" description="Conditionally populated if SecurityType=SPT/FWD/FTO/NDF/SWP/NDS. The quoted Bid Spot rate relating to this Rung."/>
                    <field name="BidForwardPoints" id="189" type="PriceNULL" description="The Bid FX forward points for this Rung. Value can be negative. Expressed in pips (not arithmetic), LegBidForwardPoints=(LegBidPx – BidSpotRate)/10^PipPosition."/>
                </group>
                <group name="HasExtendedOfferFields" id="20023" dimensionType="conditionalGroupSizeEncoding" description="When VenueType=Taker should be 1 if OfferPx is populated. When VenueType=Maker will be 1 when full Offer price details are provided by Venue, 0 otherwise.">
                    <field name="OfferSpotRate" id="190" type="PriceNULL" description="Conditionally populated if SecurityType=SPT/FWD/FTO/NDF/SWP/NDS. The quoted Offer Spot rate relating to this Rung."/>
                    <field name="OfferForwardPoints" id="191" type="PriceNULL" description="The Offer FX forward points for this Rung. Value can be negative. Expressed in pips (not arithmetic), LegOfferForwardPoints=(LegOfferPx – OfferSpotRate)/10^PipPosition."/>
                </group>

                <group name="NoEntryPassthruFields" id="20090" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                    <data name="EntryPassthruKey" id="20091" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/> <!-- E.g. EBS Ultra MarketRegion -->
                    <data name="EntryPassthruValue" id="20092" type="VarText" description="Arbitrary value to be assigned to this element."/>
                </group>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
    </sbe:message>

    <sbe:message name="QuoteCancel" id="210" semanticType="Z" description="Optionally used by Maker to withdraw the previously published Quote or MassQuote. The Maker may alternatively mark a Quote or MassQuote as Indicative.">
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/> <!-- Custom use of this tag. -->
        <field name="QuoteReqID" id="131" type="IDString" description="Unique ID specified by the Taker."/>
        <field name="QuoteID" id="117" type="IDString128" description="Unique ID of the previously published Quote or MassQuote to be withdrawn, specified by the Maker."/>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>
    </sbe:message>

    <sbe:message name="QuoteResponse" id="209" semanticType="AJ" description="Issued by Maker to reject a new QuoteRequest, or by Taker, Maker or ECN to terminate an active QuoteRequest.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="QuoteReqID" id="131" type="IDString" description="Unique ID specified by the subscriber."/>
        <field name="QuoteRespType" id="694" type="QuoteRespType" description="Reason for termination of QuoteRequest."/>
        <field name="QuoteRequestRejectReason" id="658" type="QuoteRequestRejectReason" description="Conditionally populated if QuoteRespType=Pass. Reason for rejection of QuoteRequest. Refer to Text field for additional detail."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple QuoteRequests."/>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the termination."/>
    </sbe:message>

<!--
 *
 * Trading Messages - Orders (RFQ, RFS, ESP, Order Matching) and Executions.
 *
 -->

    <sbe:message name="NewOrderMultileg" id="301" semanticType="AB" description="Issued to submit an Order (either in response to a CLOB MarketData stream, or against a published ESP/RFS Quote). To be used for 1-legged (SPT, FWD, NDF, FUT), 2-legged (SWP, NDS, SPR) and n-legged (BLK) order types.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="OrderRequestID" id="2422" type="IDString" presence="optional" description="Conditionally populated if OrdType=PreviouslyQuoted. References back to the originating QuoteReqID so as to associate Order with earlier MassQuote (ESP) or Quote (RFS) messages and aid support."/> <!--NOTE: FIX defines this tag as an int. -->
        <field name="QuoteID" id="117" type="IDString128" presence="optional" description="Conditionally populated if OrdType=PreviouslyQuoted. If NegotiationMethod=RFS/RFQ then contains QuoteID of Quote. If NegotiationMethod=ESP then contains either QuoteEntryID (for Sweep/FullAmount trades), or the overall QuoteID (for VWAP trades) of MassQuote."/>
        <field name="ClOrdID" id="11" type="IDString" description="The Originator-assigned Order Identifier. If created by Client, then must be unique for trading week."/>
        <field name="OrdType" id="40" type="OrdType"/>
        <field name="TimeInForce" id="59" type="TimeInForce"/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="Specifies the product type for the traded instrument. 1-legged (SPT, FWD, FTO, NDF, FUT), 2-legged (SWP, NDS, SPR) and n-legged (BLK, NDB) order types. NOTE: This message is NOT to be used for IMM or OPT Security Types."/>
        <field name="SecurityGroup" id="1151" type="IDString" presence="optional" description="Conditionally populated if originating QuoteRequest NegotiationMethod=ESP and VenueType=Taker; here it isthe name of the requested stream category as bilaterally agreed between ECN and Maker. Also conditionally required on those order-matching Venues that offer multiple liquidity pools for the same security; e.g. EBS standard vs eFix."/>
        <field name="Price" id="44" type="PriceNULL" description="Conditionally populated for all non-Market order types. If OrdType=PreviouslyQuoted then represents the dealt Spot price: LegPrice - Price=Leg Fwd Pts (not applicable for VWAP trading, where only LegPrice should be provided). Otherwise represents the Order Limit price."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>

        <group name="HasExtendedOrderFields" id="20005" dimensionType="conditionalGroupSizeEncoding" description="Conditionally populated if necessary for desired order type.">
            <field name="EffectiveTime" id="168" type="UTCTimestamp" presence="optional" description="Timestamp when the Order will be entered to the market."/>
            <field name="ExpireTime" id="126" type="UTCTimestamp" presence="optional" description="Conditionally populated if TimeInForce=GTD. Timestamp when the Order will be cancelled."/>
            <field name="ExposureDuration" id="1629" type="uInt32NULL" description="Conditionally populated if TimeInForce=GFT. Number of milliseconds after which the Order will be cancelled."/>
            <field name="StopPx" id="99" type="PriceNULL" description="Stop price. Only required if this order is a Stop-type order."/>
            <field name="MinQty" id="110" type="DecimalQtyNULL" description="Minimum quantity to execute, used to prevent partial fills under the defined quantity. If the Order quantity drops below this value due to a fill, the Order will be cancelled."/>
            <field name="MaxShow" id="210" type="DecimalQtyNULL" description="If supported by Venue and specified, defines Iceberg tip-size. Otherwise, will default to OrderQty."/><!-- TODO Or MoreQuantity -->
            <field name="DiscretionOffsetValue" id="389" type="PriceNULL" description="If supported by Venue, arithmetic (not pip) value added to, or subtracted from, Price to define the worst price the trader will accept."/>
            <field name="PegPriceType" id="1094" type="PegPriceType" presence="optional" description="Conditionally required if OrdType=Pegged. Defines the type of Peg."/>
            <field name="PegOffsetValue" id="211" type="PriceNULL" description="Conditionally required if OrdType=Pegged. Specifies the Order price offset below or above the pegged market rate, units are as per PegOffsetType."/>
            <field name="PegOffsetType" id="836" type="PegOffsetType" sinceVersion="19458" description="Conditionally required if OrdType=Pegged. Type of Peg Offset value."/>

            <group name="NoStrategyParameters" id="957" dimensionType="groupSizeEncoding" description="Conditionally populated if additional parameters are required for specified OrdType and TimeInForce.">
                <field name="StrategyParameterType" id="959" type="StrategyParameterType" description="FIX datatype of Order parameter."/>
                <data name="StrategyParameterName" id="958" type="VarText" description="Name of Order parameter."/>
                <data name="StrategyParameterValue" id="960" type="VarText" description="Value of Order parameter."/>
            </group>
        </group>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSecurityType" id="609" type="SecurityType" description="Specifies the product type for this leg. Valid values: SPT, FWD, FTO, NDF, FUT."/>
            <field name="LegSide" id="624" type="Side" description="Side is from perspective of LegCurrency" />
            <field name="LegCurrency" id="556" type="Currency" presence="optional" description="Conditionally populated if SecurityType!=FUT/SPR. Dealt currency, specifies the denomination of the quantity fields in this Leg."/>
            <field name="LegPrice" id="566" type="PriceNULL" description="Conditionally populated if OrdType!=Market. All-in Order limit price. LegPrice-Price=LegFwdPts (not currently populated). Not populated when SecurityType=SPR."/>
            <field name="LegOrderQty" id="685" type="DecimalQtyNULL" description="Required. Order quantity."/>
            <field name="LegSettlType" id="587" type="TenorType" description="Standard settlement Tenor when SecurityType=FWD/NDF/SWP/NDS/BLK. The end-of-settlement-period Tenor when SecurityType=FTO."/>
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if LegSettlType=BKN. When SecurityType=FWD/NDF/SWP/NDS/BLK, the broken date for settlement. When SecurityType=FTO, the end-of-settlement-period date."/>
            <field name="TimeOptionStartTenor" id="20024" type="TenorType" presence="optional" sinceVersion="19457" description="Conditionally required if SecurityType=FTO. The start-of-settlement-period Tenor."/>
            <field name="TimeOptionStartDate" id="20025" type="LocalMktDate" presence="optional" sinceVersion="19457" description="Conditionally required if TimeOptionStartTenor=BKN. The start-of-settlement-period date."/>

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if LegSecurityType=NDF.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>

                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoLegAllocs" id="670" dimensionType="mandatoryGroupSizeEncoding" description="At least one Allocation must be specified per Leg.">
                <field name="LegIndividualAllocID" id="672" type="IDString" description="Mandatory unique reference for this allocation."/>
                <field name="LegAllocAccount" id="671" type="IDString" presence="optional" description="Account mnemonic."/>
                <field name="LegAllocQty" id="673" type="DecimalQtyNULL" description="Quantity to be allocated to Account. Specified in terms of LegCurrency and LegSide (negative quantities allocate to the opposite side)."/>

                <group name="NoAllocRegulatoryFields" id="20080" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                    <field name="AllocRegulatoryKey" id="20081" type="AllocRegulatoryKey" description="Name of Regulatory field."/>
                    <data name="AllocRegulatoryValue" id="20082" type="VarText" description="Value of Regulatory field."/>
                </group>
                <group name="NoAllocPassthruFields" id="20070" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                    <data name="AllocPassthruKey" id="20071" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                    <data name="AllocPassthruValue" id="20072" type="VarText" description="Arbitrary value to be assigned to this element."/>
                </group>
            </group>

            <group name="NoLegRegulatoryFields" id="20060" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                <field name="LegRegulatoryKey" id="20061" type="LegRegulatoryKey" description="Name of Regulatory field."/>
                <data name="LegRegulatoryValue" id="20062" type="VarText" description="Value of Regulatory field."/>
            </group>
            <group name="NoLegPassthruFields" id="20050" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="LegPassthruKey" id="20051" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                <data name="LegPassthruValue" id="20052" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF.">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the Order, provided by the Originator."/>
    </sbe:message>

    <sbe:message name="MultilegOrderCancelReplaceRequest" id="302" semanticType="AC" description="Modify an outstanding order.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="ClOrdID" id="11" type="IDString" description="The Originator-assigned Order Identifier of *this* OrderCancelReplaceRequest. If created by Client, then must be unique for trading week."/>
        <field name="OrigClOrdID" id="41" type="IDString" description="ClOrdID of the Order to be replaced."/>
        <field name="OrderID" id="37" type="IDString" description="The Maker/ECN-assigned Order ID."/>
        <field name="OrdType" id="40" type="OrdType"/>
        <field name="TimeInForce" id="59" type="TimeInForce" description="The original order time in force."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="Specifies the product type for the traded instrument. 1-legged (SPT, FWD, NDF, FUT), 2-legged (SWP, NDS, SPR) and n-legged (BLK, NDB) order types. NOTE: This message is NOT to be used for IMM or OPT Security Types."/>
        <field name="Price" id="44" type="PriceNULL" description="The NEW order price, if changing, or the original price if not. "/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>
        <field name="ExecInst" id="18" type="ExecInst" presence="optional" sinceVersion="18944" description="Optionally populated, to suspend or resume order execution."/>

        <group name="HasExtendedOrderFields" id="20005" dimensionType="conditionalGroupSizeEncoding" description="Conditionally populated if necessary for desired order type.">
            <field name="EffectiveTime" id="168" type="UTCTimestamp" presence="optional" description="Timestamp when the Order will be entered to the market."/>
            <field name="ExpireTime" id="126" type="UTCTimestamp" presence="optional" description="Conditionally populated if TimeInForce=GTD. Timestamp when the Order will be cancelled."/>
            <field name="ExposureDuration" id="1629" type="uInt32NULL" description="Conditionally populated if TimeInForce=GFT. Number of milliseconds after which the Order will be cancelled."/>
            <field name="StopPx" id="99" type="PriceNULL" description="Stop price. Only required if this order is a Stop-type order."/>
            <field name="MinQty" id="110" type="DecimalQtyNULL" description="Minimum quantity to execute, used to prevent partial fills under the defined quantity. If the Order quantity drops below this value due to a fill, the Order will be cancelled."/>
            <field name="MaxShow" id="210" type="DecimalQtyNULL" description="If supported by Venue and specified, defines Iceberg tip-size. Zero represents 'Dark', otherwise 'Lit'. Maximum value is OrderQty."/><!-- TODO Or MoreQuantity -->
            <field name="DiscretionOffsetValue" id="389" type="PriceNULL" description="If supported by Venue, added to Price to define the worst price the trader will accept."/>
            <field name="PegPriceType" id="1094" type="PegPriceType" presence="optional" description="Conditionally required if OrdType=Pegged. Defines the type of Peg."/>
            <field name="PegOffsetValue" id="211" type="PriceNULL" description="Conditionally required if OrdType=Pegged. Specifies the Order price offset below or above the pegged market rate, units are as per PegOffsetType."/>
            <field name="PegOffsetType" id="836" type="PegOffsetType" sinceVersion="19458" description="Conditionally required if OrdType=Pegged. Type of Peg Offset value."/>

            <group name="NoStrategyParameters" id="957" dimensionType="groupSizeEncoding" description="Conditionally populated if additional parameters are required for specified OrdType and TimeInForce.">
                <field name="StrategyParameterType" id="959" type="StrategyParameterType" description="FIX datatype of Order parameter."/>
                <data name="StrategyParameterName" id="958" type="VarText" description="Name of Order parameter."/>
                <data name="StrategyParameterValue" id="960" type="VarText" description="Value of Order parameter."/>
            </group>
        </group>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSecurityType" id="609" type="SecurityType" description="Specifies the product type for this leg. Valid values: SPT, FWD, NDF, FUT."/>
            <field name="LegSide" id="624" type="Side" description="The ORIGINAL order side. Side is from perspective of LegCurrency" />
            <field name="LegCurrency" id="556" type="Currency" presence="optional" description="Conditionally populated if SecurityType!=FUT/SPR. Dealt currency, specifies the denomination of the quantity fields in this Leg."/>
            <field name="LegPrice" id="566" type="PriceNULL" description="Conditionally populated if OrdType!=Market. All-in Order limit price. LegPrice-Price=LegFwdPts (not currently populated)."/>
            <field name="LegOrderQty" id="685" type="DecimalQtyNULL" description="Required. The NEW order quantity, if changing, or the original order quantity if not."/>
            <field name="LegSettlType" id="587" type="TenorType" description="Specifies a standard Tenor for settlement."/>
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if SettlType=BKN. Specifies the broken date for settlement."/>

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if LegSecurityType=NDF.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>
                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoLegRegulatoryFields" id="20060" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                <field name="LegRegulatoryKey" id="20061" type="LegRegulatoryKey" description="Name of Regulatory field."/>
                <data name="LegRegulatoryValue" id="20062" type="VarText" description="Value of Regulatory field."/>
            </group>
            <group name="NoLegPassthruFields" id="20050" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="LegPassthruKey" id="20051" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                <data name="LegPassthruValue" id="20052" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the Order, provided by the Originator."/>
    </sbe:message>

    <sbe:message name="OrderCancelRequest" id="303" semanticType="F" description="Cancel an outstanding order.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="ClOrdID" id="11" type="IDString" description="The Originator-assigned Order Identifier of *this* OrderCancelRequest. If created by Client, then must be unique for trading week."/>
        <field name="OrigClOrdID" id="41" type="IDString" description="ClOrdID of the Order to be Cancelled."/>
        <field name="OrderID" id="37" type="IDString" description="The Maker/ECN-assigned Order ID."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the Order, provided by the Originator."/>
    </sbe:message>

    <sbe:message name="OrderCancelReject" id="304" semanticType="9" description="Sent by Maker to reject an OrderCancelReplaceRequest or OrderCancelRequest.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="ClOrdID" id="11" type="IDString" description="The ClOrdID of the OrderCancelReplaceRequest or OrderCancelRequest."/>
        <field name="OrigClOrdID" id="41" type="IDString" description="The ClOrdID of the Order that was to be replaced or cancelled."/>
        <field name="OrderID" id="37" type="IDString" description="The Maker/ECN-assigned Order ID."/>
        <field name="OrdStatus" id="39" type="OrdStatus" description="Defines the current state of the Order."/>
        <field name="CxlRejReason" id="102" type="CxlRejReason" description="The reason that the OrderCancelRequest was rejected. Refer to Text field for additional detail."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string detailing the rejection."/>
    </sbe:message>

    <sbe:message name="OrderTimeout" id="305" semanticType="U1" description="Sent by Order Originator to flag an Order for which no ExecutionReport was received within the allowed time window.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="ClOrdID" id="11" type="IDString" description="The ClOrdID of the timed-out Order."/>
        <field name="OrderID" id="37" type="IDString" description="The Maker/ECN-assigned Order ID."/>
        <field name="OrdStatus" id="39" type="OrdStatus" description="Defines the current state of the Order."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the timeout, provided by the Order Originator."/>
    </sbe:message>

    <sbe:message name="ExecutionReport" id="306" semanticType="8" description="Maker/ECN responses for order actions and events.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="OrderRequestID" id="2422" type="IDString" presence="optional" description="Must contain the value provided in the originating NewOrderMultileg. Used to associate Order with earlier MassQuote (ESP) or Quote (RFS) messages, to aid support."/> <!--NOTE: FIX defines this tag as an int. -->
        <field name="ClOrdID" id="11" type="IDString" description="The current ClOrdID of the Order. Can differ from the originally submitted value on the NewOrderMultileg if, for example, modifications have been made."/>
        <field name="OrigClOrdID" id="41" type="IDString" presence="optional" description="Conditionally populated when VenueType=CLOB. The ClOrdID of the original value submitted on the NewOrderMultileg."/>
        <field name="OrderID" id="37" type="IDString" description="The Maker/ECN-assigned Order ID."/>
        <field name="ExecID" id="17" type="IDString" description="Unique identifier for this ExecutionReport."/>
        <field name="ExecRefID" id="19" type="IDString" presence="optional" description="Conditionally populated when VenueType=CLOB and ExecType=Trade. Used to link back to a preceding ExecutionReport when ExecType IN {PendingMatch, TradeCorrect, TradeCancel (busts)}, identifier for the ExecutionReport of the trade that was corrected or cancelled."/>
        <field name="OrdType" id="40" type="OrdType" description="Not populated when SessionType=DropCopy."/>
        <field name="TimeInForce" id="59" type="TimeInForce" description="Not populated when SessionType=DropCopy."/>
        <field name="OrdStatus" id="39" type="OrdStatus" description="Defines the current state of the Order. Not populated when SessionType=DropCopy."/>
        <field name="ExecType" id="150" type="ExecType"/>
        <field name="OrdRejReason" id="103" type="OrdRejReason" description="Conditionally populated if ExecType=Rejected. The reason that the Order was rejected. Refer to Text field for additional detail."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="1-legged (SPT, FWD, FTO, NDF, FUT), 2-legged (SWP, NDS, SPR) and n-legged (BLK) order types. NOTE: This message is NOT to be used for IMM or OPT Security Types."/>
        <field name="SecurityGroup" id="1151" type="IDString" presence="optional" description="Conditionally populated if originating QuoteRequest NegotiationMethod=ESP and VenueType=Taker; here it isthe name of the requested stream category as bilaterally agreed between ECN and Maker. Also conditionally required on those Order Matching Venue that offer multiple liquidity pools for the same security; e.g. EBS standard vs eFix."/>
        <field name="TradeDate" id="75" type="LocalMktDate" description="Indicates date of trading day (expressed in local time at place of trade)."/>
        <field name="LastSpotRate" id="194" type="PriceNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Spot Price on this (last) fill. LastSpotRate=LegLastPx-(LegLastForwardPoints*10^PipPosition)."/>
        <field name="MidPx" id="631" type="PriceNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Mid-Market Spot Price on this (last) fill."/><!-- Regulatory -->
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>
        <field name="SecondaryExecID" id="527" type="IDString" presence="optional" sinceVersion="18944" description="Optional ID specified by the venue to group multiple fills."/>
        <field name="ExecRestatementReason" id="378" type="ExecRestatementReason" presence="optional" sinceVersion="18944" description="Conditionally populated when ExecType=Restated, the reason for restatement."/>
        <field name="Price" id="44" type="PriceNULL" sinceVersion="19458" description="Conditionally populated for all non-Market/PreviouslyQuoted order types. Represents the Order Limit price."/>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details.">
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

        <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSecurityType" id="609" type="SecurityType" description="Specifies the product type for this leg. Valid values: SPT, FWD, FTO, NDF, FUT."/>
            <field name="LegSide" id="624" type="Side" description="Side is from perspective of LegCurrency" />
            <field name="LegCurrency" id="556" type="Currency" description="Dealt currency. Specifies the denomination of the quantity fields in this Leg."/>
            <field name="LegPrice" id="566" type="PriceNULL" description="All-in Order limit price of Leg. Not required on all Order types (for example, Market order). Not populated when SessionType=DropCopy."/>
            <field name="LegMidPx" id="2346" type="PriceNULL" presence="optional" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Mid-Market All-in Price of Leg for this particular fill."/><!-- Regulatory -->
            <field name="LegLastPx" id="637" type="PriceNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. All-in Price of Leg for this particular fill. LegLastPx=LastSpotRate+(LegLastForwardPoints*10^PipPosition)."/>
            <field name="LegAvgPx" id="20002" type="PriceNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Average Price of Leg including this particular fill. LegAvgPx = SUM(LegLastPx*LegLastQty)/LegCumQty."/>
            <field name="LegLastForwardPoints" id="1073" type="PriceNULL" description="Conditionally required for Maker. For Taker this is populated when available from Venue, when ExecType=Calculated/Trade and SecurityType!=FUT/SPR. FX forward points (pips, not arithmetic) of Leg. May be a negative value. Zero if LegSettlType=SPT. LegLastForwardPoints=(LegLastPx-LastSpotRate)/10^PipPosition."/>
            <field name="LegOrderQty" id="685" type="DecimalQtyNULL" description="Not populated when SessionType=DropCopy, required otherwise. The original Order quantity."/>
            <field name="LegLastQty" id="1418" type="DecimalQtyNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Specifies the dealt amount for this particular fill on this Leg."/>
            <field name="LegCalculatedCcyLastQty" id="1074" type="DecimalQtyNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Specifies the contra amount for this particular fill on this Leg. If LegCurrency is LHS then=LegLastQty*LegLastPx; if LegCurrency is RHS then=LegLastQty/LegLastPx (rounded to the precision of LegLastQty, half-up)."/>
            <field name="LegCumQty" id="20016" type="DecimalQtyNULL" description="Total quantity filled so far on this Leg of the Order."/>
            <field name="LegLeavesQty" id="20017" type="DecimalQtyNULL" description="Quantity remaining to execute on this Leg of the Order."/>
            <field name="LegSettlType" id="587" type="TenorType" description="Standard settlement Tenor when SecurityType=FWD/NDF/SWP/NDS/BLK. The end-of-settlement-period Tenor when SecurityType=FTO."/>
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if LegSettlType=BKN. When SecurityType=FWD/NDF/SWP/NDS/BLK, the broken date for settlement. When SecurityType=FTO, the end-of-settlement-period date."/>
            <field name="TimeOptionStartTenor" id="20024" type="TenorType" presence="optional" sinceVersion="19457" description="Conditionally required if SecurityType=FTO. The start-of-settlement-period Tenor."/>
            <field name="TimeOptionStartDate" id="20025" type="LocalMktDate" presence="optional" sinceVersion="19457" description="Conditionally required if TimeOptionStartTenor=BKN. The start-of-settlement-period date."/>

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if LegSecurityType=NDF.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>

                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoLegAllocs" id="670" dimensionType="mandatoryGroupSizeEncoding" description="At least one Allocation must be specified per Leg.">
                <field name="LegIndividualAllocID" id="672" type="IDString" description="Mandatory unique reference for this allocation."/>
                <field name="LegAllocAccount" id="671" type="IDString" presence="optional" description="Account mnemonic."/>
                <field name="LegAllocQty" id="673" type="DecimalQtyNULL" description="Quantity to be allocated to Account. Specified in terms of LegCurrency and LegSide (negative quantities allocate to the opposite side). If ExecType=Calculated/Trade then ABS (SUM (LegAllocQty))=LegLastQty, otherwise ABS (SUM (LegAllocQty))=LegOrderQty."/>
                <field name="LegAllocCalculatedCcyQty" id="20015" type="DecimalQtyNULL" description="Conditionally required if ExecType=Calculated/Trade and SecurityType!=FUT/SPR. Quantity to be allocated to Account, expressed in contra currency. Allocation direction expressed arithmetically ABS (SUM (LegAllocCalculatedCcyQty))=LegCalculatedCcyLastQty (but may be subject to accumulated rounding errors). If LegCurrency is LHS then=-LegAllocQty*LegLastPx; if LegCurrency is RHS then=-LegAllocQty/LegLastPx (rounded to the precision of LegAllocQty, half-up)."/>

                <group name="NoAllocRegulatoryFields" id="20080" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                    <field name="AllocRegulatoryKey" id="20081" type="AllocRegulatoryKey" description="Name of Regulatory field."/>
                    <data name="AllocRegulatoryValue" id="20082" type="VarText" description="Value of Regulatory field."/>
                </group>
                <group name="NoAllocPassthruFields" id="20070" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                    <data name="AllocPassthruKey" id="20071" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                    <data name="AllocPassthruValue" id="20072" type="VarText" description="Arbitrary value to be assigned to this element."/>
                </group>
            </group>

            <group name="NoLegRegulatoryFields" id="20060" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                <field name="LegRegulatoryKey" id="20061" type="LegRegulatoryKey" description="Name of Regulatory field."/>
                <data name="LegRegulatoryValue" id="20062" type="VarText" description="Value of Regulatory field."/>
            </group>
            <group name="NoLegPassthruFields" id="20050" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="LegPassthruKey" id="20051" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                <data name="LegPassthruValue" id="20052" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <group name="HasExtendedOrderFields" id="20005" dimensionType="conditionalGroupSizeEncoding" sinceVersion="19458" description="Conditionally populated when specified in originating order, echoes provided parameters back to the client.">
            <field name="EffectiveTime" id="168" type="UTCTimestamp" presence="optional" description="Timestamp when the Order was, or will be entered to the market."/>
            <field name="ExpireTime" id="126" type="UTCTimestamp" presence="optional" description="Conditionally populated if TimeInForce=GTD. Timestamp when the Order was, or will be cancelled."/>
            <field name="ExposureDuration" id="1629" type="uInt32NULL" description="Conditionally populated if TimeInForce=GFT. Number of milliseconds after which the Order was, or will be cancelled."/>
            <field name="StopPx" id="99" type="PriceNULL" description="Stop price. Only required if this order is a Stop-type order."/>
            <field name="MinQty" id="110" type="DecimalQtyNULL" description="Minimum quantity to execute, used to prevent partial fills under the defined quantity. If the Order quantity drops below this value due to a fill, the Order will be cancelled."/>
            <field name="MaxShow" id="210" type="DecimalQtyNULL" description="If supported by Venue and specified, defines Iceberg tip-size. Otherwise, will default to OrderQty."/>
            <field name="DiscretionOffsetValue" id="389" type="PriceNULL" description="If supported by Venue, arithmetic (not pip) value added to, or subtracted from, Price to define the worst price the trader will accept."/>
            <field name="PegPriceType" id="1094" type="PegPriceType" presence="optional" description="Conditionally required if OrdType=Pegged. Defines the type of Peg."/>
            <field name="PegOffsetValue" id="211" type="PriceNULL" description="Conditionally required if OrdType=Pegged. Specifies the Order price offset below or above the pegged market rate, units are as per PegOffsetType."/>
            <field name="PegOffsetType" id="836" type="PegOffsetType" sinceVersion="19458" description="Conditionally required if OrdType=Pegged. Type of Peg Offset value."/>

            <group name="NoStrategyParameters" id="957" dimensionType="groupSizeEncoding" description="Conditionally populated if additional parameters were provided for specified OrdType and TimeInForce.">
                <field name="StrategyParameterType" id="959" type="StrategyParameterType" description="FIX datatype of Order parameter."/>
                <data name="StrategyParameterName" id="958" type="VarText" description="Name of Order parameter."/>
                <data name="StrategyParameterValue" id="960" type="VarText" description="Value of Order parameter."/>
            </group>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the execution, provided by the Maker."/>
    </sbe:message>

    <sbe:message name="ExecutionAck" id="307" semanticType="BN" description="Originator response to ExecutionReport.">
        <field name="HeaderFlags" id="20003" type="HeaderFlags" description="HeaderFlags.PossDupFlag=TRUE if message is being resent in response to an identified sequence number gap."/>
        <field name="OrigSendingTime" id="122" type="UTCTimestamp" description="Conditionally populated if HeaderFlags.PossDupFlag=TRUE. The sendingTime of the original message."/>
        <field name="TradingFlags" id="20004" type="TradingFlags" description="TradingFlags.IsSynthetic=TRUE if message is generated by Whisperer to ensure a standard normalised workflow, FALSE if message originated from the Venue. NOTE: pending name change as per https://confluence.marketfactory.com/x/dBhTB."/>
        <field name="TransactTime" id="60" type="UTCTimestamp" description="Timestamp when the business transaction represented by the message occurred. Mandatory in Client message to Venue."/>
        <field name="OrderRequestID" id="2422" type="IDString" presence="optional" description="Must contain the value provided in the originating NewOrderMultileg. Used to associate Order with earlier Market Data (ESP) or Quote (RFS) messages, to aid support."/> <!--NOTE: FIX defines this tage as an int. -->
        <field name="ClOrdID" id="11" type="IDString" description="The current ClOrdID of the Order. Can differ from the originally submitted value on the NewOrderMultileg if, for example, edits have been made."/>
        <field name="OrderID" id="37" type="IDString" description="The Maker/ECN-assigned Order ID."/>
        <field name="ExecID" id="17" type="IDString" description="Unique identifier of the referenced ExecutionReport."/>
        <field name="ExecAckStatus" id="1036" type="ExecAckStatus" description="Confirms or denys Maker ExecutionReport - whatever it's state."/>
        <field name="Symbol" id="55" type="Symbol" description="Symbol of requested Instrument."/>
        <field name="SecurityType" id="167" type="SecurityType" description="1-legged (SPT, FWD, FTO, NDF, FUT), 2-legged (SWP, NDS, SPR) and n-legged (BLK) order types. NOTE: This message is NOT to be used for IMM or OPT Security Types."/>
        <field name="RegulatoryBodies" id="20021" type="RegulatoryBodies" description="Bitmap field of Boolean type Regulation elegibility flags."/>
        <field name="LinkID" id="20001" type="IDString" presence="optional" sinceVersion="18656" description="Optional ID specified by the subscriber to group multiple orders."/>

        <group name="NoPartyIDs" id="453" dimensionType="groupSizeEncoding" description="Order Origination/Execution counterparty details."> <!-- Custom use of this repeating group. -->
            <field name="PartyRole" id="452" type="PartyRole" description="Name of Party field."/>
            <data name="PartyID" id="448" type="VarText" description="Value of Party field."/>
        </group>

       <group name="NoLegs" id="555" dimensionType="mandatoryGroupSizeEncoding" description="One Leg per value date. At least one Leg must be specified.">
            <field name="LegSecurityType" id="609" type="SecurityType" description="Specifies the product type for this leg. Valid values: SPT, FWD, FTO, NDF, FUT."/>
            <field name="LegSide" id="624" type="Side" description="Side is from perspective of LegCurrency" />
            <field name="LegCurrency" id="556" type="Currency" description="Dealt currency. Specifies the denomination of the quantity fields in this Leg."/>
            <field name="LegLastPx" id="637" type="PriceNULL" description="Conditionally required if specified on the ExecutionReport. All-in Price of Leg for this last fill. LegLastPx=LastSpotRate+(LegLastForwardPoints*10^PipPosition)."/>
            <field name="LegAvgPx" id="20002" type="PriceNULL" description="Conditionally required if specified on the ExecutionReport. Average Price of Leg including this particular fill. LegAvgPx = SUM(LegLastPx*LegLastQty)/LegCumQty."/>
            <field name="LegLastForwardPoints" id="1073" type="PriceNULL" description="Conditionally required if specified on the ExecutionReport. FX forward points (pips, not arithmetic) of Leg. May be a negative value. Zero if LegSettlType=SPT. LegLastForwardPoints=(LegLastPx-LastSpotRate)/10^PipPosition."/>
            <field name="LegOrderQty" id="685" type="DecimalQtyNULL" description="Required. Order quantity."/>
            <field name="LegLastQty" id="1418" type="DecimalQtyNULL" description="Conditionally required if specified on the ExecutionReport. Specifies the dealt amount for this Leg."/>
            <field name="LegCumQty" id="20016" type="DecimalQtyNULL" description="Total quantity filled on this Leg of the Order."/>
            <field name="LegLeavesQty" id="20017" type="DecimalQtyNULL" description="Quantity remaining to execute on this Leg of the Order."/>
            <field name="LegSettlType" id="587" type="TenorType" description="Standard settlement Tenor when SecurityType=FWD/NDF/SWP/NDS/BLK. The end-of-settlement-period Tenor when SecurityType=FTO."/>
            <field name="LegSettlDate" id="588" type="LocalMktDate" presence="optional" description="Conditionally required if LegSettlType=BKN. When SecurityType=FWD/NDF/SWP/NDS/BLK, the broken date for settlement. When SecurityType=FTO, the end-of-settlement-period date."/>
            <field name="TimeOptionStartTenor" id="20024" type="TenorType" presence="optional" sinceVersion="19457" description="Conditionally required if SecurityType=FTO. The start-of-settlement-period Tenor."/>
            <field name="TimeOptionStartDate" id="20025" type="LocalMktDate" presence="optional" sinceVersion="19457" description="Conditionally required if TimeOptionStartTenor=BKN. The start-of-settlement-period date."/>

            <group name="HasLegNDFFields" id="20010" dimensionType="conditionalGroupSizeEncoding" description="Conditionally required if LegSecurityType=NDF.">
                <field name="LegSettlCurrency" id="675" type="Currency" description="Specifies the fixing currency of this Leg of NDF/NDS/NDB."/> <!-- Custom use of this tag. -->
                <field name="LegMaturityDate" id="611" type="LocalMktDate" description="Fixing Date for this Leg of NDF/NDS/NDB."/>
                <field name="MarketType" id="20020" type="MarketType" description="Indicates whether the NDF is onshore or offshore."/>
                <group name="NoFixingRefs" id="20011" dimensionType="groupSizeEncoding" description="Optionally populated. First instance is treated as the primary Fixing source, the second is treated as the secondary (used for NDF crosses).">
                    <data name="FixingReference" id="20014" type="VarText" description="Venue-specific NDF Fixing Reference."/>
                </group>
            </group>

            <group name="NoLegRegulatoryFields" id="20060" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
                <field name="LegRegulatoryKey" id="20061" type="LegRegulatoryKey" description="Name of Regulatory field."/>
                <data name="LegRegulatoryValue" id="20062" type="VarText" description="Value of Regulatory field."/>
            </group>
            <group name="NoLegPassthruFields" id="20050" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
                <data name="LegPassthruKey" id="20051" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
                <data name="LegPassthruValue" id="20052" type="VarText" description="Arbitrary value to be assigned to this element."/>
            </group>
        </group>

        <group name="NoBodyRegulatoryFields" id="20040" dimensionType="groupSizeEncoding" description="Conditionally populated if RegulatoryBodies=SEF/EMIR/MiFID(MTF).">
            <field name="BodyRegulatoryKey" id="20041" type="BodyRegulatoryKey" description="Name of Regulatory field."/>
            <data name="BodyRegulatoryValue" id="20042" type="VarText" description="Value of Regulatory field."/>
        </group>
        <group name="NoBodyPassthruFields" id="20030" dimensionType="groupSizeEncoding" description="To be used only to transport custom/non-normalisable Venue-specific attributes.">
            <data name="BodyPassthruKey" id="20031" type="VarText" description="Venue-specific name of this element (e.g. Fix tag name)."/>
            <data name="BodyPassthruValue" id="20032" type="VarText" description="Arbitrary value to be assigned to this element."/>
        </group>

        <group name="NoHops" id="20627" dimensionType="groupSizeEncoding" description="Populated by Whisperer only. Provides details of originating Venue message to Client."> <!-- Tag 627, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopRefID" id="20630" type="SeqNum" description="Sequence number of originating Venue message, where applicable."/> <!-- Tag 630, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopSendingTime" id="20629" type="UTCTimestamp" description="Time (Venue clock) that the Venue message was sent."/> <!-- Tag 629, assigned a custom id to aid FIXT.1.1/SBE protocol conversion. -->
            <field name="HopNetworkTime" id="20006" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Hardware."/>
            <field name="HopArrivalTime" id="20007" type="UTCTimestamp" description="Time (MF clock) that the Venue message was received by the MF Application."/>
        </group>

        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the execution, provided by the Order Originator."/>
    </sbe:message>

 <!--
 *
 * Replay Messages
 *
 -->

    <sbe:message name="ApplicationMessageRequest" id="401" semanticType="BW" description="Issued to submit a replay request. Multiple concurrent requests supported.">
        <field name="ApplReqID" id="1346" type="RequestID" description="Unique identifier for request."/>
        <field name="ApplReqType" id="1347" type="ApplReqType" presence="constant" valueRef="ApplReqType.StartRetransmission" description="Type of request, currently only used to initiate replay."/>

        <group name="NoApplIDs" id="1351" dimensionType="mandatoryGroupSizeEncoding" description="Must be 1. Every combination of Venue, SessionType, and User requires a separate request.">
            <field name="RefApplID" id="1355" type="IDString" description="Required. Filter specifying the session, in the format Venue.SessionType."/>
            <field name="ApplUsername" id="20553" type="Username" description="Required. Filter specifying the Username."/> <!-- Breaking Change: 553 > 20553 -->
            <field name="ApplMessageTypes" id="20100" type="MessageTypeFlags" description="Filter specifying the message types to replay."/>
            <field name="ApplBegSeqNum" id="1182" type="SeqNum" description="Starting MsgSeqNum of replay (inclusive)."/>
            <field name="ApplEndSeqNum" id="1183" type="SeqNum" description="Ending MsgSeqNum of replay (inclusive)." />
            <field name="ApplStartTime" id="20101" type="UTCTimestamp" description="Starting message sendingTime of replay."/>
            <field name="ApplEndTime" id="20102" type="UTCTimestamp" description="Ending message sendingTime of replay."/>
        </group>
    </sbe:message>

    <sbe:message name="ApplicationMessageReport" id="402" semanticType="BY" description="Signifies completion of an open ApplicationMessageRequest.">
        <field name="ApplReportID" id="1356" type="RequestID" description="Unique identifier for report."/>
        <field name="ApplReportType" id="1426" type="ApplReportType" description="Type of report."/>
        <field name="ApplReqID" id="1346" type="RequestID" description="The ApplReqID of the originating ApplicationMessageRequest."/>
        <group name="NoApplIDs" id="1351" dimensionType="mandatoryGroupSizeEncoding" description="Will always be 1.">
            <field name="RefApplID" id="1355" type="IDString" description="Filter specifying the session, in the format Venue.SessionType."/>
            <field name="RefApplLastSeqNum" id="1357" type="SeqNum" description="The last seq number replayed."/>
        </group>
        <data name="Text" id="58" type="VarText" description="Text string - Extra information about the ApplicationMessageRequest result, provided by Whisperer."/>
    </sbe:message>

    <sbe:message name="ReplayedMessage" id="403" semanticType="U4" description="Contextual wrapper around an individual replayed raw message.">
        <field name="SenderSubID" id="50" type="IDString" description="The source of this message: either the Username, or service in the format Venue.SessionType, or 'venue'."/>
        <field name="TargetSubID" id="57" type="IDString" description="The target of this message: either the Username, or service in the format Venue.SessionType, or 'venue'."/>
        <field name="ApplReqID" id="1346" type="RequestID" description="The ApplReqID of the originating ApplicationMessageRequest for this ReplayedMessage."/>
        <field name="OrigTime" id="42" type="UTCTimestamp" description="Sending time of the original message."/>
        <field name="ApplSeqNum" id="1181" type="SeqNum" description="Original sequence number of the replayed message."/>
        <field name="ApplLastSeqNum" id="1350" type="SeqNum" description="The previous sequence number in the application sequence stream. Permits an application to publish messages with sequence gaps where it cannot be avoided. Used only if application sequencing is in effect."/>
        <field name="RawMessageEncoding" id="20103" type="PayloadType" description="Provides Client with an indication of the decoder needed to process the RawMessage. "/>
        <field name="RawMessageSize" id="20104" type="uint16" semanticType="Length" description="Length of the replayed message."/> <!-- cannot be called RawMessageLength as this clashes with code stubs generated by the SBE tool for RawMessage, below. -->
        <data name="RawMessage" id="20105" type="RawData" description="Original message. May contain standard FIX separators and other normally-prohibited characters."/>
    </sbe:message>

</sbe:messageSchema>

Changes

This is an incremental (non-breaking) schema release, incorporating the following changes:

  1. TimeInForce - new enum value GFS ("Good For Session") - for venues which support long lived orders within a trading week.
  2. ExecRestatementReason - new enum values GTRenewal, VerbalChange, RepricingOfOrder, BrokerOption, PartialDeclineOfOrderQty.
  3. PegOffsetType - new field to better support Pegged Orders.
  4. ExecutionReport - Limit Price now echoed from originating Order.
  5. ExecutionReport - HasExtendedOrderFields now echoed from originating Order.
  6. Sundry documentation changes - typo corrections and description clarifications.

Further details available on 2025-Q3 - Whisperer API Upgrade to v19498

History

Schema: 19457.xml -Incremental Changes

Release : 2025.02.18.WE

Changes - 2025-02-18 - Whisperer API Upgrade to v19457

  1. SecurityType - A new enum value FTO to support Forward Time Options. Impacted fields in the Whisperer API are: SecurityType and LegSecurityType.
  2. TimeOptionStartTenor - A new field, conditionally required when trading Forward Time Options, to specify a standard tenor for the start of the settlement period.
  3. TimeOptionStartDate - A new field to specify the start date of the settlement period when trading Forward Time Options. Conditionally required when TimeOptionStartTenor = BKN.
  4. LegSettlType & LegSettlDate - Adjusted, now also represents the end date of the settlement period in a Forward Time Option.

Schema: 19456.xml - Breaking Change

Release : 2024.04.11.WE

Changes

  1. All messages with repeating groups - groupSizeEncoding, mandatoryGroupSizeEncoding, conditionalGroupSizeEncoding all modified to utilise unint16 in place of uint8 datatypes for blockLength and numInGroup composite elements.  Further detail is available in 2024-04-12 - Whisperer API v19456 - Breaking Change

Schema: 18945.xml - Incremental Changes

Release : 2023.12.06.WE

Changes

  1. ExecutionReport ExecRestatementReason - new enum values to better support communication of an unsolicited cancel. Support for these values will be added in a future release; impacted venues TBD.
  2. BodyRegulatoryKey - new enum value MiFIDExemptedDueToESCBPolicyTransaction. Support for this value will be added in a future release; impacted venues: ebs_market_ilink3_sbe, fxspotstream, jpmorgan_fx.
  3. BodyRegulatoryKey - new enum value UPI. Support for this value will be added in a future releaseimpacted venues: UPI/RTN Regulatory Changes.
  4. LegRegulatoryKey - new enum values LegUPI and LegEMIRRTN. Support for these values will be added in a future releaseimpacted venues: UPI/RTN Regulatory Changes.
  5. RegulatoryBodies - new enum value UKMiFID. Support for this value will be added in a future releaseimpacted venues: t360_tex_maker, fxall_quicktrade_maker.
  6. Sundry description changes.

Schema: 18944.xml - Breaking Changes

Release : 2023.06.28.WE

Changes

  1. Logon - EncryptMethod & DefaultApplVerID added for explicit consistency with FIX protocol. These are constant definitions, so no change to wire format.
  2. Logon - ResetSeqNumFlag added [Support for this flag was added in 2023.07.20.WE]. Client will be able to use freely for any UAT session, and for Pricing/Replay sessions in production.
  3. LogonResponse - Gateway echo of HeartBtInt, EncryptMethod & DefaultApplVerID for explicit consistency with FIX protocol. Again, EncryptMethod & DefaultApplVerID are constant definitions, so the only wire format change is the addition of the HeartBtInt. Support for this field will be added in a future release. 
  4. MultilegOrderCancelReplaceRequest -  ExecInst field added to support algo suspension/release for precision_algo
  5. ExecutionReport - OrdStatus Suspended enumeration value added to support algo suspension/release for precision_algo
  6. ExecutionReport - ExecType Suspended, Restated enumeration values added to support algo suspension/release for precision_algo
  7. ExecutionReport - ExecRestatementReason field added to support algo suspension/release for precision_algo.
  8. ExecutionReportSecondaryExecID field added to support grouping multiple fills. NOTE: cme_ilink2, ebs_market_ilink3_sbe and ebs_cpt will be modified to utilise this field in place of the current overloaded usage of the LinkID field,  in a future release.
  9. ApplicationMessageRequest - ApplUsername field id changed to 20553, to reflect custom usage vs the standard Username field defined in FIXT.1.1.  (breaking change for clients using replay service over FIX).
  10. SessionRejectReason - support full set of standard enumeration values as per FIXT.1.1. This allows Whisperer to gracefully handle erroneous Reject messages sent by FIX protocol clients.
  11. BusinessRejectReason - new enum values NotAuthorized and WhispererClientMessageInvalid.
  12. SecurityTradingStatus - new enum value NewPriceIndication
  13. SecurityType - new enum value SPR, to support Futures Spread instruments. [cme_ilink2cme_mdp3_sbe_udp modified to utilise this in 2023.08.03.WE].
  14. TenorType - Existing tenors BOMF-BOMZ have new wire values (breaking change for t360_tex_maker for BOMF value only). Existing tenors BMF3-BMF4 renamed to EOM2 - EOM3 (wire values unchanged, breaking change for morganstanleyfx_esp). New tenors EOM4-EOM12.
  15. Sundry documentation corrections.

Schema: 18656.xml - Incremental Changes

Release : 2021.09.13.WE

Changes

  1. LinkID added, to group individual messages together - e.g. Batch QuoteRequests.
  2. RegulatoryBodies added to SecurityStatus and MarketDataRequest.
  3. LogoutResponse includes Text field.
  4. ExecTypes TradeCorrect/TradeCancel .
  5. EndMarker - usage of this message is to be extending to SecurityStatus and Batch QuoteRequest messages
  6. NoUnderlyings/UnderlyingQty repeating group added to MarketDataRequest and QuoteRequest messages, to support client-provision of subscription VWAP quantity ladder.
  7. TenorType - BMF3, BMF4.
  8. Sundry documentation changes.

Schema: 18655.xml

Changes

  1. Schema Versioning - now encodes a major.minor version number, major number change represents a breaking change.
  2. BusinessRejectRefID - erroneously mirrored the definition of a Reject RefTagID.

Schema: 18654.xml

Changes

  1. Replay Service - addition of ApplicationMessageRequest,ReplayedMessage and ApplicationMessageReport messages, with associated fields and datatypes. A new SessionType value of Replay has been defined to support this.
  2. QuoteIDQuoteEntryID - temporarily extended from 64 to 128 characters, used in Quote, MassQuoteQuoteCancel and NewOrderMultileg.
  3. Subject - VenueTradingStatusHalted added to ErrorReport Subject enumeration.
  4. SecurityTradingStatus - additional enumeration values.
  5. MDEntryType - additional enumeration values.
  6. RegulatoryBodies - added MAS (Monetary Authority of Singapore).

Changes

  1. SequenceReset.GapFillFlag - When synchronising the client side session via the FIX Bridge, Whisperer was not publishing the GapFillFlag in the outbound SequenceReset message, with a riskof the Client FIX engine treating this message as a "Reset mode", rather than "GapFill mode" notification. Now, the client will always receive a SequenceReset message with the GapFillFlag set to 'Y'.
  2. LegAllocAccount moved - LegAllocAccount used to be the first tag in the NoLegAllocs group and in the FIX protocol was mandatory as a result, although for some Venues it is optional. It has switched locations with LegIndividualAllocID, such that LegIndividualAllocID is the first (mandatory) tag in the group and LegAllocAccount follows (and now optional).
  3. mandatoryGroupSizeEncoding - NoLegs, NoLegAllocs, NoQuoteSets must always be present,  this is now enforced in the SBE schema using this new group size encoding.
  4. LegSide - For TwoWay BLK and NDB QuoteRequests, a netting indication is now provided to allow Makers to price both sides correctly.
  5. MarketDataRequest - Now incorporate a NoBodyPassthruFields block to support per-venue customisation.
  6. Execution Report.AvgPx -New field.
  7. TenorType - M13 & M14 tenors added, for Integral_RFS_Maker
  8. Reject and BusinessMessageReject - These standard FIX protocol messages have been added as part of a planned migration from ErrorReport, which will be deprecated in due course.
  9. Sundry documentation changes.

Changes

  1. QuoteRequestRejectReason - Correction of enum value ProviderUnAvailable  typo (specific to FXall QuickTrade).
  2. Sundry description clarifications.

Changes

  1. FIX Protocol - Various adjustments to ensure clean compatibility for FIX Protocol connections (vs SBE).

  2. MDReqRejReason, OrdRejReason, CxlRejReason, QuoteRequestRejectReason - Rejection enumerations added for all trading models.
  3. TenorType - Rolling quarterly IMM tenors added.

Changes

  1. FIX Protocol - NoHops group now use custom tags to be protocol-compliant.
  2. MDSubFeedType - A/B line indicator for UDP market data feeds.
  3. TradingFlags.IsSynthetic - indicates that this message is generated by MarketFactory in order to ensure a standard Orderlifecycle.
  4. PartyRole - addition of ClearingFirm.

Changes

  1. messageHeader - uint32 messageLength, adjusted messageStart.
  2. Orders adjustments - Repositioning of reg and passthru groups for consistency.
  3. Sundry documentation changes - typo corrections and description clarifications.

Additional Material

Further detail is provided in the following page(s):

  • No labels