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.

  • $\begingroup$ By recreate do you mean simulate bids, asks or spreads from some bid-ask model? $\endgroup$
    – develarist
    Commented Jan 18, 2021 at 13:11
  • $\begingroup$ best case estimates of bid-ask at any transaction. $\endgroup$
    – shoonya
    Commented Jan 18, 2021 at 16:22
  • $\begingroup$ 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. $\endgroup$
    – Pleb
    Commented Jan 18, 2021 at 17:03
  • $\begingroup$ 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 $\endgroup$
    – develarist
    Commented Jan 18, 2021 at 17:35
  • $\begingroup$ 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? $\endgroup$ Commented Jan 19, 2021 at 12:30

2 Answers 2


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.

  • $\begingroup$ 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. $\endgroup$
    – shoonya
    Commented Jan 18, 2021 at 10:54
  • 1
    $\begingroup$ 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. $\endgroup$ Commented Jan 18, 2021 at 11:16
  • $\begingroup$ There are approximate 30000-40000 transactions per day. $\endgroup$
    – shoonya
    Commented Jan 18, 2021 at 11:18
  • $\begingroup$ 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). $\endgroup$ Commented Jan 18, 2021 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.

  • $\begingroup$ The model was fit and tested on markets prior to decimalization. $\endgroup$ Commented Jan 20, 2021 at 9:37

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.