Skip to content

PARKINSON VOLATILITY

Intuição

O estimador de Parkinson usa apenas high e low para estimar volatilidade. Ele é mais eficiente que estimadores baseados apenas em close-to-close quando não há drift significativo.

Definição

Seja HL_t = ln(high_t / low_t). A variância estimada em janela n é:

Var = E[HL_t^2] / (4 * ln(2))

A volatilidade é sqrt(Var).

Uso

from quantmaster.features.volatility import parkinson_volatility

df["parkinson"] = parkinson_volatility(df, window=20)

API

Source code in src/quantmaster/features/volatility.py
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
def parkinson_volatility(
    data: pd.DataFrame,
    *,
    window: int = 20,
    high_col: str = "high",
    low_col: str = "low",
) -> pd.Series:
    window = validate_positive_int(window, name="window")
    validate_columns(data, required=(high_col, low_col))

    h = pd.to_numeric(data[high_col], errors="coerce").astype(float)
    l = pd.to_numeric(data[low_col], errors="coerce").astype(float)

    h = h.where(h > 0)
    l = l.where(l > 0)

    log_hl = np.log(h / l)
    var = log_hl.pow(2).rolling(window).mean() / (4.0 * np.log(2.0))

    out = np.sqrt(var.clip(lower=0.0))
    out.name = f"parkinson_volatility_{window}"
    return out