Mass Quote Questions

Imported from previous forum

I’m trying to understand how the Mass Quote and related messages are
supposed to be used. I’ve spent a fair amount of time reading the FIX
4.4 specification, but I find a few details confusing. My comments
refer to tradable quotes.

  • Under the heading “Use of other Quote Messages in Mass Quoting,” it
    is explained that after the (optional) Mass Quote Acknowledgment,
    each QuoteEntry is treated as a single quote, and that Quote Status
    Report should be used to report status back to the issuer. The text
    also says that Quote Status Report should refer to the QuoteID use
    in the Mass Quote message, and that QuoteSetID and QuoteEntryID may
    be appended as well. The two latter fields are not present in the
    Quote Status Report message.

    In the table that follows, the third row says that Quote messages
    (not Quote Status Report) are sent back to the issuer. I assumed
    that was just a mistake, but also it says here that the QuoteID
    field should be populated by the QuoteEntryID for the QuoteEntry.
    This seems to contradict the paragraph above the table.

  • Under the heading “Mass Quote Message Scenarios,” subsection “Cancel
    All Quotes,” the response to the cancellation is to issue a Mass
    Quotes Acknowledgment. Is this really correct? Reading the rest
    of the specification, I’d have guessed that Quote Status Reports
    should be sent for all individual quotes instead.

  • When a quote is (partly) filled, and an Execution Report is sent,
    what should the OrdStatus field be set to? It is a required field
    in the Execution Report, but the table that suggests mappings for
    execution reports on quotes does not say anything.

  • Regarding Quote Cancel: What is the QuoteID tag used for? I would
    have hoped it was to cancel a single quote, but that doesn’t seem
    possible… Is it just a message identifier? In that case, does
    some other message refer to it? I can’t find one…

  • For quotes in general: when a quote is filled, does it still remain
    on the market side so that a client can still update the quote by
    sending Quote (or Mass Quote) messages that refer to the QuoteID
    (QuoteEntryID) in question?

  • Related to the above: Since a single quote can not be canceled: is
    it permitted to update a quote and set its size to FilledQty, in
    effect setting LeavesQty to zero, and later to increase the size
    again?

  • More Quote Cancel: When canceling all quotes for an Underlying:
    Where is the Underlying instrument(s) specified? The only place in
    the message where the data fits is in the nested repeated group
    within NoQuoteEntries. This seems a bit unnatural to me, but is
    that where the data is supposed to go?

Sorry for the long posting. Either there’s something in the model
that I do not fully grasp, or the document is confusing, or I’m just
plain stupid:) I did read the corresponding sections of the FIX 5.0
specs, but nothing seems to have changed. Any insight in any of the
above points would be appreciated! (Or recommended reading that
supplements the spec…)

Staffan

[ original email was from Rikard Hedberg - rikard.hedberg@omxgroup.com ]
Staffan,

OMX has a proposal for clarification and extension of FIX (5.0) in this area (including Continuous Quoting work flows). The proposal has been reviewed and is under approval by the GTC (any day now hopefully). The Exchanges/ECN working group is also producing a Best Practice recommendation for Continuous Mass Quoting in an Exchange environment. My replies to your questions are based on those. If the model you are working with is NOT a marketplace continuous mass quoting one - all answers below might not be entirely correct.

  • The basis must be the model you are trying to implement. If this is the typical continuous Market Maker quote model, a quote is often identified with the MMID and the security (and a QuoteID of 1). In cases where the MM is allowed multiple quotes in each security the QuoteID needs to be used to identify the individual quote (1, 2 or 3 e.g.). The QuoteEntryID of Mass Quote messages is the same thing as the QuoteID in single Quotes. The Mass Quote QuoteID is a message identifier that can be used as a revision number (if users wants that). We are adding a QuoteMsgID field to single Quote messages for that same purpose. This means:
  • (Single) Quote.QuoteID = Mass Quote.QuoteEntryID
  • (Single) Quote.QuoteMsgID = Mass Quote.QuoteID

