In the moment, for a share X, to trade I use the price, volume, $volume, # trades, % chg and the bid-ask spread (BAS). To make day trading on the OTC market, it is quite easy to judge humanly what differentiates a good from a bad BAS. However, it is not so easy to program it. How can we describe a good from a bad BAS mathematically? As far as I'm concerned, if the BAS is large enough, then it is good to do scalping strategy and if it is small enough, then it is good for standard day trading. How could we define 'large enough' and 'small enough' mathematically? Any help? I give you an example : Share bidPrice bidSize askPrice askSize 1 0.0004 4499998 0.001 11203000 2 1.86 875 1.88 1200  Do you understand that even if 1.88 - 1.86 = 0.02 > 0.001-0.0004 = 0.0006, I prefer to buy 1000$ of the second action than the first one? The probability that the BAS(action 1) becomes small enough is lower than the BAS(action 2) becomes small enough.

BAS, askSize, bidSize, and volatility are probably variables to consider.

• I am not sure what you mean when you say it is easy to judge a good or bad bidask spread. Perhaps you could measure the bid ask spread as a percentage of the price $\frac{a-b}{0.5*(a+b)}$ and see how that compares to your intuition of good vs bad. At what value do you feel that it starts to become "bad" ? – Alex C Feb 26 '18 at 23:19
• @AlexC Are you able to build a full answer? Where you formula come from? – J.Doe Feb 27 '18 at 4:14
• I think the best answer is dm63's. In my formula the numerator is the bid ask spread and the denominator is the bid ask midpoint. – Alex C Feb 27 '18 at 15:10
• Could you please explain the kind of data you have access to? Do you want to build a real-time estimate of the “fair” bid-ask spread given the usual 40,000 trade per day that are done on equities (and associated quotes) in the US? Or are we speaking about corporate bonds, traded at more 10 times a day? – lehalle Feb 28 '18 at 6:40

It seems that you want to minimize your regret and that you have a liquidity consumption/provision model in mind. Let me try this:

• you see $(P_A,Q_A)$ at the ask and $(P_B,Q_B)$ at the bid
• you strongly believe that the bid and the ask are consumed by two Poisson processes of respective intensities $\lambda_B$ and $\lambda_A$
• and you believe that the insertion of a limit order in the front of the best bid (resp. best ask) is a Poisson process too with an intensity $f(Q_{B/A})$ where $f$ is an increasing function applied to $Q_B$ or $Q_A$.

Under these assumptions, as far as no limit is consumed or created:

• on average the ask and bid will be fully depleted in $\tau^-_{A/B}$ seconds such that

$$\tau^-_{A/B}={Q_{A/B} \over \lambda_{A/B}}.$$

• on average an order will be inserted resp. Inserted at the bid and ask in $\tau^+_{B/A}$ seconds such that.

$$\tau^+_{B/A}={1\over f(Q_{B/A})}.$$

Then you can take the decision you want, here for a buy order:

• if on average the price will come in your direction, ie $\tau^-_B$ or $\tau^+_{A}$ are the smallest of all the average durations: wait
• else: send a market order.

The problem is that I do not agree with you.

I think what matters is the size of the BAS versus the volatility of the underlying stock. If that ratio is small, it's better to be a price taker. If it is wide , it is better to be a price maker. I would say that the ratio BAS/daily volatility would need to be lower than 5 percent to be considered low.

• Interesting, but could you dig deeper mathematically. – J.Doe Feb 27 '18 at 13:22
• How do you define de daily volatility? Is it the standard deviation? – J.Doe Feb 27 '18 at 14:17
• Yes, you could use the standard deviation of daily logarithmic returns for some past period (like last 3 months or 6 months), i.e. the Black Scholes historical vol. But you could also use other measures, even the average daily range over some past period for example. – Alex C Feb 27 '18 at 15:12
• I don't understand why we do not use the asksize and bidsize. I think it is relevant for my question. – J.Doe Feb 27 '18 at 17:02

Let's say you have an array of previous n BAS: BAS[n] If you calculate the average of these BAS (the simple average):

    Avg=(BAS[0]+BAS[1]+...+bas[n-1])/n


You have a reference to compare your current BAS with the average one, to see if it´s large enough, or small enough.

The difficult part here is to know how many BAS values take in account in the average, but some tests will give you that.