Small Group Tutorials

Here to help students catch up, keep up, and move ahead. Book a consultation here.

How Corwin–Schultz High–Low Algorithms Estimate Bid–Ask Spreads from Daily Prices: One-Day and Two-Day Ranges, Volatility Separation, Negative Estimates and Liquidity-Proxy Failure

Reader question: What if intraday quote data are unavailable? Can daily high and low prices still reveal something about the bid–ask spread?

The Corwin–Schultz estimator uses the relationship between one-day and two-day high–low ranges. Volatility causes price ranges to grow with elapsed time, while a bid–ask spread contaminates each day’s observed high and low in a different way. By comparing these two scales, the estimator attempts to separate the spread component from underlying price volatility.

This article owns one precise computational job: estimating an effective bid–ask spread proxy from daily high and low prices using the Corwin–Schultz two-scale range construction. It does not own Roll covariance spreads, quoted/effective spreads from intraday data, Kyle price impact, or general liquidity measurement.

This is public mathematical and computational education. It is not a trading signal, and a high–low spread estimate is not a substitute for actual quote data when those data are available and reliable.


1. The measurement problem

Observed transaction highs and lows reflect at least two forces:

  • movement in the efficient price during the day;
  • the bid–ask spread around that efficient price.

A wider spread mechanically increases the observed high–low range even if fundamental volatility is unchanged.

The key identification insight is that the volatility contribution to a two-day range scales differently from the spread contribution. The two-day comparison creates enough structure to estimate both.

2. One-day range statistic

For day t, let Ht and Lt be the daily high and low.

Define a squared log range:

Rt² = [ln(Ht/Lt)]².

For two adjacent days, Corwin–Schultz forms a statistic commonly denoted β from the sum of the two daily squared ranges:

β = Rt² + Rt+1².

3. Two-day range statistic

Across the same two-day window, define:

Ht,t+1 = max(Ht,Ht+1),

Lt,t+1 = min(Lt,Lt+1),

and:

γ = [ln(Ht,t+1/Lt,t+1)]².

The one-day and two-day ranges carry overlapping information about volatility, but the spread enters differently because the two-day range has only one extreme high and one extreme low across the whole window.

4. Recovering the spread parameter

Corwin and Schultz derive a transformed parameter α from β and γ. In a common implementation:

α = [√(2β) − √β]/[3 − 2√2] − √[γ/(3 − 2√2)].

The estimated proportional spread is then:

S = 2(eα−1)/(1+eα).

Software and papers may express the algebra in equivalent forms. The important implementation rule is to use one internally consistent formula and test it on known examples.

5. Why negative estimates appear

Sampling noise, overnight moves, trends and violations of the identifying assumptions can produce:

α < 0

and therefore a negative raw spread estimate.

A negative bid–ask spread is not economically meaningful. Many implementations therefore truncate:

α* = max(α,0).

But truncation is not free. A frequent need to truncate is itself a diagnostic that the estimator’s assumptions may be weak for the asset or period.

6. The role of overnight moves

The theory is easiest when the two-day high–low structure reflects continuous within-market price evolution plus a spread.

Large overnight news moves can make the two-day range much larger than the sum of within-day ranges in a way that the spread formula interprets incorrectly.

Corwin–Schultz discuss overnight-return adjustments precisely because close-to-open jumps can bias the estimator.

Falsifier: compare estimates on assets with large versus small overnight components and audit how the chosen implementation handles close-to-open movement.

7. Why the estimator is useful

Its attraction is data economy.

  • It needs only daily highs and lows.
  • It can be applied historically when quote data do not exist.
  • It scales easily across thousands of securities.
  • It can create long liquidity histories from standard OHLC databases.

That makes it valuable for cross-sectional and historical research where intraday spread measures are unavailable.

8. Why the estimator is not a replacement for quotes

If National Best Bid and Offer or exchange quote data are available, the actual quoted/effective spread can usually be measured more directly.

Corwin–Schultz is most useful as a low-frequency proxy. Its convenience should not be mistaken for superior information.

9. Effective spread versus quoted spread

The estimator is often interpreted as an effective spread proxy generated by transaction highs/lows rather than a literal posted quote spread at a particular moment.

That distinction matters when comparing it with microstructure measures derived from trade and quote data.

10. Inputs and outputs

Inputs can include:

  • daily high Ht;
  • daily low Lt;
  • optional open/close for overnight adjustment;
  • trading calendar;
  • corporate-action adjustments;
  • minimum price filters;
  • pairing/aggregation rules.

