Page History
| Table of Contents |
|---|
Overview
Whisperer Enterprise supports all three principle forms of Quotation Negotiation trading:
- ESP - Executable Streaming Pricing (long-lived shared subscriptions).
- RFS - Request For Stream (short-lived tailored subscriptions).
- RFQ - Request For Quote (single quote with finite life).
All quotes are good until replaced, expired or withdrawn. The MFSBE API supports the following four separate mechanisms for the management of tradeable prices by a Maker:
- Quote Condition (ESP, RFS)
- Quote Expiry/TTL (ESP, RFS)
- Quote Withdrawal (ESP, RFS)
- Liquidity Management (ESP only)
Quote Condition
Some Venues allow the Maker to specify whether a given quote is indicative, or tradeable. Depending on the Venue, indicative quotes may be displayed in the trading GUI as non-tradeable ("greyed out"), or may result in the quote being removed from display entirely, as if it has been withdrawn.
Indicative pricing is particularly important when Making to those Venues which offer composite trading grids that all Takers to compare multiple providers at a glance.
Quote Expiry
Some Venues allow the Maker to specify a finite time that an individual quote is available for. This is essential for one-shot RFQ models (e.g. to support dealer intervention), but may also be used act as a back-stop for ESP and RFS flows to ensure that the price is promptly removed from display, in the event of error scenarios and other edge cases.
Both Quote and MassQuote messages support the provision of an expiry time:
Quote.ValidUntilTimeMassQuote.NoQuoteSets[*].NoQuoteEntries[*].ValidUntilTime
The default ValidUntilTime value is set far into the future, so this field may be ignored for those customers wishing to adopt a simple model.
For those venues which mandate time-to-live rather than an absolute date/time, WH-E will reference the MFSBE message sendingTime in order to determine the duration.
Quote Withdrawal
A quote may be withdrawn entirely. In a trading GUI this will result in the price immediately being removed from display. Quote withdrawal is often an integral part of a RFQ dealer intervention workflow, where the trader may wish to manually reprice, during the life of a 30s quote.
MassQuote messages may be withdrawn via the same mechanism.
Liquidity Management
In ESP pricing, a quote is rendered indicative by publication of zero quantities against prices for a given rung and side.
In addition, publication of a message without any rungs will effectively result in the complete withdrawal of the previous published ladder.
QuoteType
For Quotes, QuoteType lives in the body level, and refers to the overall Quote Tradeability. Where as MassQuotes, it lives in NoQuoteEntries and it refers to the specific QuoteEntry.
For a single Leg product, where BidPx is populated, but OfferPx is not.
Quote- The Body level,
QuoteType.BidIsTradeablewill be set to True.
- The Body level,
MassQuotes- The
NoQuoteSets[1].NoQuoteEntries[X].QuoteType.BidIsTradeablewill be set to True.
- The
For Swap, Where the Near Leg OfferPx is populated, and the Far Leg BidPx is populated.
Quote- The Body level,
QuoteType.BidIsTradeablewill be set to True.
- The Body level,
MassQuotes- The Near Leg
NoQuoteSets[1].NoQuoteEntries[X].QuoteType.OfferIsTradeablewill be set to True, and the Far legNoQuoteSets[2].NoQuoteEntries[X].QuoteType.BidIsTradeablewill be set to True.
- The Near Leg
For Blocks, we always set both BidIsTradeable and OfferIsTradeable to True or Both to False.
Quote- If the BLK is tradeable, both
QuoteType.BidIsTradeableandQuoteType.OfferIsTradeablewill be set to True, regardless of the overall side.
- If the BLK is tradeable, both
MassQuote- If level(
X), if is Tradeable, allNoQuoteSets[ALL].NoQuoteEntries[X].QuoteType.BidIsTradeableandNoQuoteSets[ALL].NoQuoteEntries[X].QuoteType.OfferIsTradeablewill be set True. - If level(Y) is not Tradeable, all
NoQuoteSets[ALL].NoQuoteEntries[Y].QuoteType.BidIsTradeableandNoQuoteSets[ALL].NoQuoteEntries[Y].QuoteType.OfferIsTradeablewill be set False.
- If level(
Maker Quote Management
In ESP, Makers publish MassQuotes. Each message is a single quote, which should contain a full snapshot of your price ladder for that symbol & price bucket.
The shape and size of their ladder can vary from tick to tick. Each MassQuote completely replaces the previous. You may either publish a QuoteCancel to withdraw a previously published ladder, or publish a new empty MassQuote (zero rungs).
On the venue side, MarketFactory will handle the messages to make sure that the published liquidity matches your MassQuote.
ESP/RFS/RFQ State Transition Model
The following State Transition Diagram outlines the model for traditional eCommerce ESP and RFS quotation negotiation workflows for both Maker and Taker clients.
Whilst the Maker and Taker views are essentially symmetric, there are some important differences which are illustrated in the sequence diagrams.
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
ExecutionAck Messages
Client as Taker
Some Maker venues may support Client acknowledgement of their deal acceptance or rejection. Accordingly, the Client is encouraged to always send an ExecutionAck message to confirm the trade result, where the Venue does not use this mechanism, Whisperer will simply drop the message.
Client as Maker
Typically the Venue will send some sort of message Ack-ing or Nack-ing the Maker response to the originating order. Any of the following are possible:
- Venue Accepts Maker Trade - this is essentially confirming the trade has been completed successfully
- Venue Rejects Maker Trade - this may happen for a variety of reasons - e.g. mandatory regulatory fields are incorrect.
- Venue Accepts Maker Rejection - this is essentially a simple acknowledgment that no trade has been completed.
- Venue Rejects Maker Rejection - the Venue was unable to propery process therejection for some reason. This is an indication of a serious system error.
If It should be noted that there is a lot of variation in how this terminal message is used across the venues:
- Some venues will only send 1. E.g. Bloomberg
- Some Venues will only send 1. or 2. E.g. CboeFX.
- Some Venues will send all variants. E.g. Currenex RFS
- Some Venues may not use this message at all.
| Info |
|---|
In the absence of an Please note that the synthetic Please refer to 2025-09-16 - Post-Trade Normalisation (Execution Context) - Synthetic ExecutionAcknowledgement for more infoAt present Whisperer does not generate synthetic ExecutionAck messages as it is not possible to ensure uniformity, or know the actual venue state with any certainty. |
| Warning | ||
|---|---|---|
| ||
Should the Client receive an |
RFQ
...
| title | TODO |
|---|
...
A request for a single-shot price, delivered as a Quote, with the TTL defined in the ValidUntilTime. Possible Dealer Intervention may deliver other
...
Quote(s) prior to expiry of first. Expiry
...
terminates the workflow.
RFS
Each individual Quote is good until replaced, withdrawn or ValidUntilTime expiry.
Client as Taker
| Anchor | ||||
|---|---|---|---|---|
|
- Bilateral - Request sent to a single Maker, receives
Quotemessages. - Basket - Request sent to multiple Makers, receives
MassQuotemessages aggregating the individual MakerQuotemessages. This model is Venue dependent - currently offered by t360_tex and fxspotstream only.
In this model each QuoteSet represents a different Leg/value date, and each QuoteEntry for a given QuoteSet contains the Leg quote details provided by an individual LP, identified by reference to the "ExecutionVenue" EntryPassthruKey.
QuoteEntries in MassQuote are sorted by best Bid/Offer.
SPT,FWDandNDFare sorted by BidPx/OfferPx.SWPandNDSare sorted by Swap points.BLKandNDBare sorted by SpotRate.
If two QuoteEntries have the same price, they will be ordered from Oldest to Newest.
Please also see Price Representation.
In both cases, standard RFS subscription rules apply - the subscription is terminated by a deal request or a pricing duration timeout.
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
Client as Maker
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
ESP
Streaming
Each individual MassQuote is good until replaced, withdrawn or ValidUntilTime expiry.
...
- Dynamic Volume Bands - Sizes are not pre-configured, the Maker will dynamically determine the sizes for which Market Data is published. The number and location of rungs for Bid and Offer being independent.
- Preset Amounts in Request - Where supported by the Venue, the size of each individual rung may be specified in the
QuoteRequestmessageNoBodyPassthruFieldsblock.
Client as Taker
The standard Taker pricing message flow is illustrated in the sequence diagram below:
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
Subscription Response
| Note | ||
|---|---|---|
| ||
The client will receive an immediate response to an invalid However, the client may not always receive an immediate
A Venue's response actually depends on the instrument being traded, time of day and venue-specific behaviour. The client may wish to implement a timeout mechanism to unsubscribe and then either:
|
Client as Maker
The Venue will typically issue multiple requests for each currency pair, one for each configured pricing group (aka "client bucket" etc.).
...
- Some venues are fairly unconstrained in terms of how many categories may be defined, but others (e.g. Bloomberg, CNX) have specific uniquenesses that need to be understood before decisions are made.
- Some venues may allow or mandate that ladders are used in a VWAP manner, some may preclude this.
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
Dealing
Client as Taker
| Gliffy Diagram | ||||
|---|---|---|---|---|
|
Client as Maker
| Note | ||
|---|---|---|
| ||
The messages flows documented here illustrate illustrates a standard "Last-Look" trading model. "Firm" trading is possible on some Venues and comprises standard MassQuote provision alongside receipt of ExecutionReport messages from the Venue notifying the maker of the fills. |
| Gliffy Diagram | ||||
|---|---|---|---|---|
|