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 |
The stale quote protection is achieved by monitoring two parameters that can be statically configured below:
- The number of milliseconds at or after which a quote can be considered stale and excluded from consideration for quotes that can be sent to a venue. Whisperer then starts timing staleness of a quote at the point the quote is deleted. Ensuring that the most recent quote is always valid.
- Monitoring the number of ticks that a quote is valid for. With quotes that arrive less recently than the number of quotes configured considered stale and excluded from consideration for quotes that can be sent to a venue. Again ensuring that the most recent quote is always valid.
Once both conditions are invoked failure for an order to meet either argument can result in a quote being removed from consideration. Another way to think of it is that both conditions must be satisfied in order for a quote to be considered valid.
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 |
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 |
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 |