What would be the best algorithm to identify Iceberg Orders?

I have found one in the paper "The Impact of Hidden Liquidity in Limit Order Books" by Stefan Frey and Patrik Sandas, but I was wondering if anyone here would have inputs on the subject.

  • $\begingroup$ do you have access to direct feeds? $\endgroup$ – LazyCat Aug 15 '17 at 15:15
  • $\begingroup$ No, I am dealing with historical data. $\endgroup$ – python_enthusiast Aug 15 '17 at 15:22
  • $\begingroup$ the answer to your question depends on your source of data. E.g. direct exchange feeds, SIP, snapshots every X minutes, etc. $\endgroup$ – LazyCat Aug 15 '17 at 15:31
  • $\begingroup$ Could you expand on that, please? I am interested in all kinds of data. (I have access to all sorts of datasets, but right now I am using historical tick data) $\endgroup$ – python_enthusiast Aug 15 '17 at 16:20
  • $\begingroup$ Would be great to have a review and some updates on this already old question, while not having any good answers. $\endgroup$ – not2qubit Apr 17 at 23:28

Liquidity seeking is difficult to test empirically since price only data tells us nothing about the how transactions related to the level 1 (NBBO) order book, let alone the depth of the order book.

The method I use to locate hidden liquidity (e.g., iceberg orders) for illiquid securities involves crossing the bid/ask. While crude, it has allowed me to transact larger quantities in shorter time horizons.

For example, if I want to buy 1000 shares of X and there is no asking price and 100 shares already being bid, I would put in an offer for 100 shares above the bid.

Ideally, it does not transact, and it causes an offer better than my own, whereupon I have forced other participants to show their hand meaning that I can potentially transact at a better price. In this case, the additional information allows me to place a more competitive bid

If it does not transact and reveals no further information, then I might proceed to cross the bid by offering to short 100 shares and then immediately put in a bid for 1100 shares at the transaction price. In crossing the bid, there is a good chance that it will trigger hidden orders and/or orders that triggered by the spread (e.g., pegged and relative orders) thereby revealing previously hidden liquidity.

Obviously, crossing the bid is risky because there is a good chance of selling low and being forced buy higher. There may also truly be no liquidity which means that now I am stuck with a short. But at least this avoids the alternative of chasing the bid and has a good chance force to reveal some extent of the hidden order book.

  • $\begingroup$ It's hard to follow verbally, does someone have (pseudo) code or state machine for an actual algo? $\endgroup$ – not2qubit Apr 17 at 23:06

the best example will be bid * ask which one of the sides is being hit again and again and yet the amount of the bid/ask size is being refreshed. so best bid is 99 and it's size is 1000 shares or 1 share etc. and ask price is 100 and all trades are done on the bid side and the amount traded on the bid is higher than the bid size. this is the simple case. the more complicated is what if the bid price moves by 1 tick etc.


As a manual trader, i could identify the iceberg orders because my interface provided me in real time the number of buys and the number of sells at best ask and best bid. When the number of buys (or sells) keep increasing but the bid (or ask) price doesn't go up (or down) (or keep reverting to the same level), i could say there was a sell (or buy) iceberg order at this level.

From an algo perspective, i don't know how to compute/retrieve number of buys/sells as most brokers only deliver bid/ask price, bid/ask size and volume. If anyone has an idea how to find/compute number of buys/sells, that would be highly appreciated.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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