Market Microstructure & Liquidity

Corwin-Schultz (2012) High-Low Spread Lab

Estimate effective bid-ask transaction spreads and fundamental volatility from daily extreme prices ($H_t, L_t$) without high-frequency intraday quote feeds.

Market Regime Presets:
Microstructure Parameters
%
75 bps = 0.75% half-spread paid on trades
%
%
%
True Benchmark Spread

0.750% (75.0 bps)

Theoretical Injected Cost
Truncated CS Spread

0.782% (78.2 bps)

Sample Mean ($S \ge 0$)
Raw CS Spread

0.645% (64.5 bps)

Unconstrained Mean
Negative Spread Frequency

16.9% (10/59)

Pairs where $\beta_t < \gamma_t$
Parkinson (1980) Volatility

26.4%

Annualized High-Low Vol
Sensitivity: True Spread vs Volatility on Mean Estimated Spread (bps)

Simulated average truncated Corwin-Schultz spread (bps) across different asset volatility regimes.

Sensitivity: Sample Window vs True Spread on Negative Spread Rate (%)

Percentage of two-day periods producing negative raw spread estimates ($\beta < \gamma$).

Mathematical Derivation: Corwin-Schultz (2012) High-Low Estimator

1. Continuous Price Ranges and Extreme Value Expectation

Assume unobserved fundamental log-prices $m(t)$ evolve as continuous geometric Brownian motion with drift $\mu$ and volatility $\sigma$. By Feller (1951) and Parkinson (1980), the expected value of the squared log range over a continuous unit interval $t \in [0, 1]$ is proportional to the diffusion variance:

$$\mathbb{E}\left[ \left(\ln \frac{H}{L}\right)^2 \right] = k_1 \sigma^2, \quad \text{where } k_1 = \frac{8}{\pi} \approx 2.5465 \text{ (or } 4 \ln 2 \approx 2.7726 \text{)}$$

In actual markets with a bid-ask spread $S$, the recorded high price $H_t$ occurs on a buyer-initiated trade at the ask price ($A_t = M_t e^{S/2}$), while the recorded low price $L_t$ occurs on a seller-initiated trade at the bid price ($B_t = M_t e^{-S/2}$). Consequently, the observed high-low ratio incorporates both intrinsic diffusion variance and the bid-ask spread:

$$\ln \left(\frac{H_t}{L_t}\right) = \ln \left(\frac{\max_{s} M_{t,s} e^{S/2}}{\min_{s} M_{t,s} e^{-S/2}}\right) = \ln \left(\frac{\max_{s} M_{t,s}}{\min_{s} M_{t,s}}\right) + S$$
2. Two-Day Variance Scaling ($\beta$ and $\gamma$)

To isolate the spread $S$ from the unknown volatility $\sigma$, Corwin and Schultz (2012) evaluate price ranges across two consecutive trading days ($t$ and $t+1$). Let $H_t, L_t$ be the high and low on Day $t$, and $H_{t+1}, L_{t+1}$ be the high and low on Day $t+1$. They define two key sample statistics:

$$\beta_t = \left[\ln\left(\frac{H_t}{L_t}\right)\right]^2 + \left[\ln\left(\frac{H_{t+1}}{L_{t+1}}\right)\right]^2$$ $$\gamma_t = \left[\ln\left(\frac{H_{t,t+1}}{L_{t,t+1}}\right)\right]^2, \quad \text{where } H_{t,t+1} = \max(H_t, H_{t+1}), \; L_{t,t+1} = \min(L_t, L_{t+1})$$

Because variance scales linearly with time, the expected range variance over two full days is $2 \sigma^2$, whereas the single-day range sum $\beta_t$ reflects two separate days each affected by the spread. Taking the expectation and solving the system of nonlinear equations yields the parameter $\alpha$:

$$\alpha_t = \frac{\sqrt{2\beta_t} - \sqrt{\beta_t}}{3 - 2\sqrt{2}} - \sqrt{\frac{\gamma_t}{3 - 2\sqrt{2}}} = (\sqrt{2} + 1)\left(\sqrt{\beta_t} - \sqrt{\gamma_t}\right)$$
3. Bid-Ask Spread Closed-Form Solution

