Spaces:
Sleeping
Sleeping
File size: 880 Bytes
b6d53e2 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | from __future__ import annotations
import numpy as np
from .types import DensityEstimate, OptionSnapshot
def compute_features(
snapshot: OptionSnapshot, density: DensityEstimate
) -> dict[str, float]:
k = density.strikes.to_numpy(dtype=float)
rho = density.density.to_numpy(dtype=float)
spot = float(snapshot.spot)
mean_k = float(np.trapezoid(k * rho, k))
var_k = float(np.trapezoid((k - mean_k) ** 2 * rho, k))
std_k = float(np.sqrt(max(var_k, 1e-12)))
skew = float(np.trapezoid(((k - mean_k) / std_k) ** 3 * rho, k))
tail_mass_left = (
float(np.trapezoid(rho[k < 0.9 * spot], k[k < 0.9 * spot]))
if np.any(k < 0.9 * spot)
else 0.0
)
return {
"spot": spot,
"mean_terminal": mean_k,
"std_terminal": std_k,
"skew_proxy": skew,
"left_tail_mass": tail_mass_left,
}
|