Skip to content

AMIHUD ILLIQUILITY

Intuição

A Amihud Illiquidity é uma proxy clássica de price impact: quanto o preço se move (em magnitude) por unidade de volume negociado. Valores maiores indicam menor liquidez.

Definição

Para um retorno diário r_t e dollar volume DV_t = close_t * volume_t:

ILLIQ_t = mean(|r_t| / DV_t), calculado como média rolling em uma janela n.

Uso

from quantmaster.features.microstructure import amihud_illiquidity

df["amihud_illiquidity_20"] = amihud_illiquidity(df, window=20)

API

Source code in src/quantmaster/features/microstructure.py
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def amihud_illiquidity(
    data: pd.DataFrame | pd.Series,
    *,
    window: int = 20,
    price_col: str = "close",
    volume_col: str = "volume",
    log_returns: bool = True,
) -> pd.Series:
    window = validate_positive_int(window, name="window")

    if isinstance(data, pd.Series):
        raise TypeError("amihud_illiquidity requires a DataFrame with price and volume")

    validate_columns(data, required=(price_col, volume_col))

    price = get_price_series(data, price_col=price_col).astype(float)
    volume = pd.to_numeric(data[volume_col], errors="coerce").astype(float)

    price = price.where(price > 0)
    volume = volume.where(volume > 0)

    if log_returns:
        rets = np.log(price).diff()
    else:
        rets = price.pct_change()

    dollar_volume = price * volume
    ratio = rets.abs() / dollar_volume
    ratio = ratio.where(dollar_volume > 0)

    out = ratio.rolling(window).mean()
    out.name = f"amihud_illiquidity_{window}"
    return out