Converting $\alpha$ into the effective proportional bid-ask spread $S$ yields the elegant closed-form Corwin-Schultz equation:

$$S_t = \frac{2\left(e^{\alpha_t} - 1\right)}{1 + e^{\alpha_t}}$$
4. The Negative Spread Phenomenon and Truncation

Whenever $\beta_t < \gamma_t$ (meaning $\sqrt{\beta_t} < \sqrt{\gamma_t}$), $\alpha_t$ becomes negative, producing an impossible negative spread estimate ($S_t < 0$). This occurs because large two-day price movements (trends or high volatility) make the two-day high-low span $\gamma_t$ substantially larger than the sum of the two single-day ranges. Corwin and Schultz recommend setting negative two-day estimates to zero ($S_{\text{adj}, t} = \max(0, S_t)$) before computing monthly or cross-sectional averages:

$$\bar{S}_{\text{CS}} = \frac{1}{T-1} \sum_{t=1}^{T-1} \max\left(0, S_t\right)$$

Microstructure Concept Mastery Quiz

1. Why does the daily high-low price range inherently capture the bid-ask spread?

2. What is the closed-form definition of $\alpha$ in the Corwin-Schultz (2012) framework?

3. What market condition primarily drives the "Negative Spread Puzzle" ($\beta_t < \gamma_t$)?

4. How do empirical practitioners standardly handle negative two-day spread estimates in research?

Related Quantitative Microstructure Labs

Roll Effective Spread Lab

Estimate effective bid-ask spreads from transaction price serial covariance using Richard Roll's (1984) classic model.

Huang-Stoll Spread Decomposition Lab

Decompose bid-ask spreads into adverse selection ($\alpha$), inventory holding ($\beta$), and order processing ($\gamma$).

MRR Spread Decomposition Lab

Deconstruct price changes into adverse selection trade surprises, order processing friction, and public news shocks.

Glosten-Milgrom Lab

Simulate sequential trades, Bayesian quote updating, and adverse selection spread decay.

Frequently Asked Questions

The Corwin-Schultz (2012) model is a closed-form econometric method that estimates effective bid-ask transaction spreads using only daily high and low prices. It relies on the insight that daily high prices are typically buyer-initiated trades executed at the ask, while daily lows are seller-initiated trades executed at the bid. By comparing two consecutive single-day high-low price ratios against the combined two-day high-low ratio, the estimator separates fundamental asset volatility from the bid-ask spread.

Because the highest recorded trade of the day is almost always buyer-driven at the dealer's ask price ($H_t = \max M_t \cdot (1 + S/2)$), and the lowest recorded trade is seller-driven at the bid price ($L_t = \min M_t \cdot (1 - S/2)$). Consequently, the observed daily high-to-low ratio reflects both the intrinsic diffusion variance of the underlying asset and the transaction costs of the spread.

Negative spread estimates arise in sample data when the combined two-day range $\gamma = [\ln(H_{t,t+1}/L_{t,t+1})]^2$ exceeds the sum of the two individual daily ranges $\beta = [\ln(H_t/L_t)]^2 + [\ln(H_{t+1}/L_{t+1})]^2$. This occurs during strong multi-day price trends, high fundamental volatility, or large overnight price gaps where the two-day high/low span expands significantly. Corwin and Schultz recommend setting negative two-day spread estimates to zero before computing monthly or cross-sectional averages.

Overnight price changes between market close and the next open can expand the two-day high-low range without reflecting intraday trading friction. To mitigate this bias, Corwin and Schultz propose an overnight adjustment where the second day's high and low prices are adjusted by the overnight price change ($H_{t+1}^* = H_{t+1} - \Delta_{\text{overnight}}$) if the open is outside the previous day's trading range.

While Richard Roll's (1984) estimator infers the effective spread from first-order negative serial autocovariance of close-to-close returns, Corwin-Schultz (2012) uses extreme daily price ranges (High and Low). Corwin-Schultz generally demonstrates higher empirical correlation with intraday TAQ effective spreads in liquid equities and does not require consecutive tick transaction records or quote timestamps.