Cancelling a Quote Request

Imported from previous forum

1 Like

I was wondering if there is a standard way to cancel (or partially cancel - cancel for only certain instruments) a Quote Request (‘R’) in FIX 4.4 by the party that created the Quote Request. Looking at the FIX message definitions, it appears that the options are:

  1. QuoteRequestReject (‘AG’). This is used by the opposite party to reject a Quote Request, and is probably inappropriate for the Quote Request issuer to cancel its own Quote Request.

  2. QuoteResponse (‘AJ’). This can be used, among other things, by the Quote Request creator to reject individual quotes, or to stop a quote stream for individual quotes (with QuoteRespType=DoneAway, I assume). However, this message requires a Quote ID, which means that at least one quote has already been sent - and this is not the case. Also, this will not work well for multi-instrument Quote Requests - each quote is a single instrument, and it would be preferable to cancel the whole Quote Request at once.

Any input form somebody who has had experience with FIX-based quoting systems would be appreciated.

Why do you need to explicitly cancel or modify a quote request? What would happen if you simply ignore the quotes you are sent but are not (no longer) interested in? The FIX Quote Request does not have a transactional semantic where you can add/modify/delete quotes you request. You can always go for the snapshot approach, i.e. if you send a new Quote Request, it will supersede any previous Quote Request and implicitly remove certain instruments from the request. I am assuming that you are not using this message for a subscription model where you issue a single Quote Request and expect to get quotes for the instruments inside on an ongoing basis?

I was wondering if there is a standard way to cancel (or partially cancel - cancel for only certain instruments) a Quote Request (‘R’) in FIX 4.4 by the party that created the Quote Request. Looking at the FIX message definitions, it appears that the options are:

  1. QuoteRequestReject (‘AG’). This is used by the opposite party to reject a Quote Request, and is probably inappropriate for the Quote Request issuer to cancel its own Quote Request.

  2. QuoteResponse (‘AJ’). This can be used, among other things, by the Quote Request creator to reject individual quotes, or to stop a quote stream for individual quotes (with QuoteRespType=DoneAway, I assume). However, this message requires a Quote ID, which means that at least one quote has already been sent - and this is not the case. Also, this will not work well for multi-instrument Quote Requests - each quote is a single instrument, and it would be preferable to cancel the whole Quote Request at once.

Any input form somebody who has had experience with FIX-based quoting systems would be appreciated.

Thanks… You are correct, we are not using Quote Request for a subscription model.

We can have multiple Quote Requests going at the same time, potentially - for the same instrument (with different requested amounts, that correspond to different trades that our users wish to execute). Therefore, the “snapshot approach” will not work.

It is, of course, possible to just ignore the quotes and let the Quote Request expire, but we would prefer to stop the quote streams when they are no longer necessary (which would be indicated by the end-users) - if nothing else, then to minimize potential network and system resource usage.

Why do you need to explicitly cancel or modify a quote request? What would happen if you simply ignore the quotes you are sent but are not (no longer) interested in? The FIX Quote Request does not have a transactional semantic where you can add/modify/delete quotes you request. You can always go for the snapshot approach, i.e. if you send a new Quote Request, it will supersede any previous Quote Request and implicitly remove certain instruments from the request. I am assuming that you are not using this message for a subscription model where you issue a single Quote Request and expect to get quotes for the instruments inside on an ongoing basis?

I was wondering if there is a standard way to cancel (or partially cancel - cancel for only certain instruments) a Quote Request (‘R’) in FIX 4.4 by the party that created the Quote Request. Looking at the FIX message definitions, it appears that the options are:

  1. QuoteRequestReject (‘AG’). This is used by the opposite party to reject a Quote Request, and is probably inappropriate for the Quote Request issuer to cancel its own Quote Request.

  2. QuoteResponse (‘AJ’). This can be used, among other things, by the Quote Request creator to reject individual quotes, or to stop a quote stream for individual quotes (with QuoteRespType=DoneAway, I assume). However, this message requires a Quote ID, which means that at least one quote has already been sent - and this is not the case. Also, this will not work well for multi-instrument Quote Requests - each quote is a single instrument, and it would be preferable to cancel the whole Quote Request at once.

Any input form somebody who has had experience with FIX-based quoting systems would be appreciated.

Thinking about the “snapshot approach”…

If we issue another Quote Request with the same Quote Request ID, and that Quote Request is empty (or, more generically, contains a different set of instruments) - would it be takes by the counterparty to mean that we would like the quote streams stopped for whatever instruments that were in the original Quote Request and not in the new Quote Request (and, possibly, if the new Quote Request contains new instruments, start quote streams for the new instruments)?