Note that other models where Quotes are used may have other principles for the use of the identifiers.

In an exchange environment inbound quotes would be relayed to other users as Market Data, not as quotes. However, an exchange (or hub) may offer quote negotiation facilities (Quote Request etc messages) with private quotes passed back to requestors as Quote messages.

In an exchange environment with Market Maker quotes, the exchange is often not expected to report back status changes. MM’s are continuously updating their quotes and bandwidth is an issue. The QuoteResponseLevel field value of “No Ack” is often used as a default. We are also adding a new value (Summary Acknowledgement) allowing Mass Quote Ack’s without the indvidual entries.

The response to a cancel of multiple quotes is a Mass Quote Ack. However, markets that do not support Mass Quote messages must use the Quote Status Report. The Quote Status Report may also be used in a Mass Quote model to report events for an individual quote.

OrdStatus in Execution Reports would normally be Partially Filled for quotes although Filled could tell the user that quantity is exhausted (time to replenish the quantity).

The QuoteID of a Quote Cancel is used to cancel a single quote (QuoteCancelType = 5). You can also cancel a quote by a sending a Quote message (or Mass Quote) setting BidPx, BidQty, OfferPx and OfferQty = 0. We are adding the new QuoteMsgID field to serve as a message identifier for Quote Cancels too.

Markets have different views on what happens if a quote is canceled. The model I’m describing says that the same QuoteEntryID (or single Quote QuoteID) is used when the quote is reinserted - so the MM has a given slot in each security. Some markets even publish this as a grid (MM/Security) where a missing quote is shown as zero or blank. Other markets assign an OrderID to each quote and may then choose to reassign it when the quote is reentered. There are yet other models… So the answer depends on the model you will be supporting.

Cancel by underlying is done as you described.

Regards

Rikard

I’m trying to understand how the Mass Quote and related messages are
supposed to be used. I’ve spent a fair amount of time reading the FIX
4.4 specification, but I find a few details confusing. My comments refer
to tradable quotes.

  • Under the heading “Use of other Quote Messages in Mass Quoting,” it
    is explained that after the (optional) Mass Quote Acknowledgment,
    each QuoteEntry is treated as a single quote, and that Quote Status
    Report should be used to report status back to the issuer. The text
    also says that Quote Status Report should refer to the QuoteID use in
    the Mass Quote message, and that QuoteSetID and QuoteEntryID may be
    appended as well. The two latter fields are not present in the Quote
    Status Report message.

    In the table that follows, the third row says that Quote messages (not
    Quote Status Report) are sent back to the issuer. I assumed that was
    just a mistake, but also it says here that the QuoteID field should be
    populated by the QuoteEntryID for the QuoteEntry. This seems to
    contradict the paragraph above the table.

  • Under the heading “Mass Quote Message Scenarios,” subsection “Cancel
    All Quotes,” the response to the cancellation is to issue a Mass
    Quotes Acknowledgment. Is this really correct? Reading the rest of the
    specification, I’d have guessed that Quote Status Reports should be
    sent for all individual quotes instead.

  • When a quote is (partly) filled, and an Execution Report is sent, what
    should the OrdStatus field be set to? It is a required field in the
    Execution Report, but the table that suggests mappings for execution
    reports on quotes does not say anything.

  • Regarding Quote Cancel: What is the QuoteID tag used for? I would have
    hoped it was to cancel a single quote, but that doesn’t seem
    possible… Is it just a message identifier? In that case, does some
    other message refer to it? I can’t find one…

  • For quotes in general: when a quote is filled, does it still remain on
    the market side so that a client can still update the quote by sending
    Quote (or Mass Quote) messages that refer to the QuoteID
    (QuoteEntryID) in question?

  • Related to the above: Since a single quote can not be canceled: is it
    permitted to update a quote and set its size to FilledQty, in effect
    setting LeavesQty to zero, and later to increase the size again?

  • More Quote Cancel: When canceling all quotes for an Underlying: Where
    is the Underlying instrument(s) specified? The only place in the
    message where the data fits is in the nested repeated group within
    NoQuoteEntries. This seems a bit unnatural to me, but is that where
    the data is supposed to go?

