The Lab

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 arbitrary sets of Tiers, rather than a single Scheme. 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 considered the feasibility of offering a model to allow the Maker customer to deliver a MassQuote Ladder as per other venues:

    • Additional MarketFactory configuration would be required to map between multiple Currenex Tiers (agreed between Currenex and Maker) and custom pricing Scheme names (agreed between Maker and MarketFactory).
    • The current pass-thru of Tier names and QuoteRequest IDs from Currenex to the Maker would most likely not be possible to retain - leading to increased opacity when Support team interaction is required.
    • Whisperer must accumulate the necessary Currenex subscription requests before sending a single QuoteRequestMessage to the Maker for the full Ladder. It 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.






  • No labels