I have some Level III (message level) data for equities and I have found several cases in which I register the execution of a Limit Order at a price "worse" than the best bid or ask.

For example, let's say that the Best Bid on that exchange is $20.48 and that there is considerable depth at that price (say, 20,000 shares.) I have several cases in which I have a "full execution" message for a Buy Limit Order (on that same exchange) at price $20.47 without anything happening to all the Buy orders at $20.48... How is that even possible?

  • $\begingroup$ Can you please be more clear on your data source? Is this from a particular exchange or an aggregated feed from somebody else? $\endgroup$ Feb 8, 2015 at 19:41
  • $\begingroup$ @JasonN: thanks for the reply. To address your question: it's an aggregated feed from a data vendor but the executions are reported to occur on the same venue and several milliseconds apart. $\endgroup$
    – g_puffo
    Feb 8, 2015 at 19:45
  • $\begingroup$ I'm a little fuzzy on the wording of your questions. Do you know that there is a better price on the same venue? Are you getting venue tags? Or could this be the BBO on that venue? $\endgroup$ Feb 8, 2015 at 19:56

3 Answers 3


It can be a couple things depending on what you are looking at:

If you are looking at a single exchange's feed, it can be a Trade Message that isn't linked to any individual order ID. These can be things like block orders or off exchange orders that get reported to them. I usually ignore Trade messages when looking at intraday data. These are different from Execution reports which have an order id an you can linked them back to an entry in the limit book.

If you are looking at some form of aggregated feed, the are probably executions on another exchange that (probably) qualify for bypassing the NBBO (such as being flagged Intramarket Sweep) or a couple other exceptions.

  • $\begingroup$ The "Full Execution" message I get gives me the Order Id of the Limit Order getting executed. That's why I can match it to an order that is sitting deeper in the book and not on the market. Also, I was under the impression that an Intermarket Sweep Order, simply, allowed one to walk up the book without having to go to other exchanges to clear the price level. This is not my case since there is plenty of depth at the Best Bid which is un-affected. $\endgroup$
    – g_puffo
    Feb 8, 2015 at 19:49
  • $\begingroup$ So you have an order id, you get an execution report, and it isn't top of book. And you can verify its priority? (i.e., it didn't just span out of nowhere, but has been sitting there with other orders in front of it on the same level)? Or is it the front of the line at that price level and maybe the order at better price is recent? $\endgroup$ Feb 8, 2015 at 19:52
  • $\begingroup$ thanks for taking your time to help! I have 11 Limit Orders sitting on the Best Buy at $20.48 and 17 Limit Orders sitting at $20.47. At a certain point, I get a Message telling me the an order with a certain order ID is fully executed. When I look up that order, I find that it's sitting at $20.47 (all this on the SAME exchange.) So, my question is how can a Limit Order that is NOT at the Best Bid get executed BEFORE the 11 orders that are sitting at the Best Bid? $\endgroup$
    – g_puffo
    Feb 8, 2015 at 20:00
  • $\begingroup$ That is a good question. I've been dealing with direct feeds for the major exchanges for a while, and I've never quite seen what you are describing. It could be a problem with your vendor, especially if they are processing the messages in different threads. If you can still see the exchange timestamp (and you are fairly sure it really is the exchange time), see if there is something weird about that (like it is coming in substantially later than it should). $\endgroup$ Feb 8, 2015 at 20:07
  • $\begingroup$ Interesting... according to my data vendor, they collect the data from each exchange and then aggregate it by timestamp (so, I guess, they use the exchange generated timestamp and that's the one that I see in my data.) I wouldn't be too surprised if this was occurring across exchanges for the reason you mentioned or other synchronization issues. However, given that it's happening on the same exchange it's pretty strange... $\endgroup$
    – g_puffo
    Feb 8, 2015 at 20:20
  1. It happens at the same exchange and you are using the exchange time stamps, so it is unlikely due to the time jitter problem.
  2. According to my knowledge, if your data is from US or EMEA developed equity markets, by-passing the best price in the limit order book is not allowed.
  3. Anti-internalization is in general for internal-crossing or dark pool in the sell side. I haven't seen it in the external exchange level. So that is not likely to be the reason either.

My suggestions: 1. review your data carefully, see if some messages are missing. 2. review your codes carefully, because the Level III data is irregular and typically in binary format. It's very easy to miss (or miss-translate) some messages.

Here is a short reference on how to construct order books from NASDAQ ITCH-Totalview Level III data, https://lobsterdata.com/info/HowDoesItWork.php, and the corresponding working paper at https://papers.ssrn.com/sol3/papers.cfm?abstract_id=1977207.

  • $\begingroup$ Hi LOB, and thank you for your answer. I have already checked my codes by comparing them to those build by some of my colleagues and they are able to replicate their results. Unfortunately, that's not where the problem is. $\endgroup$
    – g_puffo
    Apr 14, 2017 at 22:16
  • $\begingroup$ Agreed, I think you have a bug. $\endgroup$ Apr 14, 2017 at 23:44

Most likely you are missing something as any new order can't bypass the existing orders. The only possibility that comes to mind is if you have anti-internalization set and the broker is trying to hit his own quotes. Say broker A has two quoting systems running and they would otherwise interact. Anti-internalization would not allow this broker to trade with himself.

But, then in the sequence you should see the offending orders get canceled. Those cancelations might come in after the executions.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.