Stale Price 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 price 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 price protection is achieved by monitoring two parameters that can be statically configured below:
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.
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 |