README.md

Efficient Estimation of Bid-Ask Spreads from Open, High, Low, and Close Prices

Implements the efficient estimator of bid-ask spreads from open, high, low, and close prices described in Ardia, Guidotti, & Kroencke (JFE, 2024): https://doi.org/10.1016/j.jfineco.2024.103916

Installation

install.packages("bidask")

Usage

This package implements the following functions. The function edge computes a single bid-ask spread estimate from vectors of open, high, low, and close prices. The functions edge_rolling and edge_expanding are optimized for fast calculations over rolling and expanding windows, respectively. The function spread provides additional functionalities for xts objects and implements additional estimators. The function sim simulates a time series of open, high, low, and close prices. The main functions are presented below. The full documentation is available on CRAN and a vignette is also available.

library("bidask")

Function edge

The input prices must be sorted in ascending order of the timestamp. The output value is the spread estimate. A value of 0.01 corresponds to a spread of 1%.

edge(open, high, low, close, sign=FALSE)

| field | description | | ------- | ----------------------------------- | | open | Numeric vector of open prices. | | high | Numeric vector of high prices. | | low | Numeric vector of low prices. | | close | Numeric vector of close prices. | | sign | Whether to return signed estimates. |

Function: edge_rolling

Implements a rolling window calculation of edge. The output is a vector of rolling spread estimates. A value of 0.01 corresponds to a spread of 1%. This function always returns a result of the same length as the input prices.

edge_rolling(open, high, low, close, width, sign=FALSE, na.rm=FALSE)

| field | description | | ------- | ------------------------------------------------------------ | | open | Numeric vector of open prices. | | high | Numeric vector of high prices. | | low | Numeric vector of low prices. | | close | Numeric vector of close prices. | | width | If an integer, the width of the rolling window. If a vector with the same length of the input prices, the width of the window corresponding to each observation. Otherwise, a vector of endpoints. See examples. | | sign | Whether to return signed estimates. | | na.rm | Whether to ignore missing values. |

Function: edge_expanding

Implements an expanding window calculation of edge. The output is a vector of expanding spread estimates. A value of 0.01 corresponds to a spread of 1%. This function always returns a result of the same length as the input prices.

edge_expanding(open, high, low, close, sign=FALSE, na.rm=TRUE)

| field | description | | ------- | ----------------------------------- | | open | Numeric vector of open prices. | | high | Numeric vector of high prices. | | low | Numeric vector of low prices. | | close | Numeric vector of close prices. | | sign | Whether to return signed estimates. | | na.rm | Whether to ignore missing values. |

Examples

Load the test data.

library("bidask")
x = read.csv("https://raw.githubusercontent.com/eguidotti/bidask/main/pseudocode/ohlc.csv")

Compute the spread estimate using all the observations.

edge(x$Open, x$High, x$Low, x$Close)

Compute rolling estimates using a window of 21 observations.

edge_rolling(x$Open, x$High, x$Low, x$Close, width = 21)

Estimate the spread using custom endpoints.

edge_rolling(x$Open, x$High, x$Low, x$Close, width = c(3, 35, 100))

Estimate the spread using an expanding window

edge_expanding(x$Open, x$High, x$Low, x$Close, na.rm = FALSE)

Cite as

Ardia, D., Guidotti, E., Kroencke, T.A. (2024). Efficient Estimation of Bid-Ask Spreads from Open, High, Low, and Close Prices. Journal of Financial Economics, 161, 103916. doi: 10.1016/j.jfineco.2024.103916

A BibTex entry for LaTeX users is:

@article{edge,
  title = {Efficient estimation of bid–ask spreads from open, high, low, and close prices},
  journal = {Journal of Financial Economics},
  volume = {161},
  pages = {103916},
  year = {2024},
  doi = {https://doi.org/10.1016/j.jfineco.2024.103916},
  author = {David Ardia and Emanuele Guidotti and Tim A. Kroencke},
}


Try the bidask package in your browser

Any scripts or data that you put into this service are public.

bidask documentation built on April 3, 2025, 8:49 p.m.