Private-First Latency Analysis
The CME operates on the private-first principle. The private fill messages to individual participants are sent before the trade update in the public market data. This allows the liquidity providers involved in a trade event to react before participants not involved in the trade (also see here).* There is some subtlety to this: Not all passive fills benefit from this information advantage. The best mental model (no idea if this is the implementation) is to assume that first private messages are sent sequentially based on the queue position of the filled order. But once a certain number has been reached, the public data is sent before resuming with the remaining private messages.
Only based on the public market data, it is possible to tell where this crossover occurs.
We pick the most obvious trade: E-mini (ES) trades triggering a reaction in the E-micro (MES). For each trade event in either of the products, we extract the TransactTime (gateway-in timestamp) and the SendingTime. Around the SendingTime of a potential trigger in the ES, we then look for trades in the MES and record the difference between the ES SendingTime and the MES TransactTime. Note that it is possible to see the reaction prior to the public SendingTime.
We remove any "reaction" whose TransactTime is within the first half of the MES TransactTime to ES SendingTime interval. These were most likely not triggered but instead sent independently.
We then plot the latency histogram as shown in the top panel of Fig. 1 below. The blue section of the histogram represents reaction to the public market data while the orange section are reactions to private data. Each of the histograms below only considers triggers with a particular number of passive orders involved in the trade.
If there is only a single order then the public update will be sent immediately after the single private message. The maximum latency advantage is hence small. The maximum (for the first-in-queue passive order) latency advantage grows with the number of passive orders involved in the trade. If the time required to generate a private message is a constant, then this growth should be linear. But beyond the crossover point, this trend stops.
And this is exactly what we see in Fig. 1. The earliest reactions to private data occur earlier and earlier with increasing number of passive fills - almost perfectly linearly with a slope of around 11 μs per additional passive fill. But beyond 13 passive fills, the histogram does not change anymore.
So, at least over this period and for this product, the crossover point was 13 passive orders. If your order was #14 in the queue then you will learn of the trade first in the public data.
I am curious how this is implemented - is the number 13 a config parameter that can be adjusted over time and/or set independently for each product? And if so, why 13? Is this the compromise reached in a committee meeting? Have their been times or are there instruments where the crossover is not at 13?
Data: A7
* This is not nefarious. A reasonable argument can be made that this improves liquidity.
Researcher in Quantitative Finance
2moLink should be .com, not .de !!!
My understanding is that it is configurable and configured differently by product as you hypothesized.
Founder & CTO Angelia Systems. Ultra-Low Latency Trading Technology.
2moDoes this analysis imply the first ES passive fill (first in the queue) is always being used to trigger an order on MES? Doesn’t seem right, what an I missing?