At the same time, if we have different Quote Requests (with different Quote Request IDs) going, they should, presumably, remain intact.

Yes, but see my other post on the usage of MarketDataRequest. Changing the list of instruments would be by disabling the current MDReqID and issuing a new request with a new MDReqID and a new set of instruments you want quotes for.

Thinking about the “snapshot approach”…

If we issue another Quote Request with the same Quote Request ID, and that Quote Request is empty (or, more generically, contains a different set of instruments) - would it be takes by the counterparty to mean that we would like the quote streams stopped for whatever instruments that were in the original Quote Request and not in the new Quote Request (and, possibly, if the new Quote Request contains new instruments, start quote streams for the new instruments)?

At the same time, if we have different Quote Requests (with different Quote Request IDs) going, they should, presumably, remain intact.

Thanks… You are correct, we are not using Quote Request for a subscription model.
… we would prefer to stop the quote streams when they are no longer necessary (which would be indicated by the end-users) - if nothing else, then to minimize potential network and system resource usage.

Hmmm…that sounds exactly like a subscription model where you kick off a stream with a single request and want to change or cancel it later. My understanding of the current Quote Request model in FIX is that it is a request/response model, i.e. you ask for one or more quotes and you get one or more responses but only one for each quote you asked for.
Other messages in FIX have the field SubscriptionRequestType (263) which allows you to start/stop a stream of messages. For example the FIX RFQRequest message has this so that a liquidity provider can receive QuoteRequest messages on an ongoing basis for instruments he is interested in.
Maybe your workflow is better suited with the MarketDataRequest which also has tag 263. You can identify one or more instruments you want to hear about and can use QuoteType (567) to say whether you want indicative or tradeable quotes. MDReqID (262) is your handle for the request and you simply issue a MarketDataRequest with the same message MDReqID and SubscriptionRequestType = 2 = Disable to stop the stream.

Thanks a lot, Hanno - I will study these options in more detail.

Thanks… You are correct, we are not using Quote Request for a subscription model.
… we would prefer to stop the quote streams when they are no longer necessary (which would be indicated by the end-users) - if nothing else, then to minimize potential network and system resource usage.

Hmmm…that sounds exactly like a subscription model where you kick off a stream with a single request and want to change or cancel it later. My understanding of the current Quote Request model in FIX is that it is a request/response model, i.e. you ask for one or more quotes and you get one or more responses but only one for each quote you asked for.
Other messages in FIX have the field SubscriptionRequestType (263) which allows you to start/stop a stream of messages. For example the FIX RFQRequest message has this so that a liquidity provider can receive QuoteRequest messages on an ongoing basis for instruments he is interested in.
Maybe your workflow is better suited with the MarketDataRequest which also has tag 263. You can identify one or more instruments you want to hear about and can use QuoteType (567) to say whether you want indicative or tradeable quotes. MDReqID (262) is your handle for the request and you simply issue a MarketDataRequest with the same message MDReqID and SubscriptionRequestType = 2 = Disable to stop the stream.

@hanno.klein I have revived this old topic because I think there is a legitimate case for Continuously Quoting Venues to use Quote messages rather than market data messages. Market data messages are really meant for Market Data and have semantics to support an order book, trades, etc… This of course makes the messages more complex.
When using Market Data Messages it is also a little cumbersome to “delete” a set of market data entries to communicate a case when the quoted price is “invalidated” (for example when an instrument or instrument permission is removed or in the event of a “pricing” outage). Quote message dialogue offers “Quote Cancel” which is very easy to interpret. To allow subscription/unsubscription for continuously quoting venues, perhaps all that is needed is a “Quote Request Cancel” or similar.
I know that Market Data messages offer more MD Entry types but it would be nice to have a more simple alternative.

@davidgibbs I believe that quote request messages are currently purely transactional as they are missing the field SubscriptionRequestType(263). That field allows to cancel a previous subscription. The response to a QuoteRequest(35=R) message is hence one or more quotes but only one for each requested instrument within QuotReqGrp. Quotes are also directed at one or more specific recipients and can lead to responses whereas market data messages are mainly informational. You can however, “hit&lift” an order or quote seen via market data with RefOrderIDSource(1081) as part of NewOrderSingle(35=D).

Hopefully, others can comment on the business requirement to have subscriptions for quotes that can be stopped after having been initiated. The snapshot option is what I believe is the only scenario supported today.

Thanks for your reply, it will be interesting to see if anyone else thinks continuously quoting venues could use Quote messages. I noticed. your suggestion that a SubscriptionRequestType could cancel a Quote Request.