A database only has transactions/trades for a given instrument. In order to recreate bid-ask of the instrument to estimate the average bid-ask spread, what process does one need to follow? what are the various assumptions involved. have not found anything concrete.

• By recreate do you mean simulate bids, asks or spreads from some bid-ask model? – develarist Jan 18 at 13:11
• best case estimates of bid-ask at any transaction. – shoonya Jan 18 at 16:22
• Do you need intraday bid-ask spread estimations or is a daily estimate good enough? There exists estimators of bid-ask spreads that uses daily log-prices, but also gives you a two-day spread estimate. – Pleb Jan 18 at 17:03
• Best case estimates are pointless since predicting the spread, like predicting prices, is just a guessing game that is futile. There are models in journal articles that stubbornly try to do it anyway – develarist Jan 18 at 17:35
• What fields are available in your trade feed, e.g. trade number, exact timestamp, trade direction (B/S), originating order number, session identifier (OA,normal,CA,post-crossing)? Does the feed contain round lot or odd-lot trades as well? Do you have backtesting quotes for the same (or comparable) securities to verify the model? – Sergei Rodionov Jan 19 at 12:30

Unfortunately there is no information available to do this.

You might be able to infer some brief bid-ask spread data from consecutive transactions that have are very tightly spaced time-wise but have a price variance, but this is would only be relevant for that particular short time period, unless you really do have an extremely liquid instrument.

• The transactions data contains each and every trade that has happened for the instrument. Since each transaction is available, would it be feasible to infer bid-ask at every transaction. – shoonya Jan 18 at 10:54
• No - let's say there were 10 transactions per day on an instrument that trades for 8 hours a day, there's really no information to provide you with any meaningful level of bid-ask. If there were 500 transactions a second on an instrument that trades for 8 hours a day, then that is a different story completely. – Norgate Data Jan 18 at 11:16
• There are approximate 30000-40000 transactions per day. – shoonya Jan 18 at 11:18
• Then look at trade deltas and infer it, compare against real bid-ask data for that instrument (assuming it has the same characteristics/trade volume/frequency now as it did then). – Norgate Data Jan 18 at 11:19

The standard academic way to do this is to start by using Roll's model (1984). If $$p_t$$ is the (log) price of an asset then setting $$r_t = p_t - p_{t-1}$$, we can estimate the percentage bid-ask spread as:

$$\widehat{s} = 2 \sqrt{-\mbox{Cov}(r_t, r_{t-1})}$$

In practice, this measure may not perform very well and all sorts of extensions and modifications have been proposed. Having said that, using Roll's model as a starting point and ascertaining to what extent the data satisfies the model's assumptions can be a very useful stepping stone in terms of selecting/developing a more satisfactory model.

• The model was fit and tested on markets prior to decimalization. – Sergei Rodionov Jan 20 at 9:37