In this question, suggestions on algorithms from Lee and Ready and Pan and Poteshman address ways to determine trade side without access to bid/ask quotes.

The streaming data I have access to yields data similar to the below:

timestamp      mark     bid      ask      last     volume
1635113033622  4526.25  4526.25  4526.5   4526.25  2239
1635113034196  4526.50  4526.00  4526.25  4526.50  2241

Would it be reasonable to find the midpoint between bid and ask, then compare to last in the same row?

If last is ≥ midpoint, buyer initiated—else, seller initiated.

midpoint = (bid + ask) / 2
side = 'buyer' if last >= midpoint else 'seller'

Would there be an alternate way of inferring what side is being more aggressive? Also, I'm unsure if the last price in the same row would be ideal to compare to bid/ask quotes, or should the comparison be made to last in prior row.

Any pointers are greatly appreciated.


1 Answer 1


What you are doing is the best you can do with that data. But bear in mind that you will see executions in the middle often from many sources and you won't have the data to tease that out. If you can get a direct feed then the exchanges will show you execatly who initiated when they can. (Many orders are hidden so you can't see it).

Also, make sure you are aware of the timestamps. Trades can come in after the market moves already, so you need to make sure you are resorted in time order.


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.