Outputs can include:

  • two-day spread estimates;
  • monthly/annual averages or medians;
  • negative/truncated-estimate frequency;
  • coverage rate;
  • comparison with quoted/effective spreads where available;
  • overnight-sensitivity diagnostics.

11. Data hygiene

  • H must be at least L and both must be positive;
  • stock splits must be adjusted consistently;
  • zero/erroneous highs or lows must be removed;
  • non-trading days must not be paired as if they were ordinary adjacent sessions;
  • stale prices and price limits can distort ranges.

Simple formulas are particularly vulnerable to simple data errors.

12. Evidence polarity

Evidence for confidence includes:

  • positive correlation with observed quoted/effective spreads;
  • cross-sectional ordering consistent with known liquidity differences;
  • low frequency of negative raw estimates;
  • stability across nearby aggregation windows;
  • reasonable behavior during known liquidity shocks;
  • results robust to the stated overnight adjustment.

Evidence against confidence includes:

  • frequent negative α;
  • large dependence on overnight treatment;
  • weak correlation with actual spreads;
  • price-limit regimes dominating ranges;
  • illiquid assets with stale highs/lows;
  • corporate-action contamination.

13. Counterexample: large overnight jump

A stock closes at 100, opens next day at 120 on earnings, then trades tightly between 119 and 121.

The two-day range is enormous even if the actual bid–ask spread is small.

Falsifier: isolate overnight movement. If the spread estimate spikes primarily because of close-to-open jumps, the liquidity interpretation is weak.

14. Counterexample: price-limit market

If daily prices repeatedly hit exchange-imposed upper or lower limits, observed ranges are censored by market design.

Falsifier: flag limit-hit days and compare estimates with unconstrained periods.

15. Counterexample: stale illiquid security

A very illiquid stock may record the same high and low for days because only one trade occurred.

The estimator can report a tiny spread even though true liquidity is poor.

Falsifier: combine the spread proxy with trading-frequency/zero-volume diagnostics. A zero range is not automatically high liquidity.

16. Counterexample: volatile but liquid stock

A highly liquid stock can have a wide daily range because fundamentals move, while quoted spreads remain tight.

The two-scale construction is designed to separate volatility from spread, but finite-sample violations can remain.

Falsifier: benchmark against actual spreads across volatility regimes.

17. Counterexample: frequent truncation hides model failure

An analyst truncates every negative spread estimate to zero and then averages the series.

The result looks clean, but the truncation frequency may reveal systematic model-data mismatch.

Wintour House test: do not edit away the evidence. Report the negative-estimate rate beside the cleaned series.

18. Corwin–Schultz versus Roll

Roll spread algorithms infer spread from negative serial covariance caused by bid–ask bounce.

Corwin–Schultz uses daily high–low ranges across one and two days. The data inputs and identifying assumptions are different.

19. Corwin–Schultz versus quoted/effective spreads

Quote/trade data measure microstructure directly at high frequency. Corwin–Schultz is a daily-price proxy designed for data-sparse settings.

20. Corwin–Schultz versus Amihud

An Amihud-style illiquidity ratio measures absolute return per unit dollar volume. It targets price response relative to trading volume, not the bid–ask spread specifically.

Two securities can have similar Corwin–Schultz spread estimates and very different price-impact/volume characteristics.

21. Weak links

  • overnight jumps;
  • stale highs/lows;
  • corporate-action errors;
  • price limits;
  • negative estimate truncation;
  • daily aggregation hiding intraday structure;
  • using spread proxy as total-liquidity measure;
  • comparing unadjusted formulas across implementations.

22. What would falsify confidence?

Confidence should be withdrawn if the estimator correlates poorly with actual spread data where available; if negative estimates are frequent; if overnight treatment drives results; if known illiquid securities appear highly liquid because of stale prices; or if market-design constraints dominate daily ranges.

23. Verification and update triggers

Preserve raw OHLC data, corporate-action adjustment method, overnight correction, negative-value handling, pairing convention, aggregation rule and benchmark spread dataset.

Revalidate when exchange trading hours change, price-limit rules change, data vendor conventions change, corporate-action handling changes, or the asset universe shifts toward very illiquid securities.

Research anchors

Educational boundary: Corwin–Schultz is valuable because it extracts a spread proxy from remarkably little data. That convenience is exactly why its assumptions, truncations and benchmark comparisons must remain visible.

Discover more from Bukit Timah Tutor

Subscribe now to keep reading and get access to the full archive.

Continue reading