Skip to main content

Roll Measure

Quick Reference

PropertyValue
Dimensionsignal
Categoryliquidity
Versionv0.9.0 (Beta)
Output Columnroll_measure

Roll measure proxy: negative autocorrelation of bar-to-bar price changes

Formula

sqrt(clip(neg_autocorr(diff(close, 1), window), 0.0))

CDM Inputs

ColumnCDM TableDescription
closecdm_*CDM source table

Parameters

ParameterTypeDefaultDescription
windowinteger [5, 200]20Rolling window for autocorrelation

Output

Column: roll_measure

Roll effective spread proxy from price change autocorrelation

Market Intuition & Trading Rationale

Roll measure estimates the effective bid-ask spread from price change autocorrelation: sqrt(-autocorr(Δprice, window)). Roll (1984) showed that bid-ask bounce creates negative serial correlation in price changes — a trade at the ask pushes price up, then a trade at the bid pushes it down, creating an oscillating pattern. The magnitude of this oscillation reveals the effective spread, even without quote data.

Usage Cases

  • Spread estimation without quote data: Estimate transaction costs for markets or historical periods where quote data is unavailable. The Roll measure is the standard approach in academic research.
  • Liquidity comparison across markets: Compare Roll measures across instruments or time periods. Higher Roll measure = wider effective spread = higher transaction costs.
  • Transaction cost estimation: When working with trade-only data (no quotes), use Roll measure to estimate realistic transaction costs rather than assuming fixed costs.

YAML Definition

name: roll_measure
description: 'Roll measure proxy: negative autocorrelation of bar-to-bar price changes'
category: liquidity
version: v0.9.0 (Beta)
dimension: signal
status: Pre-release
required_inputs:
- close
output_column: roll_measure
output_description: Roll effective spread proxy from price change autocorrelation
parameters:
window:
type: integer
description: Rolling window for autocorrelation
required: false
default: 20
constraints:
min: 5
max: 200
formula: sqrt(clip(neg_autocorr(diff(close, 1), window), 0.0))