Sorry for the long posting. Either there’s something in the model that
I do not fully grasp, or the document is confusing, or I’m just plain
stupid:) I did read the corresponding sections of the FIX 5.0 specs,
but nothing seems to have changed. Any insight in any of the above
points would be appreciated! (Or recommended reading that supplements
the spec…)

Staffan

Rikard,

Thanks for you exposition! Can I somehow get access to the documents
you refer to?

OMX has a proposal for clarification and extension of FIX (5.0) in
this area (including Continuous Quoting work flows). The proposal
has been reviewed and is under approval by the GTC (any day now
hopefully). The Exchanges/ECN working group is also producing a Best
Practice recommendation for Continuous Mass Quoting in an Exchange
environment. My replies to your questions are based on those. If the
model you are working with is NOT a marketplace continuous mass
quoting one - all answers below might not be entirely correct.

I’m working with continuous mass quotes on a market. I’m writing
internal specifications for FIX gateways to be used for market
connections, but these gateways are supposed to look like markets from
the client perspective. Even if the specifications are internal, I
believe it is best to conform to whatever practices are actually in
place today. Both to avoid confusion at this point, and, possibly, to
more easily being able to interface to external systems in the future.

  • The basis must be the model you are trying to implement. If this
    is the typical continuous Market Maker quote model, a quote is often
    identified with the MMID and the security (and a QuoteID of 1). In
    cases where the MM is allowed multiple quotes in each security the
    QuoteID needs to be used to identify the individual quote (1, 2 or 3
    e.g.).

Ok, nice information! I assumed that Quote IDs must be unique per
quote within a session (just like ClOrdIDs for orders).

This means:

  • (Single) Quote.QuoteID = Mass Quote.QuoteEntryID
  • (Single) Quote.QuoteMsgID = Mass Quote.QuoteID

Seems logical!

  • Under the heading “Mass Quote Message Scenarios,” subsection “Cancel
    All Quotes,” the response to the cancellation is to issue a Mass
    Quotes Acknowledgment. Is this really correct? Reading the rest of the
    specification, I’d have guessed that Quote Status Reports should be
    sent for all individual quotes instead.

The response to a cancel of multiple quotes is a Mass Quote
Ack. However, markets that do not support Mass Quote messages must
use the Quote Status Report. The Quote Status Report may also be
used in a Mass Quote model to report events for an individual quote.

Ok, except the example I referred to, I can not find this information
anywhere in the specs. I hope it is in your clarification document…

The QuoteID of a Quote Cancel is used to cancel a single quote
(QuoteCancelType = 5).

This also is not in the specification. So, you would consider QuoteID
being an optional, rather than, as the specs say, a mandatory field?
That would make much more sense!

We are adding the new QuoteMsgID field to serve as a message
identifier for Quote Cancels too.

What is it used for? Is it referenced by some other message?

Markets have different views on what happens if a quote is
canceled. The model I’m describing says that the same QuoteEntryID
(or single Quote QuoteID) is used when the quote is reinserted - so
the MM has a given slot in each security.

To me it seems quite important whether it is actually the same quote,
or a new quote with the same QuoteID, after a filled quote is
replenished. Suppose a quote to buy 100 AZN is filled, and that the
client sends a new quote message, using the same QuoteID, but this
time specifying a BidSize of 200 instead. Does this imply the client
wants to buy 100 more AZN, or a new quote of 200 AZN (giving a total
of 300 shares)? My interpretation so far has been that, as long at
the quote has not been canceled, updating the BidSize to 200 means
the client wants to buy another 100 shares. This would also imply
that, at the end of a trading day, quote sizes could tend to be quite
large, since they would contain the day’s turnover so far, plus
whatever volume is still visible in the market. (The other
interpretation seems to be hard to implement correctly, especially
since the Quote Status Report does not include the LeavesQty field.)

Staffan