Per-asset feature construction
df["return_1d"] = df["close"].pct_change()
df["log_return"] = np.log(df["close"] / df["close"].shift(1))
df["ma_5"] = df["close"].rolling(5).mean()
df["ma_10"] = df["close"].rolling(10).mean()
df["volatility_7d"] = df["return_1d"].rolling(7).std()The feature builder applies the same documented daily transformations to each normalized asset series before persisting the result.