Most Market-making venues expect the liquidity provider to provide a complete volume ladder per subscription, typically via MassQuote or MarketDataSnapshotFullRefresh messages.
For a given instrument, there may be multiple subscriptions, in order for the maker clients to be associated with a particular pricing "Scheme" (e.g. separate subscriptions requests for Gold, Silver, Bronze pricing in EUR/USD).
In this context a small number of Schemes are bilaterally agreed between the venue and the Maker. Each Maker client is associated with a single Scheme. The Maker uses each Scheme to provide a custom combination of currency pairs, available liquidity (no. of rungs, and associated quantities), spread, granularity of pricing and so on. Each volume ladder update is complete and self-contained.
Currenex does not operate like this. Instead a larger set of "Tiers" are agreed between the Venue and the Maker. Each Tier is essentially a single bid-offer rung (i.e. not a Ladder), for an arbitrary set of currencies. Currenex can be configured to associate each Tier with a specific quantity which will be specified in the associated subscription request. If not configured, the maker may provide whatever volume they wish, from update to update.
Maker clients are associated with a arbitrary sets of Tiers. This has a great deal of inherent flexibility, but means that a substantial number of tiers are required in order to exactly replicate a 'standard' model on another venue. For example to deliver 5-rung Gold, Sliver, Bronze pricing across all pairs in Currenex you would need 15 separate Tiers.
In the context of Whisperer Classic, this means the following:
- Currenex makes a separate subscription request for each Tier - each of these will be forwarded to the API client. Key Currenex IDs are mapped as follows:
MFAPI-Out.QuoteRequestMessage.contents.mdStreamID = FIX-In.QuoteRequest.StreamReference[7533] # Tier name e.g. "PS1"
MFAPI-Out.QuoteRequestMessage.contents.quoteReqID = FIX-In.QuoteRequest.QuoteReqID[131]
- The API client must of course respond to each individual subscription request with a stream of MassQuote messages in the normal manner. Key Currenex IDs are mapped as follows:
FIX-Out.MassQuote.QuoteSetID[302] = MFAPI-In.MassQuote.contents.quoteReqID
FIX-Out.MassQuote.NoQuoteSets{*}.NoQuoteEntries{*}.QuoteEntryID[299] = MFAPI-In.MassQuote.contents.quotes{*}.quoteID
- However: It must be understood that each MassQuote is destined for a single, single-rung tier. It follows therefore that each MassQuote message must comprise a single rung. Either a single Bid or a single Offer or both sides may be quoted. Each side may specify independent amounts.
Unlike other venues, the Maker is thus responsible for the fan-out of their standard volume-laddered quotes across individual Currenex Tiers.
Why Can't Whisperer 'Normalisation' support Currenex Stacked Pricing?
MarketFactory has done the necessary business analysis to define a model to allow the Maker customer to deliver a MassQuote Ladder as per other venues. This necessarily requires additional MarketFactory configuration to map between multiple Currenex Tiers (agreed between Currenex and Maker) and custom pricing Scheme names (agreed between Maker and MarketFactory).
In addition the solution is by nature brittle - for example, Whisperer must accumulate the necessary Currenex subscription requests before sending a single QuoteRequestMessage to the Maker and cannot be guaranteed to correctly handle scenarios when there is a mismatch of configuration between Maker and Currenex, or the maker MassQuote contains more rungs than expected, and so on.
For these reasons we have, to date, elected not to implement this feature. However should a customer have a strong interest in the detail additional information is available, on request.