(a) Orders for stocks priced below $1.00 are permitted to display in sub-penny increments. Not that this is really relevant to HFT, but it is often a point of confusion.
(b) Orders may rest on the book and display at a price but execute at a separate price. For example, if a market is 20.01 / 20.02 and I believe true value is 20.017 I can bid 20.01 but tell the matching engine that I'm willing to accept 20.015. That you are willing to trade at the midpoint also places you at a higher priority in the queue, above those only willing to buy at 20.01.
Transactions that occur in dark pools (over half the liquidity on NYSE listed stocks these days) typically get posted to the exchange after the fact. This used to cause anonymous hedge fund I used to work for all kinds of problems in the leas liquid markets as half the daily volume would suddenly post dive minutes
Midpoint orders exist on all the venues. All but EDGA/EDGX provide some rebate for resting a midpoint order. DirectEdge charges both sides for what they refer to as "midpoint match".
So basically you don't know the actual midpoint where the market is trading.
Doesn't that mean people can get an advantage by guessing where that point is and bidding just below it? (Not too far below, because then you're wasting money.) And if so, do they use strategies to try to determine where the midpoint is? (e.g. offer a very small number of shares at many different points, see which ones execute)
What the linked article doesn't discuss is that it is possible to get a real-time notification when a trade occurs. The price of the last trade is the mid-point that you are referring to. Algo trading/HFT shops are listening for trades as well as quotes - this is how they know the price that trades are actually happening at.
All trades are made publicly avaiable eventually. The lower latency you want the more you have to pay. And some trades aren't avaiable at low latency for any price.
Note (b) is surprising and I'm not sure I understand. Can you add more details to your example?
If someone sells at 20.01, and I'm higher in the queue because I told the matching engine that I'm willing to accept 20.015, why would I ever not bid 20.0199...? Can someone sell at 20.02 but tell the matching engine they're willing to accept 20.015? Do we match? What does it execute at?
It's just a feature of the matching engine. It's not really that complicated. The venue, let's say BZX, accepts an order from you to display a BID for 100 at 20.01 and you flag the order and tell the matching engine you'll accept 20.015.
When someone comes along and wants to sell, let's say Grandma Sue, she might say: Sell 100 at MARKET. The displayed market is 20.01 / .02. With your bid in the market Grandma will get matched at 20.015, a .005 price improvement over the displayed bid of 20.01. This is a good thing.
It looks like MPL orders are undisplayed. Then how can they "display at a price but execute at a separate price"? Or, what does it mean when I read "The MPL order is an undisplayed limit order that is priced at the midpoint of the Protected Best Bid and Offer (PBBO)" if it doesn't actually mean undisplayed.
There is confusing terminology amongst venues. The key points are: you can execute at the midpoint or at any discretionary offset from the primary or market.
It sounds like they display at a lower accuracy than what you may actually specify, and there's a bit of jiggering to allow the displayed request and true request to both be 'accurate'.
(a) Orders for stocks priced below $1.00 are permitted to display in sub-penny increments. Not that this is really relevant to HFT, but it is often a point of confusion.
(b) Orders may rest on the book and display at a price but execute at a separate price. For example, if a market is 20.01 / 20.02 and I believe true value is 20.017 I can bid 20.01 but tell the matching engine that I'm willing to accept 20.015. That you are willing to trade at the midpoint also places you at a higher priority in the queue, above those only willing to buy at 20.01.