Knowledge BaseMarket & trading › Corwin-Schultz Spread Estimator
Market & trading

Corwin-Schultz Spread Estimator

A way to estimate a stock's bid-ask spread using only its daily high and low prices, when you don't have quote data.

Formula
alpha = (sqrt(2*beta) - sqrt(beta)) / (3 - 2*sqrt(2)) - sqrt(gamma / (3 - 2*sqrt(2))); Spread = 2*(e^alpha - 1) / (1 + e^alpha), where beta = sum of the two consecutive single-day [ln(High/Low)]^2 terms and gamma = [ln(2-day High / 2-day Low)]^2; negative estimates are set to zero.
Daily highusually a buy at the askvsDaily lowusually a sell at the bid
Corwin-Schultz backs the bid-ask spread out of daily high and low prices alone.
▶ Watch: Corwin-Schultz Spread Estimator explained in 24 seconds

What it is

The Corwin-Schultz spread estimator, from Shane Corwin and Paul Schultz (2012, Journal of Finance), estimates the bid-ask spread from daily high and low prices alone. The idea rests on a simple observation about who trades where: the day's high tends to be a buyer-initiated trade executed at the ask, and the day's low tends to be a seller-initiated trade executed at the bid. So the observed high-low range mixes two things together — the stock's true price volatility plus the spread. The key insight is that the volatility component grows with the length of the time interval while the spread component does not, so comparing a one-day high-low ratio against a two-day high-low ratio lets you isolate the spread. The published method also includes an overnight-gap adjustment, and negative estimates are conventionally set to zero.

Why it matters

The bid-ask spread is a real cost of trading that never shows up on a price chart — a wide spread means you pay more to get in and receive less to get out. Quote-level data is expensive and often unavailable for smaller or foreign-listed names, so an estimator built from freely available daily highs and lows makes spread comparable across a wide universe of stocks. That makes it useful for understanding which names are thin and hard to trade, and why a small-cap's realised results can diverge from its paper returns. A pitfall is that this is a model estimate, not an observed quote: it can be noisy for any single stock or short window, it can produce negative daily values that the published convention floors at zero (a step that biases the resulting average upward), and it assumes highs and lows are trade-driven — so on days dominated by news gaps, halts, or very few trades the estimate degrades. Treat it as a research signal about likely liquidity, not a measured transaction cost.

How it's calculated

The only inputs are daily high and low prices — no quotes, no volume. For each pair of consecutive trading days you form beta from the sum of the two single-day squared log high-low ratios, and gamma from the squared log high-low ratio measured across the combined two-day window (the highest high and the lowest low of the pair). Because the volatility component of the range grows with the length of the interval while the spread component does not, comparing the one-day and two-day quantities isolates the spread. An adjustment is applied for overnight gaps, where the previous close sits outside the following day's range. In the published method, individual negative estimates are conventionally set to zero. Quintarthai averages the daily estimates over a 60-day window and reports the result as a percentage of price.

How Quintarthai uses it

The Quintarthai stock screener carries the Corwin-Schultz estimated bid-ask spread % (60-day window) under its Liquidity filter category, so you can compare estimated trading friction across names alongside the other filters. It is shown as a research signal with its methodology and caveats, never as a recommendation — see /app/.

Cross-border note. The estimator uses only daily high and low prices, so it is exchange-agnostic and works the same on TSX and TSX-V names as on US listings — no US-specific calibration is involved. That is exactly why it is useful in Canada, where quote-level data is costly and thinly traded venture names often have no reliable published spread; the estimate is only as good as the underlying daily high/low feed, and very thin names with few trading days will produce noisier readings.

FAQ

Why not just use the actual quoted spread instead of estimating it?
Quote-level (intraday bid and ask) data is expensive and is not available for every listing, especially smaller Canadian venture names. Daily high and low prices are near-universally available, so the Corwin-Schultz approach lets you produce a comparable spread number across a whole screening universe at no extra data cost. If you do have reliable quotes for a specific stock, those are the direct measurement and this estimator is unnecessary.
Why does the estimator sometimes return a negative number?
It is a statistical estimator, not a direct measurement, so sampling noise can push an individual daily estimate below zero even though a real spread can never be negative. The published convention is to set those negative values to zero. Be aware this flooring introduces a small upward bias into the averaged estimate, which is one reason the number is best read as an approximate ranking of liquidity rather than a precise cost figure.
Check your understanding
What insight allows the Corwin-Schultz estimator to separate the bid-ask spread from volatility using only daily high and low prices?
Related terms
See Corwin-Schultz Spread Estimator on a real company
Open any stock in Quintarthai and explore it live across the screener and company pages.
Open the app →