Stale Quote Protection refers to configuration settings that can be invoked by MarketFactory, to direct FeedServers to reject orders submitted by the customer application. Rather than sending previously quoted orders to the trading venue. The intent of this is to prevent orders being sent to the venue that are too old or stale, and would ultimately result in venue rejection.
Stale quote protection is available for Taker (liquidity consumer) connections to venues, where the customer application submits previously-quoted orders ( that contain within them a quoteID) specifically;
| Name of Trading Venue | MF Feed name |
|---|---|
| Bank of America Meryll Lynch | BAML |
| BNP Paribas | BNPP |
| Barclays Bank | Barx |
| Citadel Securities | Citadel |
| Citi Bank | Citi |
| Commerz Bank | Commerz |
| Credit Suisse | CreditSuisse |
| Deutsche Rapid | DeuRapid |
| EBS Select | EBS Select |
| Goldman Sachs | GoldmanSachs |
| HSBC | HSBC |
| Morgan Stanley | Morgan Stanley |
| Nomura | Nomura |
| Royal Bank of Canada | RBC |
| Royal Bank of Scotland | RBS |
| Saxo Markets | Saxo |
| Societe Generale | SocGen |
| Standard Chartered | StandardChartered |
| UBS | UBS |
| XTX | XTX |
Stale Quote Protection (Y/N)
By default MarketFactory stores up to 64 historic quotes in a per-pair cache.
Enabling Stale Quote protection ensures that the client will never submit orders to the venue against quotes in this cache beyond a certain staleness:
StaleAfterMilliseconds (chronological age) <2000ms
DeleteMessageBuffer (number of quotes age) = 5
Example
Quotes
To keep the example simple, we'll use only bid quotes. The example below displays that the history of quotes that live for a duration of a single tick.
QuoteID | Price | Quantity | Status | Delete Time |
|---|---|---|---|---|
| Quote1 | 1.40 | 1000000 | deleted | 00:00:05 |
| Quote2 | 1.30 | 1000000 | deleted | 00:00:04 |
| Quote3 | 1.10 | 2000000 | deleted | 00:00:03 |
| Quote4 | 1.20 | 1000000 | deleted | 00:00:02 |
| Quote5 | 1.10 | 1000000 | deleted | 00:00:01 |
| Quote6 | 1 | 1000000 | current |
StaleAfterMilliseconds=2000, DeleteMessageBuffer not specified
The example below demonstrates the history of quotes once the condition of stale after 200 milliseconds is invoked without the deleted message buffer
Price and Quantity Needed | Quote matched | What happens |
|---|---|---|
| 1000000@1 | Quote6 | QuoteID returned |
| [email protected] | Quote3 | No quote matched – Quote3 is too old |
| [email protected] | Quote5 | QuoteID returned |
| [email protected] | Quote2 | No quote matched – Quote2 is too old |
StaleAfterMilliseconds not specified, DeleteMessageBuffer = 3
With both conditions invoked (and the buffer size set to a tick size of three (3)) the history for the same period would be seen as below:
Price and Quantity Needed | Quote matched | What happens |
|---|---|---|
| 1000000@1 | Quote6 | QuoteID returned |
| [email protected] | Quote3 | QuoteID returned |
| [email protected] | Quote5 | QuoteID returned |
| [email protected] | Quote2 | No quote matched – Quote2 is outside DeleteMessageBuffer |